From 039bc0e1c1431c2cb826067ebc0a9a36286b5ea5 Mon Sep 17 00:00:00 2001 From: Dmitry Polienko Date: Fri, 30 Dec 2016 14:47:48 +0700 Subject: [PATCH] Change dump to use fuzzy matching on argument --- src/nimble.nim | 24 +++++++++++++++++++++++- tests/testdump/testdump.nimble | 4 ++++ tests/tester.nim | 28 ++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 tests/testdump/testdump.nimble diff --git a/src/nimble.nim b/src/nimble.nim index 6cb744a..36b1f4e 100644 --- a/src/nimble.nim +++ b/src/nimble.nim @@ -807,8 +807,30 @@ proc join(x: seq[PkgTuple]; y: string): string = result.add y result.add x[i][0] & " " & $x[i][1] +proc getPackageByPattern(pattern: string, options: Options): PackageInfo = + ## Search for a package file using multiple strategies. + if pattern == "": + # Not specified - using current directory + result = getPkgInfo(os.getCurrentDir(), options) + elif pattern.splitFile.ext == ".nimble" and pattern.existsFile: + # project file specified + result = getPkgInfoFromFile(pattern, options) + elif pattern.existsDir: + # project directory specified + result = getPkgInfo(pattern, options) + else: + # Last resort - attempt to read as package identifier + let packages = getInstalledPkgsMin(options.getPkgsDir(), options) + let identTuple = parseRequires(pattern) + var skeletonInfo: PackageInfo + if not findPkg(packages, identTuple, skeletonInfo): + raise newException(NimbleError, + "Specified package not found" + ) + result = getPkgInfoFromFile(skeletonInfo.myPath, options) + proc dump(options: Options) = - let p = getPkgInfo(os.getCurrentDir(), options) + let p = getPackageByPattern(options.action.projName, options) echo "name: ", p.name.escape echo "version: ", p.version.escape echo "author: ", p.author.escape diff --git a/tests/testdump/testdump.nimble b/tests/testdump/testdump.nimble new file mode 100644 index 0000000..630b52a --- /dev/null +++ b/tests/testdump/testdump.nimble @@ -0,0 +1,4 @@ +description = "Test package for dump command" +version = "0.1.0" +author = "nigredo-tori" +license = "BSD" diff --git a/tests/tester.nim b/tests/tester.nim index 4d73b1b..ea1daa5 100644 --- a/tests/tester.nim +++ b/tests/tester.nim @@ -299,3 +299,31 @@ test "can uninstall": check(not dirExists(installDir / "pkgs" / "PackageA-0.2.0")) check execNimble("uninstall", "-y", "nimscript").exitCode == QuitSuccess + +test "can dump for current project": + cd "testdump": + let (outp, exitCode) = execNimble("dump") + check: exitCode == 0 + check: outp.processOutput.inLines("desc: \"Test package for dump command\"") + +test "can dump for project directory": + let (outp, exitCode) = execNimble("dump", "testdump") + check: exitCode == 0 + check: outp.processOutput.inLines("desc: \"Test package for dump command\"") + +test "can dump for project file": + let (outp, exitCode) = execNimble("dump", "testdump" / "testdump.nimble") + check: exitCode == 0 + check: outp.processOutput.inLines("desc: \"Test package for dump command\"") + +test "can dump for installed package": + cd "testdump": + check: execNimble("install", "-y").exitCode == 0 + defer: + discard execNimble("remove", "-y", "testdump") + + # Otherwise we might find subdirectory instead + cd "..": + let (outp, exitCode) = execNimble("dump", "testdump") + check: exitCode == 0 + check: outp.processOutput.inLines("desc: \"Test package for dump command\"")