Skip to content

Commit ccd29a3

Browse files
authored
Fixes an issue where processRequirements was overriding special versions (#1417)
* Fixes an issue where `processRequirements` was overriding special versions * removes unused * Fix test
1 parent 80b1d15 commit ccd29a3

File tree

3 files changed

+38
-6
lines changed

3 files changed

+38
-6
lines changed

src/nimblepkg/nimblesat.nim

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,13 @@ proc getMinimalFromPreferred(pv: PkgTuple, getMinimalPackage: GetPackageMinimal
662662
return @[pp]
663663
getMinimalPackage(pv, options)
664664

665+
proc hasSpecialVersion(versions: Table[string, PackageVersions], pkgName: string): bool =
666+
if pkgName in versions:
667+
for pkg in versions[pkgName].versions:
668+
if pkg.version.isSpecial:
669+
return true
670+
return false
671+
665672
proc processRequirements(versions: var Table[string, PackageVersions], pv: PkgTuple, visited: var HashSet[PkgTuple], getMinimalPackage: GetPackageMinimal, preferredPackages: seq[PackageMinimalInfo] = newSeq[PackageMinimalInfo](), options: Options) =
666673
if pv in visited:
667674
return
@@ -683,6 +690,10 @@ proc processRequirements(versions: var Table[string, PackageVersions], pv: PkgTu
683690
else:
684691
versions[pv.name] = PackageVersions(pkgName: pv.name, versions: @[pkgMin])
685692
else:
693+
# Don't add regular versions if a special version already exists
694+
if hasSpecialVersion(versions, pv.name):
695+
continue
696+
686697
if not versions.hasKey(pv.name):
687698
versions[pv.name] = PackageVersions(pkgName: pv.name, versions: @[pkgMin])
688699
else:

tests/gitversions/gitversions.nimble

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ bin = @["gitversions"]
1111
# Dependencies
1212

1313
requires "nim"
14+
requires "json_rpc"

tests/trequireflag.nim

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,40 @@ suite "requires flag":
5858
let isVersion = req.contains("==")
5959
# echo "Trying require: ", req
6060
let no_test = if isVersion: "-d:no_test" else: ""
61-
let (output, exitCode) = execNimble("run", require, no_test)
62-
let pkgDir = getPackageDir(pkgsDir, "json_serialization-0.2.9")
61+
let (_, exitCode) = execNimble("run", require, no_test)
62+
6363
check exitCode == QuitSuccess
6464

6565
let (_, exitCodeTest) = execNimble("test", require, no_test)
6666
check exitCodeTest == QuitSuccess
6767

68-
let nimbleTestDontDeleteFile = pkgDir / "json_serialization" / "nimbletest.nim"
68+
var pkgDir = ""
69+
if isVersion:
70+
pkgDir = getPackageDir(pkgsDir, "json_serialization")
71+
else:
72+
# Special version - find the directory with nimbletest.nim
73+
for kind, dir in walkDir(pkgsDir):
74+
if kind == pcDir and dir.splitPath.tail.startsWith("json_serialization"):
75+
let testFile = dir / "json_serialization" / "nimbletest.nim"
76+
if fileExists(testFile):
77+
pkgDir = dir
78+
break
79+
# If no directory with nimbletest.nim found, fall back to standard function
80+
if pkgDir == "":
81+
pkgDir = getPackageDir(pkgsDir, "json_serialization")
82+
83+
check pkgDir != ""
84+
85+
let nimbleTestDontDeleteFile = pkgDir / "json_serialization" / "nimbletest.nim"
6986
# echo "Nimble test dont delete file: ", nimbleTestDontDeleteFile
7087
if isVersion:
71-
check output.processOutput.inLines("Success: json_serialization installed successfully.")
88+
# Regular version should NOT have the nimbletest.nim file
7289
check not fileExists(nimbleTestDontDeleteFile)
7390
else:
74-
check output.processOutput.inLines("Success: json_serialization installed successfully.")
91+
# Special version should have the nimbletest.nim file
7592
check fileExists(nimbleTestDontDeleteFile)
76-
cleanDir(pkgDir) #Resets the package dir for each require
93+
# Clean up all json_serialization directories
94+
for kind, dir in walkDir(pkgsDir):
95+
if kind == pcDir and dir.splitPath.tail.startsWith("json_serialization"):
96+
removeDir(dir)
7797

0 commit comments

Comments
 (0)