diff --git a/src/babel.nim b/src/babel.nim index b56abbb..a26f314 100644 --- a/src/babel.nim +++ b/src/babel.nim @@ -325,6 +325,18 @@ proc removeRevDep(options: TOptions, pkg: TPackageInfo) = if thisDep.isNil: continue options.remove(pkg, depTup, thisDep) + # Clean up empty objects/arrays + var newData = newJObject() + for key, val in options.babelData["reverseDeps"]: + if val.len != 0: + var newVal = newJObject() + for ver, elem in val: + if elem.len != 0: + newVal[ver] = elem + if newVal.len != 0: + newData[key] = newVal + options.babelData["reverseDeps"] = newData + writeFile(options.getBabelDir() / "babeldata.json", pretty(options.babelData)) proc install(packages: seq[tuple[name: string, verRange: PVersionRange]], @@ -641,33 +653,36 @@ proc uninstall(options: TOptions) = # Do some verification. for pkgTup in options.action.packages: echo("Looking for ", pkgTup.name, " (", $pkgTup.ver, ")...") - let pkgList = getInstalledPkgs(options.getPkgsDir()) - var pkg: TPackageInfo - if not findPkg(pkglist, pkgTup, pkg): + let installedPkgs = getInstalledPkgs(options.getPkgsDir()) + var pkgList = findAllPkgs(installedPkgs, pkgTup) + if pkgList.len == 0: raise newException(EBabel, "Package not found") echo("Checking reverse dependencies...") - # Check whether any packages depend on the one the user is trying to uninstall - let thisDep = options.babelData["reverseDeps"][pkgTup.name] - if not thisDep.isNil: - for ver, val in thisDep.pairs: - if ver.newVersion in pkgTup.ver and val.len != 0: - assert val.kind == JArray - var reason = "" - if val.len == 1: - reason = val[0]["name"].str & " (" & val[0]["version"].str & - ") depends on it" - else: - for i in 0 .. (x.len > 0)) + test "can install packagebin2": - let (outp, exitCode) = execCmdEx(path & - " install -y https://github.com/babel-test/packagebin2.git") - check exitCode == QuitSuccess + check execCmdEx(path & + " install -y https://github.com/babel-test/packagebin2.git").exitCode == + QuitSuccess test "can reject same version dependencies": let (outp, exitCode) = execCmdEx(path & @@ -30,8 +34,7 @@ test "can reject same version dependencies": "dependency on PackageA 0.2.0 and PackageA 0.5.0 [EBabel]" test "can update": - let (outp, exitCode) = execCmdEx(path & " update") - check exitCode == QuitSuccess + check execCmdEx(path & " update").exitCode == QuitSuccess test "issue #27": # Install b @@ -46,12 +49,27 @@ test "issue #27": check execCmdEx("../" & path & " install -y").exitCode == QuitSuccess test "can uninstall": - let (outp, exitCode) = execCmdEx(path & " uninstall -y issue27b") - let ls = outp.strip.splitLines() - check exitCode != QuitSuccess - check ls[ls.len-1] == "Error: unhandled exception: Cannot uninstall issue27b" & - " because issue27a (0.1.0) depends on it [EBabel]" + block: + let (outp, exitCode) = execCmdEx(path & " uninstall -y issue27b") + let ls = outp.processOutput() + check exitCode != QuitSuccess + check ls[ls.len-1] == " Cannot uninstall issue27b (0.1.0) because " & + "issue27a (0.1.0) depends on it [EBabel]" - check execCmdEx(path & " uninstall -y issue27").exitCode == QuitSuccess - check execCmdEx(path & " uninstall -y issue27a").exitCode == QuitSuccess - check execCmdEx(path & " uninstall -y issue27b").exitCode == QuitSuccess + check execCmdEx(path & " uninstall -y issue27").exitCode == QuitSuccess + check execCmdEx(path & " uninstall -y issue27a").exitCode == QuitSuccess + check execCmdEx(path & " uninstall -y issue27b").exitCode == QuitSuccess + + # Remove Package* + let (outp, exitCode) = execCmdEx(path & " uninstall -y PackageA") + check exitCode != QuitSuccess + let ls = outp.processOutput() + check ls[ls.len-3].startsWith(" Cannot uninstall PackageA ") + check ls[ls.len-2].startsWith(" Cannot uninstall PackageA ") + check ls[ls.len-1].startsWith(" Cannot uninstall PackageA ") + check execCmdEx(path & " uninstall -y PackageBin2").exitCode == QuitSuccess + + # Case insensitive + check execCmdEx(path & " uninstall -y packagea").exitCode == QuitSuccess + + check execCmdEx(path & " uninstall -y PackageA").exitCode != QuitSuccess