Change dump to use fuzzy matching on argument

This commit is contained in:
Dmitry Polienko 2016-12-30 14:47:48 +07:00
commit 039bc0e1c1
3 changed files with 55 additions and 1 deletions

View file

@ -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

View file

@ -0,0 +1,4 @@
description = "Test package for dump command"
version = "0.1.0"
author = "nigredo-tori"
license = "BSD"

View file

@ -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\"")