Index: git-crrev-parse |
diff --git a/git-crrev-parse b/git-crrev-parse |
new file mode 100755 |
index 0000000000000000000000000000000000000000..6a8313077be0d2d11698bb8366822f855293c6a5 |
--- /dev/null |
+++ b/git-crrev-parse |
@@ -0,0 +1,50 @@ |
+#!/usr/bin/env bash |
+# Copyright 2015 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+ |
+# This git extension converts a chromium commit number to its git commit hash. |
+# It accepts the following input formats: |
+# |
+# $ git crrev-parse Cr-Commit-Position: refs/heads/master@{#311769} |
+# $ git crrev-parse ' Cr-Commit-Position: refs/heads/master@{#311769}' |
+# $ git crrev-parse 'Cr-Commit-Position: refs/heads/master@{#311769}' |
+# $ git crrev-parse refs/heads/master@{#311769} |
+# |
+# It also works for branches (assuming you have branches in your local |
+# checkout): |
+# |
+# $ git crrev-parse refs/branch-heads/2278@{#2} |
+# |
+# If you don't specify a branch, refs/heads/master is assumed: |
+# |
+# $ git crrev-parse @{#311769} |
+# $ git crrev-parse #311769 |
+# $ git crrev-parse 311769 |
+ |
+ |
+while [ -n "$1" ]; do |
+ if [[ "$1" = "Cr-Commit-Position:" ]] && [[ "$2" =~ .*@\{#[0-9][0-9]*\} ]]; then |
+ commit_pos="$2" |
+ shift |
+ else |
+ commit_pos="${1#*Cr-Commit-Position: }" |
+ fi |
+ ref="${commit_pos%@\{#*\}}" |
+ if [ "$ref" = "$commit_pos" -o -z "$ref" ]; then |
+ ref="refs/heads/master" |
+ fi |
+ ref="${ref/refs\/heads/refs\/remotes\/origin}" |
+ ref="${ref/refs\/branch-heads/refs\/remotes\/branch-heads}" |
+ num="${commit_pos#*@\{\#}" |
+ num="${num%\}}" |
+ |
+ if [ -z "$ref" -o -z "$num" ]; then |
+ git rev-parse "$1" |
+ else |
+ git rev-list -n 1 --grep="$commit_pos" "$ref" |
ghost stip (do not use)
2015/01/23 00:03:27
reconstruct commit_pos when grepping to reduce fal
szager1
2015/01/23 00:53:45
Done.
|
+ fi |
+ |
+ shift |
+done |