From 341043cf89db389e101619cb08b9793e99e83080 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Thu, 27 Sep 2012 14:54:58 -0400
Subject: [PATCH] Add 'git-gerrit-push' script

Add a script implementing our standard "git gerrit-push" alias.  When
invoked, first check that the current branch is a named topic.  Then
fetch 'master' from the 'gerrit' remote repository so the local
repository can compute a minimal pack to push.  Finally, push the topic
to the 'gerrit' remote as "refs/for/master/$topic".
---
 .gitattributes  |  1 +
 git-gerrit-push | 73 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 74 insertions(+)
 create mode 100755 git-gerrit-push

diff --git a/.gitattributes b/.gitattributes
index f2cc330..3323f94 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -4,5 +4,6 @@
 *                export-ignore
 
 config*          eol=lf         whitespace=indent-with-non-tab
+git-*            eol=lf         whitespace=indent-with-non-tab
 tips             eol=lf         whitespace=indent-with-non-tab
 setup-*          eol=lf         whitespace=indent-with-non-tab
diff --git a/git-gerrit-push b/git-gerrit-push
new file mode 100755
index 0000000..2471490
--- /dev/null
+++ b/git-gerrit-push
@@ -0,0 +1,73 @@
+#!/usr/bin/env bash
+#=============================================================================
+# Copyright 2010-2012 Kitware, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#=============================================================================
+
+USAGE="[<remote>] [--no-topic] [--dry-run] [--]"
+OPTIONS_SPEC=
+SUBDIRECTORY_OK=Yes
+. "$(git --exec-path)/git-sh-setup"
+
+#-----------------------------------------------------------------------------
+
+remote=''
+refspecs=''
+no_topic=''
+dry_run=''
+
+# Parse the command line options.
+while test $# != 0; do
+	case "$1" in
+		--no-topic) no_topic=1 ;;
+		--dry-run)  dry_run=--dry-run ;;
+		--) shift; break ;;
+		-*) usage ;;
+		*) test -z "$remote" || usage ; remote="$1" ;;
+	esac
+	shift
+done
+test $# = 0 || usage
+
+# Default remote.
+test -n "$remote" || remote="gerrit"
+
+if test -z "$no_topic"; then
+	# Identify and validate the topic branch name.
+	topic="$(git symbolic-ref HEAD | sed -e 's|^refs/heads/||')"
+	if test "$topic" = "master"; then
+		die 'Please name your topic:
+		git checkout -b descriptive-name'
+	fi
+	refspecs="HEAD:refs/for/master/$topic"
+fi
+
+# Exit early if we have nothing to push.
+if test -z "$refspecs"; then
+	echo "Nothing to push!"
+	exit 0
+fi
+
+# Fetch the current upstream master branch head.
+# This helps the computation of a minimal pack to push.
+echo "Fetching $remote master"
+fetch_out=$(git fetch "$remote" master 2>&1) || die "$fetch_out"
+
+# Push.  Save output and exit code.
+echo "Pushing to $remote"
+push_stdout=$(git push --porcelain $dry_run "$remote" $refspecs); push_exit=$?
+echo "$push_stdout"
+
+# Reproduce the push exit code.
+exit $push_exit
-- 
GitLab