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 41 HGRC=$HOME/.hgrc 42 43 usage() { 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 62 while 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 73 done 74 75 if [ -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 79 fi 80 81 AWK="/usr/xpg4/bin/awk" 82 SED="/usr/bin/sed" 83 LDAPCLIENT="/usr/bin/ldapsearch" 84 85 login=$(/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 # 99 paths="$(dirname $(dirname $(whence $0))) /opt/onbld /ws/onnv-tools/onbld" 100 cdmbin="lib/python/onbld/hgext/cdm.py" 101 stylefile="etc/hgstyle" 102 103 for 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 115 done 116 117 if [[ -n $proxy ]]; then 118 proxyConfig="[http_proxy] 119 host=$proxy 120 " 121 fi 122 123 if [[ -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" 130 fi 131 132 if [[ -z "$name" ]]; then 133 name=${name:=$(getent passwd $login | awk -F: '{print $5}')} 134 fi 135 username="$name <$email>" 136 137 echo "Configured the following:" 138 if [[ -n $proxy ]]; then 139 echo " proxy: $proxy" 140 fi 141 echo " email: $email" 142 echo " username: $name" 143 echo " style: $style_path" 144 echo " cadmium: $cdm_path" 145 146 if [[ -z "$cdm_path" ]]; then 147 echo "Warning: you will need to edit your .hgrc file\n" \ 148 "to specify a path for cadmium." 149 fi 150 151 if [[ -n $merge_path ]]; then 152 echo " merge: $merge_path" 153 fi 154 155 cat <<EOF >$HGRC 156 $proxyConfig[extensions] 157 hgext.cdm=$cdm_path 158 159 [email] 160 from=$email 161 162 [paths] 163 onnv-gate=ssh://anon@hg.opensolaris.org//hg/onnv/onnv-gate 164 illumos-gate=ssh://anonhg@hg.illumos.org/illumos-gate 165 166 [merge-tools] 167 filemerge.gui=True 168 filemerge.args=-a \$base \$local \$other \$output 169 filemerge.priority=1 170 filemerge.premerge=False 171 172 meld.gui=True 173 meld.priority=0 174 meld.premerge=False 175 176 gpyfm.gui=True 177 gpyfm.priority=0 178 gpyfm.premerge=False 179 180 [ui] 181 username=$username 182 style=$style_path 183 EOF 184 185 if [[ -n $merge_path ]]; then 186 echo "merge=$merge_path" >> $HGRC 187 fi 188 189 echo "Please check $HGRC and verify everything looks correct"