Add an helper to update subprojects git repos
authorThibault Saunier <thibault.saunier@osg.samsung.com>
Tue, 6 Sep 2016 02:37:25 +0000 (23:37 -0300)
committerThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 9 Sep 2016 12:01:58 +0000 (09:01 -0300)
git-update [new file with mode: 0755]

diff --git a/git-update b/git-update
new file mode 100755 (executable)
index 0000000..1a3d407
--- /dev/null
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+import argparse
+import os
+import subprocess
+
+
+SCRIPTDIR = os.path.dirname(__file__)
+
+class Colors:
+    HEADER = '\033[95m'
+    OKBLUE = '\033[94m'
+    OKGREEN = '\033[92m'
+    WARNING = '\033[93m'
+    FAIL = '\033[91m'
+    ENDC = '\033[0m'
+
+    force_disable = False
+
+    @classmethod
+    def disable(cls):
+        cls.HEADER = ''
+        cls.OKBLUE = ''
+        cls.OKGREEN = ''
+        cls.WARNING = ''
+        cls.FAIL = ''
+        cls.ENDC = ''
+
+    @classmethod
+    def enable(cls):
+        if cls.force_disable:
+            return
+
+        cls.HEADER = '\033[95m'
+        cls.OKBLUE = '\033[94m'
+        cls.OKGREEN = '\033[92m'
+        cls.WARNING = '\033[93m'
+        cls.FAIL = '\033[91m'
+        cls.ENDC = '\033[0m'
+
+
+
+def git(args, repository_path):
+    if not isinstance(args, list):
+        args = [args]
+
+    return subprocess.check_output(["git"] + args, cwd=repository_path).decode()
+
+
+def update_subprojects():
+    subprojects_dir = os.path.join(SCRIPTDIR, "subprojects")
+    for repo_name in os.listdir(subprojects_dir):
+        repo_dir = os.path.normpath(os.path.join(SCRIPTDIR, subprojects_dir, repo_name))
+        if not os.path.exists(os.path.join(repo_dir, '.git')):
+            continue
+
+        print("Updating %s..." % repo_name)
+        try:
+            git(["pull", "--rebase"], repo_dir)
+        except Exception as e:
+            print("\nCould not rebase %s, please fix and try again\nerror:\n  %s" % (repo_dir, e))
+            return False
+
+        commit_message = git("show", repo_dir).split("\n")
+        print(u"  -> %s%s%s — %s" % (Colors.HEADER, commit_message[0][7:14], Colors.ENDC,
+                                       commit_message[4].strip()))
+
+    return True
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(prog="git-update")
+
+    parser.add_argument("--no-color",
+                        default=False,
+                        action='store_true',
+                        help="Do not output ansi colors.")
+    options = parser.parse_args()
+    if options.no_color:
+        Colors.disable()
+
+    exit(not update_subprojects())