Skip to content

Commit 7c3f0e6

Browse files
committed
use strscans
1 parent 0f35442 commit 7c3f0e6

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

tests/tools/tnimdigger.nim

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import tools/nimdigger {.all.}
2+
3+
block: # parseNimGitTag
4+
doAssert parseNimGitTag("v1.4.2") == (1, 4, 2)
5+
doAssertRaises(ValueError): discard parseNimGitTag("v1.4")
6+
doAssertRaises(ValueError): discard parseNimGitTag("v1.4.2a")
7+
doAssertRaises(ValueError): discard parseNimGitTag("av1.4.2")
8+
9+
block: # isGitNimTag
10+
doAssert isGitNimTag("v1.4.2")
11+
doAssert not isGitNimTag("v1.4.2a")

tools/nimdigger.nim

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -185,21 +185,18 @@ proc gitIsAncestorOf(dir: string, rev1, rev2: string): bool =
185185
gitCheck(dir)
186186
execShellCmd(fmt"git -C {dir.quoteShell} merge-base --is-ancestor {rev1} {rev2}") == 0
187187

188-
proc isGitNimTag(tag: string): bool =
189-
if not tag.startsWith "v":
190-
return false
191-
let ver = tag[1..^1].split(".")
192-
return ver.len == 3
188+
import std/strscans
193189

194190
proc parseNimGitTag(tag: string): (int, int, int) =
195-
doAssert tag.isGitNimTag, tag
196-
let ver = tag[1..^1].split(".")
197-
template impl(i) =
198-
# improve pending https://github.com/nim-lang/Nim/pull/18038
199-
result[i] = ver[i].parseInt
200-
impl 0
201-
impl 1
202-
impl 2
191+
if not scanf(tag, "v$i.$i.$i$.", result[0], result[1], result[2]):
192+
raise newException(ValueError, tag)
193+
194+
proc isGitNimTag(tag: string): bool =
195+
try:
196+
discard parseNimGitTag(tag)
197+
return true
198+
except ValueError:
199+
return false
203200

204201
proc toNimCsourcesExe(binDir: string, name: string, rev: string): string =
205202
let rev2 = rev.replace(".", "_")

0 commit comments

Comments
 (0)