Skip to content

Commit b12b18a

Browse files
jmgomezAraq
andauthored
When in local tagged cache is local as well (#1305)
* when in local tagged cache is local as well * fix * fix * disableNimBinaries in test * removes 1.6.20 which fails in the CI for an unrelated reason * Update src/nimblepkg/nimblesat.nim --------- Co-authored-by: Andreas Rumpf <[email protected]>
1 parent f1ae000 commit b12b18a

File tree

3 files changed

+57
-13
lines changed

3 files changed

+57
-13
lines changed

src/nimblepkg/nimblesat.nim

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

520529
proc 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

555575
proc downloadMinimalPackage*(pv: PkgTuple, options: Options): seq[PackageMinimalInfo] =
556576
if pv.name == "": return newSeq[PackageMinimalInfo]()

tests/tniminstall.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ proc isNimPkgVer(folder: string, ver: string): bool =
2020
suite "Nim install":
2121
test "Should be able to install different Nim versions":
2222
cd "nimnimble":
23-
for nimVerDir in ["nim1.6.20", "nim2.0.4"]:
23+
for nimVerDir in ["nim2.0.4"]:
2424
cd nimVerDir:
2525
let nimVer = nimVerDir.replace("nim", "")
2626
echo "Checking version ", nimVer

tests/tsat.nim

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,30 @@ suite "SAT solver":
335335
check version in packageVersions.mapIt(it.version)
336336
check fileExists(repoDir / TaggedVersionsFileName)
337337

338+
test "should not use the global tagged cache when in local but a local one":
339+
var options = initOptions()
340+
options.localDeps = true
341+
options.maxTaggedVersions = 0 #all
342+
options.nimBin = some options.makeNimBin("nim")
343+
options.config.packageLists["official"] = PackageList(name: "Official", urls: @[
344+
"https://raw.githubusercontent.com/nim-lang/packages/master/packages.json",
345+
"https://nim-lang.org/nimble/packages.json"
346+
])
347+
options.setNimbleDir()
348+
echo "NIMBLE DIR", options.getNimbleDir()
349+
for dir in walkDir(".", true):
350+
if dir.kind == PathComponent.pcDir and dir.path.startsWith("githubcom_vegansknimfp"):
351+
echo "Removing dir", dir.path
352+
removeDir(dir.path)
353+
354+
let pvPrev = parseRequires("nimfp >= 0.3.4")
355+
let downloadResPrev = pvPrev.downloadPkgFromUrl(options)[0]
356+
let repoDirPrev = downloadResPrev.dir
357+
discard getPackageMinimalVersionsFromRepo(repoDirPrev, pvPrev[0], downloadResPrev.version, DownloadMethod.git, options)
358+
check not fileExists(repoDirPrev / TaggedVersionsFileName)
359+
360+
check fileExists("nimbledeps" / "pkgcache" / "tagged" / "nimfp.json")
361+
338362
test "if a dependency is unsatisfable, it should fallback to the previous version of the depency when available":
339363
let pkgVersionTable = {
340364
"a": PackageVersions(pkgName: "a", versions: @[

0 commit comments

Comments
 (0)