commit: 638f92c6957051db105f1bb40a2d8da3d455885c
Author: Brian Harring <ferringb <AT> gmail <DOT> com>
AuthorDate: Fri Nov 21 22:06:58 2025 +0000
Commit: Brian Harring <ferringb <AT> gmail <DOT> com>
CommitDate: Fri Nov 21 22:09:17 2025 +0000
URL:
https://gitweb.gentoo.org/proj/pkgcore/snakeoil.git/commit/?id=638f92c6
fix: time format handling in git log parsing.
Date formats differ across countries, this code was written
to american norm due to the underlying git invocation being
sensitive to the users configuration for this.
The datetime parsed epoch is available for code to use for
localization, but for compatibility sake, this code still
returns the date formatted in american norms.
Signed-off-by: Brian Harring <ferringb <AT> gmail.com>
src/snakeoil/dist/utilities.py | 3 +--
src/snakeoil/version.py | 16 +++++++++++-----
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/snakeoil/dist/utilities.py b/src/snakeoil/dist/utilities.py
index 3c595b9..7cd9f2b 100644
--- a/src/snakeoil/dist/utilities.py
+++ b/src/snakeoil/dist/utilities.py
@@ -32,8 +32,7 @@ def module_version(repodir, moduledir):
if tag is None:
commits = git_version['commits']
rev = git_version['rev'][:7]
- date = datetime.strptime(git_version['date'], '%a, %d %b %Y
%H:%M:%S %z')
- date = datetime.strftime(date, '%Y%m%d')
+ date = git_version['datetime'].strftime("%Y%m%d")
if commits is not None:
version += f'.dev{commits}'
version += f'+g{rev}.d{date}'
diff --git a/src/snakeoil/version.py b/src/snakeoil/version.py
index 2fd65d2..c0d6d89 100644
--- a/src/snakeoil/version.py
+++ b/src/snakeoil/version.py
@@ -1,5 +1,6 @@
"""Version information."""
+import datetime
import errno
import os
import subprocess
@@ -77,13 +78,14 @@ def get_git_version(path):
"""Return git related revision data."""
path = os.path.abspath(path)
try:
- stdout, ret = _run_git(path, ["log", "--format=%H\n%aD",
"HEAD^..HEAD"])
+ stdout, ret = _run_git(path, ["log", "-1", "--format=%H\n%at", "HEAD"])
if ret != 0:
return None
- data = stdout.decode().splitlines()
- tag = _get_git_tag(path, data[0])
+ (ref, timestamp) = stdout.decode().splitlines()
+ datetime_obj = datetime.datetime.fromtimestamp(int(timestamp))
+ tag = _get_git_tag(path, ref)
# get number of commits since most recent tag
stdout, ret = _run_git(path, ["describe", "--tags", "--abbrev=0"])
@@ -95,9 +97,13 @@ def get_git_version(path):
if ret == 0:
commits = len(stdout.decode().splitlines())
+ # historically, this code
return {
- "rev": data[0],
- "date": data[1],
+ "rev": ref,
+ # include this so any code that can do date localization, does so.
+ "datetime": datetime_obj,
+ # ... and force this to american norms, since that's the
historical behavior.
+ "date": datetime_obj.strftime("%a, %d %b %Y %H:%M:%S %z"),
"tag": tag,
"commits": commits,
}