@@ -85,6 +85,28 @@ object DependencyManager {
8585 return false
8686 }
8787
88+ fun hasOutdatedDependencies (projectRoot : Path , projectConfig : WurstProjectConfigData ): Boolean {
89+ Log .print (" Checking dependencies...\n " )
90+ for (dependency in projectConfig.dependencies) {
91+ val (depUri, dependencyName, requestedBranch) = resolveName(dependency)
92+ val branch = resolveBranch(depUri, requestedBranch)
93+ Log .print (" Checking dependency - $dependencyName .." )
94+ val depFolder = projectRoot.resolve(" _build/dependencies/$dependencyName " )
95+
96+ if (! Files .exists(depFolder.resolve(" .git" ))) {
97+ Log .print (" missing\n " )
98+ return true
99+ }
100+
101+ if (isDependencyOutdated(depFolder, depUri, branch)) {
102+ Log .print (" outdated\n " )
103+ return true
104+ }
105+ Log .print (" ok\n " )
106+ }
107+ return false
108+ }
109+
88110 fun cloneRepo (dependency : String , depFolder : Path ) {
89111 val (depURI, _, requestedBranch) = resolveName(dependency)
90112 val branch = resolveBranch(depURI, requestedBranch)
@@ -264,4 +286,25 @@ object DependencyManager {
264286 }
265287 return false
266288 }
289+
290+ private fun isDependencyOutdated (depFolder : Path , depUri : String , branch : String ): Boolean {
291+ return try {
292+ FileRepository (depFolder.resolve(" .git" ).toFile()).use { repository ->
293+ repository.config.setString(" remote" , " origin" , " url" , depUri)
294+ repository.config.save()
295+ Git (repository).use { git ->
296+ git.fetch()
297+ .setRemote(" origin" )
298+ .setRemoveDeletedRefs(true )
299+ .call()
300+ }
301+ val localHead = repository.resolve(Constants .HEAD )
302+ val remoteHead = repository.resolve(" refs/remotes/origin/$branch " )
303+ localHead == null || remoteHead == null || localHead != remoteHead
304+ }
305+ } catch (e: Exception ) {
306+ log.warn(" Could not verify dependency at <$depFolder >." , e)
307+ true
308+ }
309+ }
267310}
0 commit comments