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"