← Back to team overview

cloud-init-dev team mailing list archive

[Merge] ~smoser/cloud-init:fix/read-version-support-worktree into cloud-init:master

 

Scott Moser has proposed merging ~smoser/cloud-init:fix/read-version-support-worktree into cloud-init:master.

Commit message:
tools/read-version: Fix read-version when in a git worktree.

read-version --json would report bad data when working in a worktree.
This is just because in a worktree, .git is not a directory, but
rather a metadata file that points to the another path.
  $ git worktree ../mytree
  $ cat ../mytree/.git
  gitdir: /path/to/cloud-init/.git/worktrees/mytree
  $ rm -Rf ../mytree; git worktree prune

Requested reviews:
  cloud-init commiters (cloud-init-dev)

For more details, see:
https://code.launchpad.net/~smoser/cloud-init/+git/cloud-init/+merge/336545

see commit message
-- 
Your team cloud-init commiters is requested to review the proposed merge of ~smoser/cloud-init:fix/read-version-support-worktree into cloud-init:master.
diff --git a/tools/read-version b/tools/read-version
index d9ed30d..3ea9e66 100755
--- a/tools/read-version
+++ b/tools/read-version
@@ -45,6 +45,19 @@ def which(program):
     return None
 
 
+def is_gitdir(path):
+    # Return boolean indicating if path is a git tree.
+    git_meta = os.path.join(path, '.git')
+    if os.path.isdir(git_meta):
+        return True
+    if os.path.exists(git_meta):
+        # in a git worktree, .git is a file with 'gitdir: x'
+        with open(git_meta, "rb") as fp:
+            if b'gitdir:' in fp.read():
+                return True
+    return False
+
+
 use_long = '--long' in sys.argv or os.environ.get('CI_RV_LONG')
 use_tags = '--tags' in sys.argv or os.environ.get('CI_RV_TAGS')
 output_json = '--json' in sys.argv
@@ -52,7 +65,7 @@ output_json = '--json' in sys.argv
 src_version = ci_version.version_string()
 version_long = None
 
-if os.path.isdir(os.path.join(_tdir, ".git")) and which("git"):
+if is_gitdir(_tdir) and which("git"):
     flags = []
     if use_tags:
         flags = ['--tags']

Follow ups