about summary refs log tree commit diff
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)