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