Browse Source

chore: save HEAD when git-import-patches runs (#17824)

Jeremy Apthorp 6 years ago
parent
commit
fdaa75354a
3 changed files with 41 additions and 8 deletions
  1. 29 8
      script/git-export-patches
  2. 6 0
      script/git-import-patches
  3. 6 0
      script/lib/git.py

+ 29 - 8
script/git-export-patches

@@ -9,14 +9,35 @@ import sys
 
 def guess_base_commit(repo):
   """Guess which commit the patches might be based on"""
-  args = [
-    'git',
-    '-C',
-    repo,
-    'describe',
-    '--tags',
-  ]
-  return subprocess.check_output(args).rsplit('-', 2)[0:2]
+  try:
+    args = [
+      'git',
+      '-C',
+      repo,
+      'rev-parse',
+      '--verify',
+      'refs/patches/upstream-head',
+    ]
+    upstream_head = subprocess.check_output(args).strip()
+    args = [
+      'git',
+      '-C',
+      repo,
+      'rev-list',
+      '--count',
+      upstream_head + '..',
+    ]
+    num_commits = subprocess.check_output(args).strip()
+    return [upstream_head, num_commits]
+  except subprocess.CalledProcessError:
+    args = [
+      'git',
+      '-C',
+      repo,
+      'describe',
+      '--tags',
+    ]
+    return subprocess.check_output(args).rsplit('-', 2)[0:2]
 
 
 def format_patch(repo, since):

+ 6 - 0
script/git-import-patches

@@ -17,6 +17,12 @@ def main(argv):
       help="use 3-way merge to resolve conflicts")
   args = parser.parse_args(argv)
 
+  # save the upstream HEAD so we can refer to it when we later export patches
+  git.update_ref(
+      repo='.',
+      ref='refs/patches/upstream-head',
+      newvalue='HEAD'
+  )
   git.am(
       repo='.',
       patch_data=patch_from_dir(args.patch_dir),

+ 6 - 0
script/lib/git.py

@@ -102,6 +102,12 @@ def get_head_commit(repo):
   return subprocess.check_output(args).strip()
 
 
+def update_ref(repo, ref, newvalue):
+  args = ['git', '-C', repo, 'update-ref', ref, newvalue]
+
+  return subprocess.check_call(args)
+
+
 def reset(repo):
   args = ['git', '-C', repo, 'reset']