Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Bazel: Portable way to guess whether root directory is reached
Bazel: Special handling for plugins not under git control
Bazel: Migrate workspace status script to python
Change-Id: I4abe4774d0132c66d932d9c5ec6ad0cc1cd78986
diff --git a/.bazelrc b/.bazelrc
index fef1fa3..bf3aa6c 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1,4 +1,4 @@
-build --workspace_status_command=./tools/workspace-status.sh --strategy=Closure=worker
+build --workspace_status_command="python ./tools/workspace_status.py" --strategy=Closure=worker
build --repository_cache=~/.gerritcodereview/bazel-cache/repository
build --action_env=PATH
build --disk_cache=~/.gerritcodereview/bazel-cache/cas
diff --git a/tools/workspace-status.sh b/tools/workspace-status.sh
deleted file mode 100755
index 2b1a4ba..0000000
--- a/tools/workspace-status.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-
-# This script will be run by bazel when the build process starts to
-# generate key-value information that represents the status of the
-# workspace. The output should be like
-#
-# KEY1 VALUE1
-# KEY2 VALUE2
-#
-# If the script exits with non-zero code, it's considered as a failure
-# and the output will be discarded.
-
-function rev() {
- cd $1; git describe --always --match "v[0-9].*" --dirty
-}
-
-echo STABLE_BUILD_GERRIT_LABEL $(rev .)
-for p in plugins/* ; do
- test -d "$p" || continue
- echo STABLE_BUILD_$(echo $(basename $p)_LABEL|tr '[a-z]' '[A-Z]' ) $(rev $p || echo unknown)
-done
diff --git a/tools/workspace_status.py b/tools/workspace_status.py
new file mode 100644
index 0000000..86df519
--- /dev/null
+++ b/tools/workspace_status.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+
+# This script will be run by bazel when the build process starts to
+# generate key-value information that represents the status of the
+# workspace. The output should be like
+#
+# KEY1 VALUE1
+# KEY2 VALUE2
+#
+# If the script exits with non-zero code, it's considered as a failure
+# and the output will be discarded.
+
+from __future__ import print_function
+import os
+import subprocess
+import sys
+
+ROOT = os.path.abspath(__file__)
+while not os.path.exists(os.path.join(ROOT, 'WORKSPACE')):
+ ROOT = os.path.dirname(ROOT)
+CMD = ['git', 'describe', '--always', '--match', 'v[0-9].*', '--dirty']
+
+
+def revision(directory, parent):
+ try:
+ os.chdir(directory)
+ return subprocess.check_output(CMD).strip().decode("utf-8")
+ except OSError as err:
+ print('could not invoke git: %s' % err, file=sys.stderr)
+ sys.exit(1)
+ except subprocess.CalledProcessError as err:
+ # ignore "not a git repository error" to report unknown version
+ return None
+ finally:
+ os.chdir(parent)
+
+
+print("STABLE_BUILD_GERRIT_LABEL %s" % revision(ROOT, ROOT))
+for d in os.listdir(os.path.join(ROOT, 'plugins')):
+ p = os.path.join('plugins', d)
+ if os.path.isdir(p):
+ v = revision(p, ROOT)
+ print('STABLE_BUILD_%s_LABEL %s' % (os.path.basename(p).upper(),
+ v if v else 'unknown'))