contrib: script to create a new vendor branch
authorRichard Earnshaw <rearnsha@arm.com>
Wed, 22 Jan 2020 10:06:50 +0000 (10:06 +0000)
committerRichard Earnshaw <rearnsha@arm.com>
Wed, 22 Jan 2020 10:06:50 +0000 (10:06 +0000)
This script is intended to create a new vendor branch.  Doing so is
not completely obvious if you are not familiar with the upstream
structure, so this takes the pain out of getting it right.

It doesn't check out the branch locally, but does set everything up so
that, if you have push enabled for your vendor branches, then

  git push vendors/<vendor> <branch>

will work as expected.

Run the script as

  contrib/git-add-vendor-branch.sh <vendor>/<branch> <start-point>

the <vendor> space must have previously been set up in the way
git-fetch-vendor.sh expects.

    * git-add-vendor-branch.sh: New file.

contrib/ChangeLog
contrib/git-add-vendor-branch.sh [new file with mode: 0755]

index 8f112af56917f1f8b09f98c783d8ca367e61476f..c5e4604d6f5f2b3c6366faa5c338ee2a79502539 100644 (file)
@@ -1,3 +1,7 @@
+2020-01-22  Richard Earnshaw  <rearnsha@arm.com>
+
+       * git-add-vendor-branch.sh: New file.
+
 2020-01-20  Richard Earnshaw  <rearnsha@arm.com>
 
        * gcc-git-customization.sh: Check that user-supplied remote
diff --git a/contrib/git-add-vendor-branch.sh b/contrib/git-add-vendor-branch.sh
new file mode 100755 (executable)
index 0000000..8fa8668
--- /dev/null
@@ -0,0 +1,48 @@
+#! /bin/sh -e
+
+# Create a new upstream vendor branch.
+
+# Usage:
+#  contrib/git-add-vendor-branch.sh <vendor>/<branch-name> <base>
+
+usage ()
+{
+    echo "Usage:"
+    echo "  $0 <vendor>/<branch-name> <start-point>"
+    echo
+    echo "<vendor> must have already been set up using contrib/git-fetch-vendor.sh"
+    exit 1
+}
+
+if [ $# != 2 ]
+then
+    usage
+fi
+
+vendor=$(echo "$1" | sed -r "s:([^/]*)/.*$:\1:")
+branch=$(echo "$1" | sed -r "s:[^/]*/(.*)$:\1:")
+start=$2
+
+# Sanity check the new branch argument.  If there is no '/', then the
+# vendor will be the same as the entire first argument.
+if [ -z "$vendor" -o -z "$branch" -o ${vendor} = $1 ]
+then
+    usage
+fi
+
+# Check that we know about the vendor
+url=$(git config --get "remote.vendors/${vendor}.url"||true)
+if [ -z "$url" ]
+then
+    echo "Cannot locate remote data for vendor ${vendor}.  Have you set it up?"
+    exit 1
+fi
+
+git branch --no-track ${vendor}/${branch} ${start}
+git push vendors/${vendor} ${vendor}/${branch}:refs/vendors/${vendor}/heads/${branch}
+git fetch -q vendors/${vendor}
+git branch --set-upstream-to=remotes/vendors/${vendor}/${branch} ${vendor}/$branch
+echo "You are now ready to check out ${vendor}/${branch}"
+echo "To push the branch upstream, use:"
+echo
+echo "git push vendors/${vendor} ${vendor}/${branch}"