@@ -6,17 +6,9 @@ import std/[tables, sequtils, algorithm, json, jsonutils, strutils]
6
6
import nimblepkg/ [version, sha1hashes, packageinfotypes, nimblesat, options,
7
7
download, packageinfo, packageparser, config]
8
8
import nimble
9
+ import times
9
10
10
11
11
- proc downloadPkInfoForPv(pv: PkgTuple, options: Options): PackageInfo =
12
- let (meth, url, metadata) =
13
- getDownloadInfo(pv, options, doPrompt = true )
14
- let subdir = metadata.getOrDefault(" subdir" )
15
- let res =
16
- downloadPkg(url, pv.ver, meth, subdir, options,
17
- downloadPath = " " , vcsRevision = notSetSha1Hash)
18
- return getPkgInfo(res.dir, options)
19
-
20
12
proc initFromJson* (dst: var PkgTuple, jsonNode: JsonNode, jsonPath: var string ) =
21
13
dst = parseRequires(jsonNode.str)
22
14
@@ -29,21 +21,6 @@ proc toJsonHook*(src: PkgTuple): JsonNode =
29
21
else :
30
22
newJString(src.name & " " & ver)
31
23
32
- proc collectAllVersions(versions: var Table[string , PackageVersions], package: PackageInfo, options: Options) =
33
- for pv in package.requires:
34
- # echo "Collecting versions for ", pv.name, " and Version: ", $pv.ver, " via ", package.name
35
- var pv = pv
36
- if not hasVersion(versions, pv): # Not found, meaning this package-version needs to be explored
37
- let pkgInfo = downloadPkInfoForPv(pv, options)
38
- var minimalInfo = pkgInfo.getMinimalInfo()
39
- if pv.ver.kind == verSpecial:
40
- echo " Special version " , pv, " but it was " , minimalInfo.version
41
- minimalInfo.version = newVersion $ pv.ver
42
- if not versions.hasKey(pv.name):
43
- versions[pv.name] = PackageVersions(pkgName: pv.name, versions: @ [minimalInfo])
44
- else :
45
- versions[pv.name].versions.addUnique minimalInfo
46
- collectAllVersions(versions, pkgInfo, options)
47
24
48
25
49
26
# Test utils:
@@ -62,7 +39,7 @@ proc downloadAndStorePackageVersionTableFor(pkgName: string, options: Options) =
62
39
var root = pkgInfo.getMinimalInfo()
63
40
root.isRoot = true
64
41
var pkgVersionTable = initTable[string , PackageVersions]()
65
- collectAllVersions(pkgVersionTable, pkgInfo , options)
42
+ collectAllVersions(pkgVersionTable, root , options, downloadMinimalPackage )
66
43
pkgVersionTable[pkgName] = PackageVersions(pkgName: pkgName, versions: @[root])
67
44
let json = pkgVersionTable.toJson()
68
45
writeFile(path, json.pretty())
@@ -166,22 +143,12 @@ suite "SAT solver":
166
143
echo packages
167
144
check packages.len == 0
168
145
169
- # test "issue #1162":
170
- # cd "conflictingdepres":
171
- # #integration version of the test above
172
- # #TODO document folder structure setup so others know how to run similar tests
173
- # let (_, exitCode) = execNimble("install", "-l")
174
- # check exitCode == QuitSuccess
175
-
176
- #[
177
- Next download all packages store it in a json and solve the dependencies one by one.
178
-
179
- TODO
180
- - Create the table from already downloaded packages.
181
- - See if downloads can be cached and reused.
182
- - Review if when downloading a package we could just navigate it to get all versions without triggering another download
183
-
184
- ]#
146
+ test "issue #1162":
147
+ cd "conflictingdepres":
148
+ #integration version of the test above
149
+ #TODO document folder structure setup so others know how to run similar tests
150
+ let (_, exitCode) = execNimble("install", "-l")
151
+ check exitCode == QuitSuccess
185
152
186
153
# test "should be able to download a package and select its deps":
187
154
@@ -198,7 +165,7 @@ suite "SAT solver":
198
165
# var root = pkgInfo.getMinimalInfo()
199
166
# root.isRoot = true
200
167
# var pkgVersionTable = initTable[string, PackageVersions]()
201
- # collectAllVersions(pkgVersionTable, pkgInfo , options)
168
+ # collectAllVersions(pkgVersionTable, root , options, downloadMinimalPackage )
202
169
# pkgVersionTable[pkgName] = PackageVersions(pkgName: pkgName, versions: @[root])
203
170
204
171
# var graph = pkgVersionTable.toDepGraph()
@@ -209,14 +176,19 @@ suite "SAT solver":
209
176
210
177
211
178
test " should be solve all nimble packages" :
212
- downloadAllPackages() # uncomment this to download all packages. It's better to just keep them cached as it takes a while.
213
-
179
+ # downloadAllPackages() #uncomment this to download all packages. It's better to just keep them cached as it takes a while.
180
+ let now = now()
181
+ var pks = 0
214
182
for jsonFile in walkPattern(" packageMinimal/*.json" ):
183
+ inc pks
215
184
var pkgVersionTable = parseJson(readFile(jsonFile)).to(Table[string , PackageVersions])
216
185
var graph = pkgVersionTable.toDepGraph()
217
186
let form = toFormular(graph)
218
187
var packages = initTable[string , Version]()
219
188
solve(graph, form, packages, listVersions= false)
220
- echo "Solved ", jsonFile.extractFilename, " with ", packages.len, " packages"
189
+ # echo "Solved ", jsonFile.extractFilename, " with ", packages.len, " packages"
221
190
222
- check packages.len > 0
191
+ check packages.len > 0
192
+
193
+ let ends = now()
194
+ echo "Solved ", pks, " packages in ", ends - now, " seconds"
0 commit comments