Skip to content

Commit

Permalink
makes tcheckcommand pass with SAT on (#1208)
Browse files Browse the repository at this point in the history
  • Loading branch information
jmgomez authored Apr 9, 2024
1 parent 5958f92 commit 31ebf2e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
9 changes: 5 additions & 4 deletions src/nimble.nim
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ proc checkSatisfied(options: Options, dependencies: seq[PackageInfo]) =
proc processFreeDependenciesSAT(rootPkgInfo: PackageInfo, pkgList: seq[PackageInfo], options: Options): HashSet[PackageInfo] =
result = solveLocalPackages(rootPkgInfo, pkgList)
if result.len > 0: return result

var reverseDependencies: seq[PackageBasicInfo] = @[]
var pkgsToInstall: seq[(string, Version)] = @[]
var output = ""
result = solvePackages(rootPkgInfo, pkgList, pkgsToInstall, options, output)
var solved = false #A pgk can be solved and still dont return a set of PackageInfo
(solved, result) = solvePackages(rootPkgInfo, pkgList, pkgsToInstall, options, output)
if pkgsToInstall.len > 0:
for pkg in pkgsToInstall:
let dep = (name: pkg[0], ver: pkg[1].toVersionRange)
Expand Down Expand Up @@ -91,8 +91,9 @@ proc processFreeDependenciesSAT(rootPkgInfo: PackageInfo, pkgList: seq[PackageIn
addRevDep(options.nimbleData, i, rootPkgInfo)
return result
else:
display("Error", output, Error, priority = HighPriority)
raise nimbleError("Unsatisfiable dependencies")
if not solved:
display("Error", output, Error, priority = HighPriority)
raise nimbleError("Unsatisfiable dependencies")


proc processFreeDependencies(pkgInfo: PackageInfo,
Expand Down
5 changes: 3 additions & 2 deletions src/nimblepkg/nimblesat.nim
Original file line number Diff line number Diff line change
Expand Up @@ -347,18 +347,19 @@ proc solveLocalPackages*(rootPkgInfo: PackageInfo, pkgList: seq[PackageInfo]): H
if pkgInfo.basicInfo.name == pkg and pkgInfo.basicInfo.version == ver:
result.incl pkgInfo

proc solvePackages*(rootPkg: PackageInfo, pkgList: seq[PackageInfo], pkgsToInstall: var seq[(string, Version)], options: Options, output: var string): HashSet[PackageInfo] =
proc solvePackages*(rootPkg: PackageInfo, pkgList: seq[PackageInfo], pkgsToInstall: var seq[(string, Version)], options: Options, output: var string): (bool, HashSet[PackageInfo]) =
var root = rootPkg.getMinimalInfo()
root.isRoot = true
var pkgVersionTable = initTable[string, PackageVersions]()
pkgVersionTable[root.name] = PackageVersions(pkgName: root.name, versions: @[root])
collectAllVersions(pkgVersionTable, root, options, downloadMinimalPackage)
var solvedPkgs = pkgVersionTable.getSolvedPackages(output)
result[0] = solvedPkgs.len > 0
var pkgsToInstall: seq[(string, Version)] = @[]
for solvedPkg, ver in solvedPkgs:
if solvedPkg == root.name: continue
for pkgInfo in pkgList:
if pkgInfo.basicInfo.name == solvedPkg: # and pkgInfo.basicInfo.version.withinRange(ver):
result.incl pkgInfo
result[1].incl pkgInfo
else:
pkgsToInstall.addUnique((solvedPkg, ver))

0 comments on commit 31ebf2e

Please sign in to comment.