| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- #!/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 ssh push access to the repository host.
 
- # Project configuration instructions:
 
- #
 
- # - Populate adjacent "config" file with:
 
- #    ssh.host = Repository host name
 
- #    ssh.user = Username on host, if not "git"
 
- #    ssh.key = Local ssh key name
 
- #    ssh.request-url = Web page URL to request ssh access
 
- egrep-q() {
 
- 	egrep "$@" >/dev/null 2>/dev/null
 
- }
 
- die() {
 
- 	echo 1>&2 "$@" ; exit 1
 
- }
 
- # Make sure we are inside the repository.
 
- cd "${BASH_SOURCE%/*}" &&
 
- # Load the project configuration.
 
- host=$(git config -f config --get ssh.host) &&
 
- user=$(git config -f config --get ssh.user || echo git) &&
 
- key=$(git config -f config --get ssh.key) &&
 
- request_url=$(git config -f config --get ssh.request-url) ||
 
- die 'This project is not configured for ssh push access.'
 
- # Check for existing configuration.
 
- if test -r ~/.ssh/config &&
 
-    egrep-q 'Host[= ]'"${host//\./\\.}" ~/.ssh/config; then
 
- 	echo 'Host "'"$host"'" is already in ~/.ssh/config' &&
 
- 	setup= &&
 
- 	question='Test'
 
- else
 
- 	echo 'Host "'"$host"'" not found in ~/.ssh/config' &&
 
- 	setup=1 &&
 
- 	question='Setup and test'
 
- fi &&
 
- # Ask the user whether to make changes.
 
- echo '' &&
 
- read -ep "${question} push access by ssh to $user@$host? [y/N]: " access &&
 
- if test "$access" != "y" -a "$access" != "Y"; then
 
- 	exit 0
 
- fi &&
 
- # Setup host configuration if necessary.
 
- if test -n "$setup"; then
 
- 	if ! test -d ~/.ssh; then
 
- 		mkdir -p ~/.ssh &&
 
- 		chmod 700 ~/.ssh
 
- 	fi &&
 
- 	if ! test -f ~/.ssh/config; then
 
- 		touch ~/.ssh/config &&
 
- 		chmod 600 ~/.ssh/config
 
- 	fi &&
 
- 	ssh_config='Host='"$host"'
 
-   IdentityFile ~/.ssh/'"$key" &&
 
- 	echo "Adding to ~/.ssh/config:
 
- $ssh_config
 
- " &&
 
- 	echo "$ssh_config" >> ~/.ssh/config &&
 
- 	if ! test -e ~/.ssh/"$key"; then
 
- 		if test -f ~/.ssh/id_rsa; then
 
- 			# Take care of the common case.
 
- 			ln -s id_rsa ~/.ssh/"$key"
 
- 			echo '
 
- Assuming ~/.ssh/id_rsa is the private key corresponding to the public key for
 
-   '"$user@$host"'
 
- If this is incorrect place private key at "~/.ssh/'"$key"'".'
 
- 		else
 
- 			echo '
 
- Place the private key corresponding to the public key registered for
 
-   '"$user@$host"'
 
- at "~/.ssh/'"$key"'".'
 
- 		fi
 
- 		read -e -n 1 -p 'Press any key to continue...'
 
- 	fi
 
- fi || exit 1
 
- # Test access configuration.
 
- echo 'Testing ssh push access to "'"$user@$host"'"...' &&
 
- if ! ssh "$user@$host" info; then
 
- 	die 'No ssh push access to "'"$user@$host"'".  You may need to request access at
 
-   '"$request_url"'
 
- '
 
- fi
 
 
  |