diff --git a/src/nimble.nim b/src/nimble.nim index 97ed2e5..3017d55 100644 --- a/src/nimble.nim +++ b/src/nimble.nim @@ -766,11 +766,13 @@ proc install(packages: seq[PkgTuple], proc build(options: Options) = var pkgInfo = getPkgInfo(getCurrentDir()) + nimScriptHint(pkgInfo) let paths = processDeps(pkginfo, options) buildFromDir(pkgInfo, paths, false) proc compile(options: Options) = var pkgInfo = getPkgInfo(getCurrentDir()) + nimScriptHint(pkgInfo) let paths = processDeps(pkginfo, options) let realDir = pkgInfo.getRealDir() @@ -1073,7 +1075,9 @@ proc doAction(options: Options) = of actionUpdate: update(options) of actionInstall: - discard install(options.action.packages, options) + let (_, pkgInfo) = install(options.action.packages, options) + if options.action.packages.len == 0: + nimScriptHint(pkgInfo) of actionUninstall: uninstall(options) of actionSearch: diff --git a/src/nimblepkg/nimbletypes.nim b/src/nimblepkg/nimbletypes.nim index c5ad669..f5530b9 100644 --- a/src/nimblepkg/nimbletypes.nim +++ b/src/nimblepkg/nimbletypes.nim @@ -12,6 +12,7 @@ type PackageInfo* = object mypath*: string ## The path of this .nimble file isNimScript*: bool ## Determines if this pkg info was read from a nims file + isMinimal*: bool name*: string version*: string author*: string diff --git a/src/nimblepkg/packageinfo.nim b/src/nimblepkg/packageinfo.nim index 8823adf..bc158aa 100644 --- a/src/nimblepkg/packageinfo.nim +++ b/src/nimblepkg/packageinfo.nim @@ -93,20 +93,24 @@ proc validatePackageInfo(pkgInfo: PackageInfo, path: string) = if pkgInfo.version == "": raise newException(NimbleError, "Incorrect .nimble file: " & path & " does not contain a version field.") - if pkgInfo.author == "": - raise newException(NimbleError, "Incorrect .nimble file: " & path & - " does not contain an author field.") - if pkgInfo.description == "": - raise newException(NimbleError, "Incorrect .nimble file: " & path & - " does not contain a description field.") - if pkgInfo.license == "": - raise newException(NimbleError, "Incorrect .nimble file: " & path & - " does not contain a license field.") - if pkgInfo.backend notin ["c", "cc", "objc", "cpp", "js"]: - raise newException(NimbleError, "'" & pkgInfo.backend & - "' is an invalid backend.") + + if not pkgInfo.isMinimal: + if pkgInfo.author == "": + raise newException(NimbleError, "Incorrect .nimble file: " & path & + " does not contain an author field.") + if pkgInfo.description == "": + raise newException(NimbleError, "Incorrect .nimble file: " & path & + " does not contain a description field.") + if pkgInfo.license == "": + raise newException(NimbleError, "Incorrect .nimble file: " & path & + " does not contain a license field.") + if pkgInfo.backend notin ["c", "cc", "objc", "cpp", "js"]: + raise newException(NimbleError, "'" & pkgInfo.backend & + "' is an invalid backend.") + validateVersion(pkgInfo.version) +proc nimScriptHint*(pkgInfo: PackageInfo) = if not pkgInfo.isNimScript: # TODO: Turn this into a warning. # TODO: Add a URL explaining more. @@ -195,6 +199,13 @@ proc readPackageInfoFromNimble(path: string; result: var PackageInfo) = proc getNameVersion*(pkgpath: string): tuple[name, version: string] = ## Splits ``pkgpath`` in the format ``/home/user/.nimble/pkgs/package-0.1`` ## into ``(packagea, 0.1)`` + ## + ## Also works for file paths like: + ## ``/home/user/.nimble/pkgs/package-0.1/package.nimble`` + + if pkgPath.splitFile.ext == ".nimble": + return getNameVersion(pkgPath.splitPath.head) + result.name = "" result.version = "" let tail = pkgpath.splitPath.tail @@ -215,6 +226,9 @@ proc readPackageInfo*(nf: NimbleFile; onlyMinimalInfo=false): PackageInfo = ## fails attempts to evaluate it as a nimscript file. ## ## If both fail then returns an error. + ## + ## When ``onlyMinimalInfo`` is true, only the `name` and `version` fields are + ## populated. The isNimScript field can also be relied on. result = initPackageInfo(nf) var success = false @@ -232,6 +246,8 @@ proc readPackageInfo*(nf: NimbleFile; onlyMinimalInfo=false): PackageInfo = let tmp = getNameVersion(nf) result.name = tmp.name result.version = tmp.version + result.isNimScript = true + result.isMinimal = true else: try: readPackageInfoFromNims(nf, result) @@ -429,6 +445,8 @@ when isMainModule: ("packagea", "0.1") doAssert getNameVersion("/home/user/.nimble/libs/package-a-0.1") == ("package-a", "0.1") + doAssert getNameVersion("/home/user/.nimble/libs/package-a-0.1/package.nimble") == + ("package-a", "0.1") validatePackageName("foo_bar") validatePackageName("f_oo_b_a_r")