Index: git-crrev-parse |
diff --git a/git-crrev-parse b/git-crrev-parse |
new file mode 100755 |
index 0000000000000000000000000000000000000000..77318fe6e05f6e8de2c1cfd679a4a5b1c2dce62b |
--- /dev/null |
+++ b/git-crrev-parse |
@@ -0,0 +1,53 @@ |
+#!/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 |
+ |
+# Developer note: this script makes heavy use of prefix/suffix/pattern |
+# substitution for bash variables. Refer to the "Parameter Expansion" |
+# section of the man page for bash. |
+ |
+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 |
+ remote_ref="${ref/refs\/heads/refs\/remotes\/origin}" |
tfarina
2015/12/03 00:36:51
For some reason this does not work on my setup.
T
|
+ remote_ref="${remote_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 |
+ grep_str="Cr-Commit-Position: $ref@{#$num}" |
+ git rev-list -n 1 --grep="$grep_str" "$remote_ref" |
+ fi |
+ |
+ shift |
+done |