Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modern techniques for dependency resolution #890

Open
mratsim opened this issue Feb 4, 2021 · 7 comments
Open

Modern techniques for dependency resolution #890

mratsim opened this issue Feb 4, 2021 · 7 comments
Labels

Comments

@mratsim
Copy link

mratsim commented Feb 4, 2021

Just a recap of a short discussion with @haxscramper and @FedericoCeratto on modern dependency resolution.

Nimble found a certain combination of dependencies impossible to resolve even though there is actually a solution.

Modern package managers that handles tens of thousands of packages and/or multiversioning are gradually delegating dependency resolution to SAT solvers as this is a problem that can be modelled as a Satisfiability problem.

Writeups:

TLDR;

Note: I think there are other approaches possible from writing that ourselves or using alternative theories like Integer Linear Programming (ILP) but it's more pragmatic to reuse existing blocks that were optimized and stabilized over years of usage here and regarding ILP, I tried to wrap the one for LLVM (http://isl.gforge.inria.fr/) or write one myself (https://github.com/mratsim/hydra) but those are really complex.

@FedericoCeratto
Copy link
Member

FedericoCeratto commented Feb 4, 2021

Datapoints regarding distributing Z3: it is packaged in most distributions, it appears to be stable, without concerning dependencies, and runs on most architectures.

Then a valid solution is impossible, the dependency solver in apt/aptitude can suggest multiple alternative solutions that break/ignore one or more constraint each, starting with the less "aggressive" first. Z3 might help doing the same easily.

Also, https://ci.debian.net/doc/ runs automated tests against multiple solutions and across multiple packages to spot incorrect dependency constraints. Z3 could help doing local compilation tests against combinations of dependencies to spot similar issues.

@dom96 dom96 added the Other label Feb 4, 2021
@haxscramper
Copy link

haxscramper commented Feb 6, 2021

Current implementation of dependency resolution does not construct explicit dependency graph, and instead just loops

for dep in pkginfo.requires:
though requirements, almost immediately installing them

nimble/src/nimble.nim

Lines 84 to 86 in 95e6870

display("Installing", $resolvedDep, priority = HighPriority)
let toInstall = @[(resolvedDep.name, resolvedDep.ver)]
let (pkgs, installedPkg) = install(toInstall, options)
which I believe to be the source of such bugs as #505 and #887 (could be prevented with explicit dependency graph construction).

Maybe we could adopt an approach similar to https://hal.archives-ouvertes.fr/hal-00149566/document for mapping dependency requirements to something that is fed into z3

Related links:

@stefantalpalaru
Copy link

Both are looking into SAT solver

For good reasons: https://research.swtch.com/version-sat

@dom96
Copy link
Collaborator

dom96 commented Feb 9, 2021

For good reasons: https://research.swtch.com/version-sat

This is a classic, if you haven't already then check out the "Alternatives?" section. Some of the suggestions may sound familiar.

image

Specifying a concrete version in a Nimble file has always been a bad idea and largely discouraged. I think that once lock files are merged into Nimble that we should look into disallowing concrete versions in "requires" completely (without lock files this is the only way you can hope to get reproducible builds).

Nim should also grow the ability to compile a package with a dependency on two different versions of the same package. I think I may have finally convinced Araq that this is necessary :)

@haxscramper
Copy link

haxscramper commented Feb 10, 2021

Approximate current stats for nimble package requirement specifications:

total package count:      1565
processing ok:            1382
not using github:         51
http error when getting:  87
configuration parse fail: 19

verLater        (   > V    ): 28
verEarlier      (   < V    ): 4
verEqLater      (   >= V   ): 1759
verEqEarlier    (   <= V   ): 2
verIntersect    (> V & < V ): 37
verEq           (    V     ): 24
verAny          (    *     ): 319
verSpecial      (  #head   ): 34

@haxscramper
Copy link

haxscramper commented Feb 11, 2021

I think it should be explicitly noted that while the addition of SAT solver might be considered debatable, the dependency resolution step of nimble should be refactored into explicit dependency graph construction with subsequent full download of packages to be installed. Current solution of resolving-packages-while-installing-packages-wile-resolving packages leads to overly verbose output where each dependency can be repeated, makes resolution dependent on order of requires statements, and makes it hardly possible to do things like nimble build and nimble test without installing anything.

Package can appear multiple times in the output if it is required by more than one package, but each additional encounter will have useless 'requirement already satisfied' message, cluttering output and making it much harder to determine what went wrong.

It is possible to get all necessary dependency information by parsing .nimble file, but without evaluating it, and while this might seem like an overly fragile approach it worked successfully for approximately 96% of the [processed] packages. It is not possible to account for all possible ways of writing package specification of course, but things like

  version       = pkgVersion # fae

  # paravim
  installExt    = @[
    "nim", "txt", "ttf", "glsl", "c", "h",
    when defined(windows):
      "dll"
    elif defined(macosx):
      "dylib"
    elif defined(linux):
      "so"
  ]

  # metar
  include metar/version

  version = metarVersion

  # plz
  version     = CompileDate.replace("-", ".")

Are extremely rare, and for these cases fully downloading packages before resolving it is the only solution (as well as non-github hostings (account for 3% of all packages).

@haxscramper
Copy link

haxscramper commented Mar 21, 2021

Related nim forum discussion https://forum.nim-lang.org/t/7671

additional edit (not separate comment to avoid pings)

Current solution of resolving-packages-while-installing-packages-wile-resolving packages leads to overly verbose output

Encountered this absolute masterpiece of readable user output (only lines with Dependency are show, sorted to illustrate the point. Actual output is x2 longer due to Verifying dependencies for hmisc@0.11.5)

      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on benchy@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on cligen@any version already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on compiler@>= 1.4.0 already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on fusion@any version already satisfied
      Info: Dependency on hcparse@any version already satisfied
      Info: Dependency on hdrawing@>= 0.1.3 already satisfied
      Info: Dependency on hdrawing@>= 0.1.3 already satisfied
      Info: Dependency on hdrawing@>= 0.1.3 already satisfied
      Info: Dependency on hdrawing@>= 0.1.3 already satisfied
      Info: Dependency on hdrawing@>= 0.1.3 already satisfied
      Info: Dependency on hdrawing@>= 0.1.3 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.1 already satisfied
      Info: Dependency on hmisc@>= 0.10.4 already satisfied
      Info: Dependency on hmisc@>= 0.10.7 already satisfied
      Info: Dependency on hmisc@>= 0.11.3 already satisfied
      Info: Dependency on hmisc@>= 0.11.3 already satisfied
      Info: Dependency on hmisc@>= 0.4.0 already satisfied
      Info: Dependency on hmisc@>= 0.9.15 already satisfied
      Info: Dependency on hmisc@>= 0.9.15 already satisfied
      Info: Dependency on hmisc@>= 0.9.15 already satisfied
      Info: Dependency on hmisc@>= 0.9.15 already satisfied
      Info: Dependency on hmisc@>= 0.9.15 already satisfied
      Info: Dependency on hmisc@>= 0.9.15 already satisfied
      Info: Dependency on hmisc@>= 0.9.15 already satisfied
      Info: Dependency on hmisc@>= 0.9.16 already satisfied
      Info: Dependency on hmisc@>= 0.9.1 already satisfied
      Info: Dependency on hmisc@>= 0.9.1 already satisfied
      Info: Dependency on hnimast@>= 0.3.18 already satisfied
      Info: Dependency on hnimast@>= 0.3.18 already satisfied
      Info: Dependency on hnimast@>= 0.3.18 already satisfied
      Info: Dependency on hnimast@>= 0.3.18 already satisfied
      Info: Dependency on hnimast@>= 0.3.18 already satisfied
      Info: Dependency on hnimast@>= 0.3.18 already satisfied
      Info: Dependency on hnimast@>= 0.3.19 already satisfied
      Info: Dependency on hnimast@>= 0.3.20 already satisfied
      Info: Dependency on hnimast@any version already satisfied
      Info: Dependency on hnimast@#head already satisfied
      Info: Dependency on hpprint@>= 0.2.11 already satisfied
      Info: Dependency on hpprint@>= 0.2.11 already satisfied
      Info: Dependency on hpprint@>= 0.2.12 already satisfied
      Info: Dependency on hpprint@any version already satisfied
      Info: Dependency on hpprint@any version already satisfied
      Info: Dependency on hpprint@any version already satisfied
      Info: Dependency on https://github.com/disruptek/balls@>= 2.0.0 & < 3.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/balls@>= 2.0.0 & < 3.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/criterion@< 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/criterion@< 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/gram@>= 0.3.2 already satisfied
      Info: Dependency on https://github.com/disruptek/grok@>= 0.5.0 & < 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/grok@>= 0.5.0 & < 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/grok@< 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/grok@< 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/skiplists@>= 0.5.1 & < 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/ups@< 1.0.0 already satisfied
      Info: Dependency on https://github.com/disruptek/ups@< 1.0.0 already satisfied
      Info: Dependency on https://github.com/haxscramper/cxxstd.git@any version already satisfied
      Info: Dependency on https://github.com/haxscramper/cxxstd.git@any version already satisfied
      Info: Dependency on https://github.com/haxscramper/fusion.git@#matching-fixup already satisfied
      Info: Dependency on https://github.com/haxscramper/fusion.git@#matching-fixup already satisfied
      Info: Dependency on https://github.com/haxscramper/hasts@< 1.0.0 already satisfied
      Info: Dependency on https://github.com/haxscramper/nimtrail.git@>= 0.1.1 already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on macroutils@any version already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimble@<= 0.13.0 already satisfied
      Info: Dependency on nimspell@any version already satisfied
      Info: Dependency on nimspell@any version already satisfied
      Info: Dependency on nimtraits@any version already satisfied
      Info: Dependency on npeg@>= 0.23.2 & < 1.0.0 already satisfied
      Info: Dependency on npeg@>= 0.23.2 & < 1.0.0 already satisfied

Not to mention this nimble test command errored out and provided me with a following error message (as seen in terminal). Each --path is duplicated as many times as particular package was encountered.

/home/test/.nimble/bin/nim cpp --noNimblePath -d:NimblePkgVersion=0.1.2 --path:/
mnt/workspace/github/hnimast/src --path:/mnt/workspace/github/hmisc/src --path:/
home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusi
on/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/home/test/.nimble/pkg
s/macroutils-1.0.0 --path:/home/test/.nimble/pkgs/compiler-1.4.6 --path:/home/te
st/.nimble/pkgs/nimble-0.13.0 --path:/mnt/workspace/github/hmisc/src --path:/hom
e/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/
src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/github/hpp
rint/src --path:/mnt/workspace/github/hdrawing/src --path:/mnt/workspace/github/
hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspac
e/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/mnt
/workspace/github/hnimast/src --path:/mnt/workspace/github/hmisc/src --path:/hom
e/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/
src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/home/test/.nimble/pkgs/m
acroutils-1.0.0 --path:/home/test/.nimble/pkgs/compiler-1.4.6 --path:/home/test/
.nimble/pkgs/nimble-0.13.0 --path:/mnt/workspace/github/hmisc/src --path:/home/t
est/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src
 --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/github/nimspe
ll/src --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cli
gen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:/home/test/.
nimble/pkgs/benchy-0.0.1 --path:'/home/test/.nimble/pkgs/fusion-#matching-fixup'
 --path:/home/test/.nimble/pkgs/haxorg-0.1.2 --path:'/home/test/.nimble/pkgs/nim
trail-#head' --path:/mnt/workspace/github/hcparse/src --path:/mnt/workspace/gith
ub/hnimast/src --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/
pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:/hom
e/test/.nimble/pkgs/benchy-0.0.1 --path:/home/test/.nimble/pkgs/macroutils-1.0.0
 --path:/home/test/.nimble/pkgs/compiler-1.4.6 --path:/home/test/.nimble/pkgs/ni
mble-0.13.0 --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkg
s/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:/home/t
est/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/github/hpprint/src --path:/m
nt/workspace/github/hdrawing/src --path:/mnt/workspace/github/hmisc/src --path:/
home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusi
on/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/github/
hnimast/src --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkg
s/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:/home/t
est/.nimble/pkgs/benchy-0.0.1 --path:/home/test/.nimble/pkgs/macroutils-1.0.0 --
path:/home/test/.nimble/pkgs/compiler-1.4.6 --path:/home/test/.nimble/pkgs/nimbl
e-0.13.0 --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/c
ligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:/home/test
/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/github/nimtraits/src --path:/mn
t/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:
/home/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/bench
y-0.0.1 --path:/mnt/workspace/github/hpprint/src --path:/mnt/workspace/github/hd
rawing/src --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs
/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:/home/te
st/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/github/hnimast/src --path:/mn
t/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:
/home/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/bench
y-0.0.1 --path:/home/test/.nimble/pkgs/macroutils-1.0.0 --path:/home/test/.nimbl
e/pkgs/compiler-1.4.6 --path:/home/test/.nimble/pkgs/nimble-0.13.0 --path:/mnt/w
orkspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/ho
me/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0
.0.1 --path:/mnt/workspace/github/hnimast/src --path:/mnt/workspace/github/hmisc
/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git
-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/home/tes
t/.nimble/pkgs/macroutils-1.0.0 --path:/home/test/.nimble/pkgs/compiler-1.4.6 --
path:/home/test/.nimble/pkgs/nimble-0.13.0 --path:/home/test/.nimble/pkgs/gram-0
.3.2 --path:/home/test/.nimble/pkgs/skiplists-0.5.1 --path:/home/test/.nimble/pk
gs/grok-0.5.0 --path:/home/test/.nimble/pkgs/balls-2.4.5 --path:/home/test/.nimb
le/pkgs/grok-0.5.0 --path:/home/test/.nimble/pkgs/ups-0.0.6 --path:/home/test/.n
imble/pkgs/npeg-0.24.1 --path:/home/test/.nimble/pkgs/criterion-0.2.0 --path:/ho
me/test/.nimble/pkgs/grok-0.5.0 --path:/home/test/.nimble/pkgs/hasts-0.1.6 --pat
h:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --
path:/home/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/
benchy-0.0.1 --path:/home/test/.nimble/pkgs/balls-2.4.5 --path:/home/test/.nimbl
e/pkgs/grok-0.5.0 --path:/home/test/.nimble/pkgs/ups-0.0.6 --path:/home/test/.ni
mble/pkgs/npeg-0.24.1 --path:/home/test/.nimble/pkgs/criterion-0.2.0 --path:/mnt
/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/
home/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy
-0.0.1 --path:/mnt/workspace/github/hpprint/src --path:/mnt/workspace/github/hdr
awing/src --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/
cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:/home/tes
t/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/github/hnimast/src --path:/mnt
/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/
home/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy
-0.0.1 --path:/home/test/.nimble/pkgs/macroutils-1.0.0 --path:/home/test/.nimble
/pkgs/compiler-1.4.6 --path:/home/test/.nimble/pkgs/nimble-0.13.0 --path:/mnt/wo
rkspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/hom
e/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.
0.1 --path:/mnt/workspace/github/hnimast/src --path:/mnt/workspace/github/hmisc/
src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-
sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/home/test
/.nimble/pkgs/macroutils-1.0.0 --path:/home/test/.nimble/pkgs/compiler-1.4.6 --p
ath:/home/test/.nimble/pkgs/nimble-0.13.0 --path:/mnt/workspace/github/hmisc/src
 --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-san
dbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspac
e/github/hpprint/src --path:/mnt/workspace/github/hdrawing/src --path:/mnt/works
pace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/t
est/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1
 --path:/mnt/workspace/github/hnimast/src --path:/mnt/workspace/github/hmisc/src
 --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-san
dbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/home/test/.n
imble/pkgs/macroutils-1.0.0 --path:/home/test/.nimble/pkgs/compiler-1.4.6 --path
:/home/test/.nimble/pkgs/nimble-0.13.0 --path:/mnt/workspace/github/hmisc/src --
path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbo
x/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/mnt/workspace/g
ithub/nimspell/src --path:/mnt/workspace/github/hmisc/src --path:/home/test/.nim
ble/pkgs/cligen-1.2.2 --path:/home/test/workspace/git-sandbox/fusion/src --path:
/home/test/.nimble/pkgs/benchy-0.0.1 --path:'/home/test/.nimble/pkgs/fusion-#mat
ching-fixup' --path:/home/test/.nimble/pkgs/cxxstd-0.1.0 --path:/mnt/workspace/g
ithub/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/wo
rkspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --pat
h:/mnt/workspace/github/hpprint/src --path:/mnt/workspace/github/hdrawing/src --
path:/mnt/workspace/github/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2
 --path:/home/test/workspace/git-sandbox/fusion/src --path:/home/test/.nimble/pk
gs/benchy-0.0.1 --path:/mnt/workspace/github/hnimast/src --path:/mnt/workspace/g
ithub/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/wo
rkspace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --pat
h:/home/test/.nimble/pkgs/macroutils-1.0.0 --path:/home/test/.nimble/pkgs/compil
er-1.4.6 --path:/home/test/.nimble/pkgs/nimble-0.13.0 --path:/mnt/workspace/gith
ub/hmisc/src --path:/home/test/.nimble/pkgs/cligen-1.2.2 --path:/home/test/works
pace/git-sandbox/fusion/src --path:/home/test/.nimble/pkgs/benchy-0.0.1 --path:/
home/test/.nimble/pkgs/nimble-0.13.0 --path:/home/test/workspace/git-sandbox/fus
ion/src --path:/home/test/.nimble/pkgs/cxxstd-0.1.0 --hints:off -r --path:. /mnt
/workspace/github/haxdoc/tests/tFilterD

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants