@@ -496,8 +496,12 @@ proc getAllNimReleases(options: Options): seq[PackageMinimalInfo] =
496496 if options.nimBin.isSome:
497497 result .addUnique PackageMinimalInfo (name: " nim" , version: options.nimBin.get.version)
498498
499- proc getTaggedVersions * (repoDir: string , options: Options ): Option [TaggedPackageVersions ] =
500- let file = repoDir / TaggedVersionsFileName
499+ proc getTaggedVersions * (repoDir, pkgName: string , options: Options ): Option [TaggedPackageVersions ] =
500+ var file: string
501+ if options.localDeps:
502+ file = options.getNimbleDir / " pkgcache" / " tagged" / pkgName & " .json"
503+ else :
504+ file = repoDir / TaggedVersionsFileName
501505 if file.fileExists:
502506 try :
503507 let taggedVersions = file.readFile.parseJson ().to (TaggedPackageVersions )
@@ -510,26 +514,45 @@ proc getTaggedVersions*(repoDir: string, options: Options): Option[TaggedPackage
510514 else :
511515 none (TaggedPackageVersions )
512516
513- proc saveTaggedVersions * (repoDir: string , taggedVersions: TaggedPackageVersions ) =
517+ proc saveTaggedVersions * (repoDir, pkgName: string , taggedVersions: TaggedPackageVersions , options: Options ) =
518+ var file: string
519+ if options.localDeps:
520+ file = options.getNimbleDir / " pkgcache" / " tagged" / pkgName & " .json"
521+ else :
522+ file = repoDir / TaggedVersionsFileName
514523 try :
515- let file = repoDir / TaggedVersionsFileName
524+ createDir ( file.parentDir)
516525 file.writeFile ((taggedVersions.toJson ()).pretty)
517526 except CatchableError as e:
518527 displayWarning (& " Error saving tagged versions: { e.msg} " , HighPriority )
519528
520529proc getPackageMinimalVersionsFromRepo * (repoDir: string , name: string , version: Version , downloadMethod: DownloadMethod , options: Options ): seq [PackageMinimalInfo ] =
521530 # This is expensive. We need to cache it. Potentially it could be also run in parallel
522531 # echo &"Discovering version for {pkgName}"
523- let taggedVersions = getTaggedVersions (repoDir, options)
532+ gitFetchTags (repoDir, downloadMethod)
533+ let tags = getTagsList (repoDir, downloadMethod).getVersionList ()
534+ template checkoutCurrentVersion () =
535+ if version.isSpecial:
536+ var specialVersion = substr ($ version, 1 )
537+ if specialVersion == " head" :
538+ specialVersion = " HEAD"
539+ doCheckout (downloadMethod, repoDir, specialVersion)
540+ else :
541+ for (ver, tag) in tags.pairs:
542+ if ver == version:
543+ doCheckout (downloadMethod, repoDir, tag)
544+
545+ result = newSeq [PackageMinimalInfo ]()
546+ checkoutCurrentVersion ()
547+ let taggedVersions = getTaggedVersions (repoDir, name, options)
524548 if taggedVersions.isSome:
525549 return taggedVersions.get.versions
526- gitFetchTags (repoDir, downloadMethod)
550+
527551 # First package must be the current one
528552 try :
529553 result .add getPkgInfo (repoDir, options).getMinimalInfo (options)
530554 except CatchableError as e:
531555 displayWarning (& " Error getting package info for { name} : { e.msg} " , HighPriority )
532- let tags = getTagsList (repoDir, downloadMethod).getVersionList ()
533556 var checkedTags = 0
534557 for (ver, tag) in tags.pairs:
535558 if options.maxTaggedVersions > 0 and checkedTags >= options.maxTaggedVersions:
@@ -545,12 +568,9 @@ proc getPackageMinimalVersionsFromRepo*(repoDir: string, name: string, version:
545568 except CatchableError as e:
546569 displayWarning (& " Error reading tag { tag} : for package { name} . This may not be relevant as it could be an old version of the package. \n { e.msg} " , HighPriority )
547570
548- # make sure we let this folder as it was
549- for (ver, tag) in tags.pairs:
550- if ver == version:
551- doCheckout (downloadMethod, repoDir, tag)
571+ checkoutCurrentVersion ()
552572
553- saveTaggedVersions (repoDir, TaggedPackageVersions (maxTaggedVersions: options.maxTaggedVersions, versions: result ))
573+ saveTaggedVersions (repoDir, name, TaggedPackageVersions (maxTaggedVersions: options.maxTaggedVersions, versions: result ), options )
554574
555575proc downloadMinimalPackage * (pv: PkgTuple , options: Options ): seq [PackageMinimalInfo ] =
556576 if pv.name == " " : return newSeq [PackageMinimalInfo ]()
0 commit comments