1
1
using System ;
2
2
using System . IO ;
3
+ using System . Linq ;
3
4
using Common . Logging ;
4
5
using Microsoft . Extensions . Logging ;
5
6
@@ -37,9 +38,13 @@ private static void UpdateFilePackage(Package package)
37
38
private static void UpdateGitPackage ( Package package )
38
39
{
39
40
var runner = new ShellRunner ( Log ) ;
40
-
41
41
var timeout = TimeSpan . FromMinutes ( 1 ) ;
42
42
43
+ var remoteHash = GetRepositoryHeadHash ( package ) ;
44
+ var localHash = Helper . GetPackageCommitHash ( package . Name ) ;
45
+ if ( remoteHash != null && remoteHash . Equals ( localHash ) )
46
+ return ;
47
+
43
48
for ( int i = 0 ; i < 3 ; i ++ )
44
49
{
45
50
using ( var tempDir = new TempDirectory ( ) )
@@ -66,10 +71,23 @@ private static void UpdateGitPackage(Package package)
66
71
Directory . CreateDirectory ( Helper . GetGlobalCementDirectory ( ) ) ;
67
72
File . Copy ( Path . Combine ( tempDir . Path , package . Name , "modules" ) ,
68
73
Helper . GetPackagePath ( package . Name ) , true ) ;
74
+ Helper . WritePackageCommitHash ( package . Name , remoteHash ) ;
69
75
}
70
76
break ;
71
77
}
72
78
}
73
79
}
80
+
81
+ private static string GetRepositoryHeadHash ( Package package )
82
+ {
83
+ var runner = new ShellRunner ( Log ) ;
84
+ var timeout = TimeSpan . FromMinutes ( 1 ) ;
85
+
86
+ runner . RunOnce ( $ "git ls-remote { package . Url } HEAD", Directory . GetCurrentDirectory ( ) , timeout ) ;
87
+
88
+ var output = runner . Output ;
89
+
90
+ return output . Split ( ) . FirstOrDefault ( ) ;
91
+ }
74
92
}
75
93
}
0 commit comments