Merge branch 'fix-403' of https://github.com/yglukhov/nimble into yglukhov-fix-403

This commit is contained in:
Dominik Picheta 2017-09-30 13:51:02 +01:00
commit 596d17804f
3 changed files with 45 additions and 10 deletions

View file

@ -615,16 +615,28 @@ proc listPaths(options: Options) =
if kind != pcDir or not path.startsWith(options.getPkgsDir / name):
continue
let
nimbleFile = path / name.addFileExt("nimble")
hasSpec = nimbleFile.existsFile
var nimbleFile = path / name.addFileExt("nimble")
var nimbleLinkTargetPath: string
if not nimbleFile.existsFile:
let nimbleLinkFile = path / name.addFileExt("nimble-link")
if fileExists(nimbleLinkFile):
let lnk = readNimbleLink(nimbleLinkFile)
nimbleFile = lnk.nimbleFilePath
nimbleLinkTargetPath = lnk.packageDir
if hasSpec:
if nimbleFile.existsFile:
var pkgInfo = getPkgInfo(path, options)
var v: VersionAndPath
v.version = newVersion(pkgInfo.specialVersion)
v.path = options.getPkgsDir / (pkgInfo.name & '-' & pkgInfo.specialVersion)
installed.add(v)
if nimbleLinkTargetPath.len == 0:
v.path = options.getPkgsDir / (pkgInfo.name & '-' & pkgInfo.specialVersion)
installed.add(v)
else:
# If we have a nimble-developed package, this is really the path we're
# looking for.
v.path = nimbleLinkTargetPath
installed = @[v]
break
else:
display("Warning:", "No .nimble file found for " & path, Warning,
MediumPriority)
@ -865,9 +877,9 @@ proc developFromDir(dir: string, options: Options) =
# need to be read. This will mean that users will need to re-run
# `nimble develop` if they change their `srcDir` but I think it's a worthy
# compromise.
let contents = pkgInfo.myPath & "\n" & pkgInfo.getRealDir()
let nimbleLinkPath = pkgDestDir / pkgInfo.name.addFileExt("nimble-link")
writeFile(nimbleLinkPath, contents)
writeNimbleLink(nimbleLinkPath,
NimbleLink(nimbleFilePath: pkgInfo.myPath, packageDir: pkgInfo.getRealDir()))
# Save a nimblemeta.json file.
saveNimbleMeta(pkgDestDir, "file://" & dir, vcsRevisionInDir(dir),

View file

@ -27,6 +27,10 @@ type
MetaData* = object
url*: string
NimbleLink* = object
nimbleFilePath*: string
packageDir*: string
proc initPackageInfo*(path: string): PackageInfo =
result.myPath = path
result.specialVersion = ""
@ -141,6 +145,15 @@ proc readMetaData*(path: string): MetaData =
let jsonmeta = parseJson(cont)
result.url = jsonmeta["url"].str
proc readNimbleLink*(nimbleLinkPath: string): NimbleLink =
let s = readFile(nimbleLinkPath).splitLines()
result.nimbleFilePath = s[0]
result.packageDir = s[1]
proc writeNimbleLink*(nimbleLinkPath: string, contents: NimbleLink) =
let c = contents.nimbleFilePath & "\n" & contents.packageDir
writeFile(nimbleLinkPath, c)
proc needsRefresh*(options: Options): bool =
## Determines whether a ``nimble refresh`` is needed.
##
@ -298,8 +311,7 @@ proc findNimbleFile*(dir: string; error: bool): string =
if result.splitFile.ext == ".nimble-link":
# Return the path of the real .nimble file.
let lines = readFile(result).splitLines()
result = lines[0]
result = readNimbleLink(result).nimbleFilePath
if not fileExists(result):
raiseNimbleError("The .nimble-link file is pointing to a missing" &
" file: " & result)

View file

@ -560,6 +560,17 @@ suite "develop feature":
let (_, exitCode) = execNimble("develop", "-y", url)
check exitCode == QuitSuccess
test "nimble path points to develop":
cd "develop/srcdirtest":
var (output, exitCode) = execNimble("develop")
checkpoint output
check exitCode == QuitSuccess
(output, exitCode) = execNimble("path", "srcdirtest")
checkpoint output
check exitCode == QuitSuccess
check output.strip() == getCurrentDir() / "src"
suite "test command":
test "Runs passing unit tests":
cd "testCommand/testsPass":