1
- import subprocess
2
-
3
1
import click
4
2
5
3
from .admin import admin
@@ -23,35 +21,44 @@ def cli():
23
21
@click .command ()
24
22
def version () -> None :
25
23
"""Display the installed version of warnet"""
26
- # First try to get the version from the installed package
27
24
try :
28
25
from warnet ._version import __version__
29
26
30
- version_str = __version__
31
- except ImportError :
32
- version_str = "0.0.0"
27
+ # For PyPI releases, this will be the exact tag (e.g. "1.1.11")
28
+ # For dev installs, it will be something like "1.1.11.post1.dev17+g27af3a7.d20250309"
29
+ # Which is <tag>.post<postN>.dev<devN>+g<git commit hash>.d<YYYYMMDD>
30
+ # <postN> is the number of local commits since the checkout commit
31
+ # <devN> is the number of commits since the last tag
32
+ raw_version = __version__
33
33
34
- # Try to get git commit to append
35
- try :
36
- # Check if we're in a git repository
37
- subprocess .check_output (
38
- ["git" , "rev-parse" , "--is-inside-work-tree" ], stderr = subprocess .DEVNULL
39
- )
34
+ # Format the version string to our desired format
35
+ if "+" in raw_version :
36
+ version_part , git_date_part = raw_version .split ("+" , 1 )
40
37
41
- # Get the short commit hash
42
- commit = subprocess .check_output (
43
- ["git" , "rev-parse" , "--short=8" , "HEAD" ], stderr = subprocess .DEVNULL , text = True
44
- ).strip ()
38
+ # Get just the git commit hash
39
+ commit_hash = (
40
+ git_date_part [1 :].split ("." , 1 )[0 ]
41
+ if git_date_part .startswith ("g" )
42
+ else git_date_part .split ("." , 1 )[0 ]
43
+ )
45
44
46
- # If we have a commit hash, append it to the version
47
- # Don't append if already has a hash
48
- if commit and "-" not in version_str :
49
- version_str = f"{ version_str } -{ commit } "
45
+ # Remove .dev component (from "no-guess-dev" scheme)
46
+ clean_version = version_part
47
+ if ".dev" in clean_version :
48
+ clean_version = clean_version .split (".dev" )[0 ]
49
+
50
+ # Apply dirty status (from "no-guess-dev" scheme)
51
+ if ".post" in clean_version :
52
+ base = clean_version .split (".post" )[0 ]
53
+ version_str = f"{ base } -{ commit_hash } -dirty"
54
+ else :
55
+ version_str = f"{ clean_version } -{ commit_hash } "
56
+ else :
57
+ version_str = raw_version
50
58
51
59
click .echo (f"warnet version { version_str } " )
52
- except (subprocess .SubprocessError , FileNotFoundError ):
53
- # Git commands failed or git not available, just use the version without the commit
54
- click .echo (f"warnet version { version_str } " )
60
+ except ImportError :
61
+ click .echo ("warnet version unknown" )
55
62
56
63
57
64
cli .add_command (admin )
0 commit comments