aboutsummaryrefslogtreecommitdiff
path: root/gittaggers.py
diff options
context:
space:
mode:
Diffstat (limited to 'gittaggers.py')
-rw-r--r--gittaggers.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/gittaggers.py b/gittaggers.py
new file mode 100644
index 0000000..e91cf0f
--- /dev/null
+++ b/gittaggers.py
@@ -0,0 +1,36 @@
+import subprocess
+import time
+import pkg_resources
+from setuptools.command.egg_info import egg_info
+
+SETUPTOOLS_VER = pkg_resources.get_distribution(
+ "setuptools").version.split('.')
+
+RECENT_SETUPTOOLS = int(SETUPTOOLS_VER[0]) > 40 or (
+ int(SETUPTOOLS_VER[0]) == 40 and int(SETUPTOOLS_VER[1]) > 0) or (
+ int(SETUPTOOLS_VER[0]) == 40 and int(SETUPTOOLS_VER[1]) == 0 and
+ int(SETUPTOOLS_VER[2]) > 0)
+
+class EggInfoFromGit(egg_info):
+ """Tag the build with git commit timestamp.
+
+ If a build tag has already been set (e.g., "egg_info -b", building
+ from source package), leave it alone.
+ """
+
+ def git_timestamp_tag(self):
+ gitinfo = subprocess.check_output(
+ ['git', 'log', '--first-parent', '--max-count=1',
+ '--format=format:%ct', '.']).strip()
+ return time.strftime('.%Y%m%d%H%M%S', time.gmtime(int(gitinfo)))
+
+ def tags(self):
+ if self.tag_build is None:
+ try:
+ self.tag_build = self.git_timestamp_tag()
+ except subprocess.CalledProcessError:
+ pass
+ return egg_info.tags(self)
+
+ if RECENT_SETUPTOOLS:
+ vtags = property(tags)