@@ -3,6 +3,9 @@ var assert = require("assert");
33var fse = require ( "fs-extra" ) ;
44var local = path . join . bind ( path , __dirname ) ;
55var _ = require ( "lodash" ) ;
6+ const util = require ( "util" ) ;
7+ const exec = util . promisify ( require ( "child_process" ) . exec ) ;
8+
69
710const generatePathWithLength = ( base , length ) => {
811 let path = `${ base } /` ;
@@ -286,6 +289,62 @@ describe("Clone", function() {
286289 } ) ;
287290 } ) ;
288291
292+ if ( process . platform === "win32" ) {
293+ it ( "can clone with ssh using old agent with sha1 signing support only" ,
294+ async function ( ) {
295+ var pageant = local ( "../../vendor/pageant.exe" ) ;
296+ var old_pageant = local ( "../../vendor/pageant_sha1.exe" ) ;
297+ var privateKey = local ( "../../vendor/private.ppk" ) ;
298+ var test = this ;
299+ var url = "git@github.com:nodegit/test.git" ;
300+ var opts = {
301+ fetchOpts : {
302+ callbacks : {
303+ certificateCheck : ( ) => 0 ,
304+ credentials : function ( url , userName ) {
305+ return NodeGit . Credential . sshKeyFromAgent ( userName ) ;
306+ }
307+ }
308+ }
309+ } ;
310+
311+ try {
312+ await exec ( "taskkill /im pageant.exe /f /t" ) ;
313+ } catch ( e ) {
314+ try {
315+ await exec ( "taskkill /im pageant_sha1.exe /f /t" ) ;
316+ } catch ( e ) { }
317+ }
318+ try {
319+ await exec ( `powershell -command "Start-Process ${ old_pageant } ${ privateKey } ` ) ;
320+ } catch ( e ) {
321+ try {
322+ await exec ( `powershell -command "Start-Process ${ pageant } ${ privateKey } ` ) ;
323+ } catch ( e ) { }
324+ return assert . fail ( "Cannot run old pageant" ) ;
325+ }
326+
327+ try {
328+ const repo = await Clone ( url , clonePath , opts ) ;
329+ test . repository = repo ;
330+ } catch ( e ) {
331+ return assert . fail ( "Clone error: " + e . message ) ;
332+ }
333+
334+ try {
335+ await exec ( "taskkill /im pageant_sha1.exe /f /t" ) ;
336+ } catch ( e ) { }
337+
338+ try {
339+ await exec ( `powershell -command "Start-Process ${ pageant } ${ privateKey } ` ) ;
340+ } catch ( e ) {
341+ return assert . fail ( "Cannot run pageant" ) ;
342+ }
343+
344+ return assert . ok ( test . repository instanceof Repository ) ;
345+ } ) ;
346+ }
347+
289348 it ( "can clone with ssh" , function ( ) {
290349 var test = this ;
291350 var url = "git@github.com:nodegit/test.git" ;
0 commit comments