Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f3ac85c834 |
+44
-13
@@ -57,10 +57,11 @@ Details:
|
|||||||
|
|
||||||
Specifically it uses the following regexes:
|
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
|
type
|
||||||
LangType = enum lNim, lNode
|
LangType = enum lNim, lNode
|
||||||
@@ -85,9 +86,13 @@ type PackageVersion = object
|
|||||||
# See also:
|
# See also:
|
||||||
# https://regex101.com/r/Ly7O1x/3/
|
# 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-]+)*))?$"
|
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 =
|
proc parseNimblePackage(dir: Path): PackageVersion =
|
||||||
result = PackageVersion(lang: lNim)
|
result = PackageVersion(lang: lNim)
|
||||||
|
|
||||||
@@ -146,6 +151,25 @@ proc writePackage(pkg: PackageVersion) =
|
|||||||
writeFile($pkg.file, pkg.nodePackage.pretty)
|
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 =
|
proc incrementLastVersionPart(version: string): string =
|
||||||
let versionParts = toSeq(findIter(version, re"([^\d.]+)?\.?(\d+)"))
|
let versionParts = toSeq(findIter(version, re"([^\d.]+)?\.?(\d+)"))
|
||||||
let lastVersionPartMatch = versionParts[^1]
|
let lastVersionPartMatch = versionParts[^1]
|
||||||
@@ -171,7 +195,7 @@ proc incrementSemverPart(
|
|||||||
|
|
||||||
result = ""
|
result = ""
|
||||||
|
|
||||||
let matchOpt = match(version, SemVerPattern)
|
let matchOpt = match(version, SemVerRegex)
|
||||||
|
|
||||||
if matchOpt.isNone:
|
if matchOpt.isNone:
|
||||||
raise newException(ValueError,
|
raise newException(ValueError,
|
||||||
@@ -241,6 +265,8 @@ when isMainModule:
|
|||||||
else:
|
else:
|
||||||
detectAndParsePackage(dir)
|
detectAndParsePackage(dir)
|
||||||
|
|
||||||
|
let oldVersion = pkg.version
|
||||||
|
|
||||||
if args["bump"]:
|
if args["bump"]:
|
||||||
if $args["<part>"] == "last":
|
if $args["<part>"] == "last":
|
||||||
pkg.version = incrementLastVersionPart(pkg.version)
|
pkg.version = incrementLastVersionPart(pkg.version)
|
||||||
@@ -249,10 +275,18 @@ when isMainModule:
|
|||||||
pkg.version = incrementSemverPart(pkg.version, part)
|
pkg.version = incrementSemverPart(pkg.version, part)
|
||||||
|
|
||||||
writePackage(pkg)
|
writePackage(pkg)
|
||||||
|
|
||||||
|
for filePath in args["<src-file>"]:
|
||||||
|
replaceVersionInFile(Path(filePath), pkg, oldVersion)
|
||||||
|
|
||||||
echo pkg.version
|
echo pkg.version
|
||||||
|
|
||||||
elif args["set"]:
|
elif args["set"]:
|
||||||
pkg.version = $args["<new-version>"]
|
pkg.version = $args["<new-version>"]
|
||||||
|
|
||||||
|
for filePath in args["<src-file>"]:
|
||||||
|
replaceVersionInFile(Path(filePath), pkg, oldVersion)
|
||||||
|
|
||||||
writePackage(pkg)
|
writePackage(pkg)
|
||||||
echo pkg.version
|
echo pkg.version
|
||||||
|
|
||||||
@@ -260,21 +294,18 @@ when isMainModule:
|
|||||||
|
|
||||||
elif args["interactive"]:
|
elif args["interactive"]:
|
||||||
var acceptNewVersion = false
|
var acceptNewVersion = false
|
||||||
var newVersion = pkg.version
|
|
||||||
while not acceptNewVersion:
|
while not acceptNewVersion:
|
||||||
stdout.writeLine "Current version is " & pkg.version
|
stdout.writeLine "Current version is " & oldVersion
|
||||||
stdout.write "New version? "
|
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)? "
|
stdout.write "New version will be set to '" & pkg.version & "'. Is this correct (yes/no)? "
|
||||||
let isCorrect = stdin.readLine
|
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
|
echo "Updating version definition in " & $pkg.file
|
||||||
writePackage(pkg)
|
writePackage(pkg)
|
||||||
|
|
||||||
# TODO:
|
for filePath in args["<src-file>"]:
|
||||||
# for f in filesToUpdate:
|
echo "Updating version definition in " & $filePath
|
||||||
# echo "Updating version definition in " & $f
|
replaceVersionInFile(Path(filePath), pkg, oldVersion)
|
||||||
# updateVersionInFile(f)
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Package
|
# Package
|
||||||
|
|
||||||
version = "1.0.1"
|
version = "1.0.2"
|
||||||
author = "Jonathan Bernard"
|
author = "Jonathan Bernard"
|
||||||
description = "Small util to update version consistently for nim and node packages."
|
description = "Small util to update version consistently for nim and node packages."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|||||||
Reference in New Issue
Block a user