xref: /titanic_44/usr/src/tools/scripts/hgsetup.sh (revision 786d1eec1cd1cac7e26243d118cd209e84bc6bb9)
1#! /usr/bin/ksh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22
23#
24# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27
28# Copyright 2010, Richard Lowe
29
30#
31# Easy setup script for populating a user's ~/.hgrc
32# This currently does the following:
33#	* Load the cadmium extension
34#	* Populate the author/email fields to be correct
35#	* Alias canonical repositories like onnv-gate
36#	* Configures mercurial to use appropriate merge tools
37#
38# See hgrc(5) for more information
39#
40
41HGRC=$HOME/.hgrc
42
43usage() {
44	prog=$(basename "$0")
45	echo \
46"usage: $prog [-f] [-c cdm_path] [-m merge_path] [-n name] [-e email] [-p proxy] [-s style_path]
47	-f            : force overwriting $HGRC
48	-c cdm_path   : override Cadmium path
49	-m merge_path : override path to merge tool
50	-n name       : override name (for ui.username)
51	-e email      : override email (for email.from)
52	-p proxy      : enable use of web proxy with specified proxy
53	-s style_path : override path to style file
54
55	if -n isn't provided, the entry from /etc/passwd is used
56
57	proxy should be in the form of hostname:port
58	"
59	exit 1
60}
61
62while getopts c:e:fm:n:p:s: opt; do
63	case "$opt" in
64	c) cdm_path=$OPTARG;;
65	e) email=$OPTARG;;
66	f) force=1;;
67	m) merge_path=$OPTARG;;
68	n) name=$OPTARG;;
69	p) proxy=$OPTARG;;
70	s) style_path=$OPTARG;;
71	*) usage;;
72	esac
73done
74
75if [ -f $HGRC -a "$force" -eq 0 ]; then
76	echo "Error: You have an existing .hgrc in $HGRC"
77	echo "Please move it aside."
78	exit 1
79fi
80
81AWK="/usr/xpg4/bin/awk"
82SED="/usr/bin/sed"
83LDAPCLIENT="/usr/bin/ldapsearch"
84
85login=$(/usr/bin/id -un)
86
87#
88# Try and determine where SUNWonbld is installed.  In order of
89# preference, look in:
90#
91#   1. $(whence $0), on the assumption that you want the version
92#      of SUNWonbld that best matches the hgsetup script you invoked
93#
94#   2. /opt/onbld, because local is generally better
95#
96#   3. /ws/onnv-tools/onbld, it's nfs and it might be slow, but it
97#      should resolve from most places on-SWAN
98#
99paths="$(dirname $(dirname $(whence $0))) /opt/onbld /ws/onnv-tools/onbld"
100cdmbin="lib/python/onbld/hgext/cdm.py"
101stylefile="etc/hgstyle"
102
103for dir in $paths; do
104	if [[ -f "$dir/$cdmbin" && -z "$cdm_path" ]]; then
105		cdm_path="$dir/$cdmbin"
106	fi
107
108	if [[ -f "$dir/$stylefile" && -z "$style_path" ]]; then
109		style_path="$dir/$stylefile"
110	fi
111
112	if [[ -n "$cdm_path" && -n "$style_path" ]]; then
113		break
114	fi
115done
116
117if [[ -n $proxy ]]; then
118	proxyConfig="[http_proxy]
119host=$proxy
120"
121fi
122
123if [[ -z $email ]]; then
124	my_id=$(id -un)
125	my_hostname=$(hostname)
126	possible_fqhns=$(getent hosts $my_hostname | cut -f 2-)
127	my_fqhn=`for i in $possible_fqhns; do case $i in *.*) echo $i; break;; esac; done`
128	email="$my_id@$my_fqhn"
129	echo "No e-mail address provided, defaulting to $email"
130fi
131
132if [[ -z "$name" ]]; then
133	name=${name:=$(getent passwd $login | awk -F: '{print $5}')}
134fi
135username="$name <$email>"
136
137echo "Configured the following:"
138if [[ -n $proxy ]]; then
139	echo "	proxy: $proxy"
140fi
141echo "	email: $email"
142echo "	username: $name"
143echo "	style: $style_path"
144echo "	cadmium: $cdm_path"
145
146if [[ -z "$cdm_path" ]]; then
147	echo "Warning: you will need to edit your .hgrc file\n" \
148	     "to specify a path for cadmium."
149fi
150
151if [[ -n $merge_path ]]; then
152	echo "	merge: $merge_path"
153fi
154
155cat <<EOF >$HGRC
156$proxyConfig[extensions]
157hgext.cdm=$cdm_path
158
159[email]
160from=$email
161
162[paths]
163onnv-gate=ssh://anon@hg.opensolaris.org//hg/onnv/onnv-gate
164illumos-gate=ssh://anonhg@hg.illumos.org/illumos-gate
165
166[merge-tools]
167filemerge.gui=True
168filemerge.args=-a \$base \$local \$other \$output
169filemerge.priority=1
170filemerge.premerge=False
171
172meld.gui=True
173meld.priority=0
174meld.premerge=False
175
176gpyfm.gui=True
177gpyfm.priority=0
178gpyfm.premerge=False
179
180[ui]
181username=$username
182style=$style_path
183EOF
184
185if [[ -n $merge_path ]]; then
186	echo "merge=$merge_path" >> $HGRC
187fi
188
189echo "Please check $HGRC and verify everything looks correct"
190