| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #!/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.
- #=============================================================================
- # Run this script to set up the local Git repository to push to
- # a Gerrit Code Review instance for this project.
- # Project configuration instructions:
- #
- # - Run a Gerrit Code Review server
- #
- # - Populate adjacent "config" file with:
- # gerrit.site = Top Gerrit URL (not project-specific)
- # gerrit.project = Name of project in Gerrit
- # gerrit.pushurl = Review site push URL with "$username" placeholder
- # gerrit.remote = Gerrit remote name, if not "gerrit"
- # gerrit.url = Gerrit project URL, if not "$site/p/$project"
- die() {
- echo 1>&2 "$@" ; exit 1
- }
- # Make sure we are inside the repository.
- cd "${BASH_SOURCE%/*}" &&
- # Load the project configuration.
- site=$(git config -f config --get gerrit.site) &&
- project=$(git config -f config --get gerrit.project) &&
- pushurl_=$(git config -f config --get gerrit.pushurl) &&
- remote=$(git config -f config --get gerrit.remote ||
- echo "gerrit") &&
- fetchurl=$(git config -f config --get gerrit.url ||
- echo "$site/p/$project") ||
- die 'This project is not configured to use Gerrit.'
- # Get current gerrit push URL.
- pushurl=$(git config --get remote."$remote".pushurl ||
- git config --get remote."$remote".url || echo '') &&
- # Tell user about current configuration.
- if test -n "$pushurl"; then
- echo 'Remote "'"$remote"'" is currently configured to push to
- '"$pushurl"'
- ' &&
- read -ep 'Reconfigure Gerrit? [y/N]: ' ans &&
- if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
- setup=1
- else
- setup=''
- fi
- else
- echo 'Remote "'"$remote"'" is not yet configured.
- '"$project"' changes must be pushed to our Gerrit Code Review site:
- '"$fetchurl"'
- Register a Gerrit account and select a username (used below).
- You will need an OpenID:
- http://openid.net/get-an-openid/
- ' &&
- read -ep 'Configure Gerrit? [Y/n]: ' ans &&
- if [ "$ans" == "n" ] || [ "$ans" == "N" ]; then
- exit 0
- else
- setup=1
- fi
- fi &&
- # Perform setup if necessary.
- if test -n "$setup"; then
- echo 'Sign-in to Gerrit to get/set your username at
- '"$site"'/#/settings
- Add your SSH public keys at
- '"$site"'/#/settings/ssh-keys
- ' &&
- read -ep "Gerrit username? [$USER]: " gu &&
- if test -z "$gu"; then
- gu="$USER"
- fi &&
- if test -z "$pushurl"; then
- git remote add "$remote" "$fetchurl"
- else
- git config remote."$remote".url "$fetchurl"
- fi &&
- pushurl="${pushurl_/\$username/$gu}" &&
- git config remote."$remote".pushurl "$pushurl" &&
- echo 'Remote "'"$remote"'" is now configured to push to
- '"$pushurl"'
- '
- fi &&
- # Optionally test Gerrit access.
- if test -n "$pushurl"; then
- read -ep 'Test access to Gerrit (SSH)? [y/N]: ' ans &&
- if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
- echo -n 'Testing Gerrit access by SSH...'
- if git ls-remote --heads "$pushurl" >/dev/null; then
- echo 'passed.'
- else
- echo 'failed.' &&
- die 'Could not access Gerrit. Add your SSH public keys at
- '"$site"'/#/settings/ssh-keys
- '
- fi
- fi
- fi &&
- # Set up GerritId hook.
- hook=$(git config --get hooks.GerritId || echo '') &&
- if test -z "$hook"; then
- echo '
- Enabling GerritId hook to add a "Change-Id" footer to commit
- messages for interaction with Gerrit. Run
- git config hooks.GerritId false
- to disable this feature (but you will be on your own).' &&
- git config hooks.GerritId true
- else
- echo 'GerritId hook already configured to "'"$hook"'".'
- fi
|