Enforce the execution of the correct task types

Fixes #533
This commit is contained in:
LemonBoy 2019-02-14 10:54:43 +01:00
commit ee0bf06f01

View file

@ -214,7 +214,9 @@ proc processDeps(pkginfo: PackageInfo, options: Options): seq[PackageInfo] =
addRevDep(options.nimbleData, i, pkginfo)
proc buildFromDir(pkgInfo: PackageInfo, paths: seq[string],
args: var seq[string]) =
args: var seq[string], options: Options) =
doAssert(options.action.typ == actionBuild)
## Builds a package as specified by ``pkgInfo``.
if pkgInfo.bin.len == 0:
raise newException(NimbleError,
@ -244,13 +246,14 @@ proc buildFromDir(pkgInfo: PackageInfo, paths: seq[string],
exc.hint = hint
raise exc
proc buildFromDir(pkgInfo: PackageInfo, paths: seq[string], forRelease: bool) =
proc buildFromDir(pkgInfo: PackageInfo, paths: seq[string], forRelease: bool,
options: Options) =
var args: seq[string]
if forRelease:
args = @["-d:release"]
else:
args = @[]
buildFromDir(pkgInfo, paths, args)
buildFromDir(pkgInfo, paths, args, options)
proc removePkgDir(dir: string, options: Options) =
## Removes files belonging to the package in ``dir``.
@ -325,6 +328,7 @@ proc installFromDir(dir: string, requestedVer: VersionRange, options: Options,
## to the packages this package depends on.
## The return value of this function is used by
## ``processDeps`` to gather a list of paths to pass to the nim compiler.
doAssert(options.action.typ == actionInstall)
# Handle pre-`install` hook.
if not options.depsOnly:
@ -356,7 +360,9 @@ proc installFromDir(dir: string, requestedVer: VersionRange, options: Options,
# if the build fails then the old package will still be installed.
if pkgInfo.bin.len > 0:
let paths = result.deps.map(dep => dep.getRealDir())
buildFromDir(pkgInfo, paths, true)
let optsCopy = options.briefClone()
optsCopy.action.typ = actionBuild
buildFromDir(pkgInfo, paths, true, optsCopy)
let pkgDestDir = pkgInfo.getPkgDest(options)
if existsDir(pkgDestDir) and existsFile(pkgDestDir / "nimblemeta.json"):
@ -470,8 +476,14 @@ proc getDownloadInfo*(pv: PkgTuple, options: Options,
proc install(packages: seq[PkgTuple],
options: Options,
doPrompt = true): tuple[deps: seq[PackageInfo], pkg: PackageInfo] =
var optsCopy = options.briefClone()
optsCopy.action.typ = actionInstall
# Pass an empty seq here because we're executing `install` inside the package
# directory
optsCopy.action.packages = @[]
if packages == @[]:
result = installFromDir(getCurrentDir(), newVRAny(), options, "")
result = installFromDir(getCurrentDir(), newVRAny(), optsCopy, "")
else:
# Install each package.
for pv in packages:
@ -480,7 +492,7 @@ proc install(packages: seq[PkgTuple],
let (downloadDir, downloadVersion) =
downloadPkg(url, pv.ver, meth, subdir, options)
try:
result = installFromDir(downloadDir, pv.ver, options, url)
result = installFromDir(downloadDir, pv.ver, optsCopy, url)
except BuildFailed:
# The package failed to build.
# Check if we tried building a tagged version of the package.
@ -507,7 +519,7 @@ proc build(options: Options) =
let deps = processDeps(pkginfo, options)
let paths = deps.map(dep => dep.getRealDir())
var args = options.action.compileOptions
buildFromDir(pkgInfo, paths, args)
buildFromDir(pkgInfo, paths, args, options)
proc execBackend(options: Options) =
let
@ -549,7 +561,8 @@ proc search(options: Options) =
## Searches for matches in ``options.action.search``.
##
## Searches are done in a case insensitive way making all strings lower case.
assert options.action.typ == actionSearch
doAssert(options.action.typ == actionSearch)
if options.action.search == @[]:
raise newException(NimbleError, "Please specify a search string.")
if needsRefresh(options):
@ -899,6 +912,8 @@ proc listTasks(options: Options) =
nimscriptsupport.listTasks(nimbleFile, options)
proc developFromDir(dir: string, options: Options) =
doAssert(options.action.typ == actionDevelop)
if options.depsOnly:
raiseNimbleError("Cannot develop dependencies only.")