| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #!/usr/bin/env bash
- #=============================================================================
- # Copyright 2010-2015 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 personal fork for this project in GitLab.
- # Project configuration instructions:
- #
- # - Run a GitLab server
- #
- # - Populate adjacent "config" file with:
- # gitlab.protocol = Top GitLab protocol, if not 'https'
- # gitlab.host = Top GitLab fully qualified host name
- # gitlab.site = Top GitLab URL, if not "<protocol>://<host>"
- # gitlab.group-name = Name of group containing project in GitLab
- # gitlab.group-path = Path of group containing project in GitLab
- # gitlab.project-name = Name of project within GitLab group
- # gitlab.project-path = Path of project within GitLab group
- # gitlab.url = GitLab push URL with "$username" placeholder,
- # if not "<site>/$username/<project-path>.git"
- # gitlab.pushurl = GitLab push URL with "$username" placeholder,
- # if not "git@<host>:$username/<project-path>.git"
- # gitlab.remote = GitLab remote name, if not "gitlab"
- die() {
- echo 1>&2 "$@" ; exit 1
- }
- # Make sure we are inside the repository.
- cd "${BASH_SOURCE%/*}" &&
- # Load the project configuration.
- protocol=$(git config -f config --get gitlab.protocol ||
- echo "https") &&
- host=$(git config -f config --get gitlab.host) &&
- site=$(git config -f config --get gitlab.site ||
- echo "$protocol://$host") &&
- group_path=$(git config -f config --get gitlab.group-path) &&
- group_name=$(git config -f config --get gitlab.group-name) &&
- project_name=$(git config -f config --get gitlab.project-name) &&
- project_path=$(git config -f config --get gitlab.project-path) &&
- pushurl_=$(git config -f config --get gitlab.pushurl ||
- echo "git@$host:\$username/$project_path.git") &&
- remote=$(git config -f config --get gitlab.remote ||
- echo "gitlab") &&
- fetchurl_=$(git config -f config --get gitlab.url ||
- echo "$site/\$username/$project_path.git") ||
- die 'This project is not configured to use GitLab.'
- # Get current gitlab 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 GitLab? [y/N]: ' ans &&
- if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
- setup=1
- else
- setup=''
- fi
- else
- echo 'Remote "'"$remote"'" is not yet configured.
- ' &&
- read -ep 'Configure GitLab to contribute to '"$project_name"'? [Y/n]: ' ans &&
- if [ "$ans" == "n" ] || [ "$ans" == "N" ]; then
- exit 0
- else
- setup=1
- fi
- fi &&
- setup_instructions='Add your SSH public keys at
- '"$site"'/profile/keys
- Then visit the main repository at:
- '"$site/$group_path/$project_path"'
- and use the Fork button in the upper right.
- '
- # Perform setup if necessary.
- if test -n "$setup"; then
- echo 'Sign-in to GitLab to get/set your username at
- '"$site/profile/account"'
- '"$setup_instructions" &&
- read -ep "GitLab username? [$USER]: " gu &&
- if test -z "$gu"; then
- gu="$USER"
- fi &&
- fetchurl="${fetchurl_/\$username/$gu}" &&
- 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 GitLab access.
- if test -n "$pushurl"; then
- read -ep 'Test access to GitLab (SSH)? [y/N]: ' ans &&
- if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
- echo -n 'Testing GitLab access by SSH...'
- if git ls-remote --heads "$pushurl" >/dev/null; then
- echo 'passed.'
- else
- echo 'failed.' &&
- die 'Could not access your GitLab fork of this project.
- '"$setup_instructions"
- fi
- fi
- fi
|