diff --git a/.gitattributes b/.gitattributes index f2cc330c3db2f1d368c645c5d16f3c2ed381677b..3323f94b9bf89c214c31ec264378e6c1d7916353 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 0000000000000000000000000000000000000000..2471490c25ba59b85d2a4f8bc38360642fa613ba --- /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