Add support for updating const's defined in Nim source files.
This commit is contained in:
+44
-13
@@ -57,10 +57,11 @@ Details:
|
||||
|
||||
Specifically it uses the following regexes:
|
||||
|
||||
TODO
|
||||
Nim: ^\s*const\s+\S*VERSION\S*\*?\s*=\s*"(<old-version>)"\s*$
|
||||
Node: ^\s*export\s+const\s+\S*VERSION\S*\s*=\s*"(<old-version>)"\s*;?$
|
||||
"""
|
||||
|
||||
const UV_VERSION = "1.0.0"
|
||||
const UV_VERSION = "1.0.2"
|
||||
|
||||
type
|
||||
LangType = enum lNim, lNode
|
||||
@@ -85,9 +86,13 @@ type PackageVersion = object
|
||||
# See also:
|
||||
# https://regex101.com/r/Ly7O1x/3/
|
||||
#
|
||||
let SemVerPattern =
|
||||
let SemVerRegex =
|
||||
re"^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"
|
||||
|
||||
let NimConstPattern = "^\\s*const\\s+\\S*VERSION\\S*\\*?\\s*=\\s*\"($#)\"\\s*$"
|
||||
let NodeConstPattern =
|
||||
"^\\s*export\\s+const\\s+\\S*VERSION\\S*\\s*=\\s*\"($#)\"\\s*;?$"
|
||||
|
||||
proc parseNimblePackage(dir: Path): PackageVersion =
|
||||
result = PackageVersion(lang: lNim)
|
||||
|
||||
@@ -146,6 +151,25 @@ proc writePackage(pkg: PackageVersion) =
|
||||
writeFile($pkg.file, pkg.nodePackage.pretty)
|
||||
|
||||
|
||||
proc replaceVersionInFile(file: Path, pkg: PackageVersion, vOld: string) =
|
||||
let rgx =
|
||||
case pkg.lang
|
||||
of lNim: re(NimConstPattern % [vOld.replace(".", "\\.")])
|
||||
of lNode: re(NodeConstPattern % [vOld.replace(".", "\\.")])
|
||||
|
||||
var newLines = newSeq[string]()
|
||||
for l in lines($file):
|
||||
let mOpt = l.match(rgx)
|
||||
if mOpt.isSome:
|
||||
let m = mOpt.get
|
||||
newLines.add(
|
||||
l[0..<m.captureBounds[0].a] &
|
||||
pkg.version &
|
||||
l[m.captureBounds[0].b+1 .. ^1])
|
||||
else: newLines.add(l)
|
||||
|
||||
writeFile($file, newLines.join("\p"))
|
||||
|
||||
proc incrementLastVersionPart(version: string): string =
|
||||
let versionParts = toSeq(findIter(version, re"([^\d.]+)?\.?(\d+)"))
|
||||
let lastVersionPartMatch = versionParts[^1]
|
||||
@@ -171,7 +195,7 @@ proc incrementSemverPart(
|
||||
|
||||
result = ""
|
||||
|
||||
let matchOpt = match(version, SemVerPattern)
|
||||
let matchOpt = match(version, SemVerRegex)
|
||||
|
||||
if matchOpt.isNone:
|
||||
raise newException(ValueError,
|
||||
@@ -241,6 +265,8 @@ when isMainModule:
|
||||
else:
|
||||
detectAndParsePackage(dir)
|
||||
|
||||
let oldVersion = pkg.version
|
||||
|
||||
if args["bump"]:
|
||||
if $args["<part>"] == "last":
|
||||
pkg.version = incrementLastVersionPart(pkg.version)
|
||||
@@ -249,10 +275,18 @@ when isMainModule:
|
||||
pkg.version = incrementSemverPart(pkg.version, part)
|
||||
|
||||
writePackage(pkg)
|
||||
|
||||
for filePath in args["<src-file>"]:
|
||||
replaceVersionInFile(Path(filePath), pkg, oldVersion)
|
||||
|
||||
echo pkg.version
|
||||
|
||||
elif args["set"]:
|
||||
pkg.version = $args["<new-version>"]
|
||||
|
||||
for filePath in args["<src-file>"]:
|
||||
replaceVersionInFile(Path(filePath), pkg, oldVersion)
|
||||
|
||||
writePackage(pkg)
|
||||
echo pkg.version
|
||||
|
||||
@@ -260,21 +294,18 @@ when isMainModule:
|
||||
|
||||
elif args["interactive"]:
|
||||
var acceptNewVersion = false
|
||||
var newVersion = pkg.version
|
||||
while not acceptNewVersion:
|
||||
stdout.writeLine "Current version is " & pkg.version
|
||||
stdout.writeLine "Current version is " & oldVersion
|
||||
stdout.write "New version? "
|
||||
newVersion = stdin.readLine
|
||||
pkg.version = stdin.readLine
|
||||
|
||||
stdout.write "New version will be set to '" & pkg.version & "'. Is this correct (yes/no)? "
|
||||
let isCorrect = stdin.readLine
|
||||
let acceptNewVersion = "yes".startsWith(isCorrect.toLower)
|
||||
acceptNewVersion = "yes".startsWith(isCorrect.toLower)
|
||||
|
||||
pkg.version = newVersion
|
||||
echo "Updating version definition in " & $pkg.file
|
||||
writePackage(pkg)
|
||||
|
||||
# TODO:
|
||||
# for f in filesToUpdate:
|
||||
# echo "Updating version definition in " & $f
|
||||
# updateVersionInFile(f)
|
||||
for filePath in args["<src-file>"]:
|
||||
echo "Updating version definition in " & $filePath
|
||||
replaceVersionInFile(Path(filePath), pkg, oldVersion)
|
||||
@@ -1,6 +1,6 @@
|
||||
# Package
|
||||
|
||||
version = "1.0.1"
|
||||
version = "1.0.2"
|
||||
author = "Jonathan Bernard"
|
||||
description = "Small util to update version consistently for nim and node packages."
|
||||
license = "MIT"
|
||||
|
||||
Reference in New Issue
Block a user