Print this page
9001 cdm is useless, remove it
9002 webrev should know how to get the git user name
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>

@@ -1567,12 +1567,10 @@
 # Given the pathname of a file, find its location in a "wx" active
 # file list and print the following comment.  Output is either text or
 # HTML; if the latter, embedded bugids (sequence of 5 or more digits)
 # are turned into URLs.
 #
-# This is also used with Mercurial and the file list provided by hg-active.
-#
 comments_from_wx()
 {
         typeset fmt=$1
         typeset p=$2
 

@@ -1609,14 +1607,11 @@
         typeset pp=$3
 
         if [[ -n $Nflag ]]; then
                 return
         fi
-        #
-        # Mercurial support uses a file list in wx format, so this
-        # will be used there, too
-        #
+
         if [[ -n $wxfile ]]; then
                 comments_from_wx $fmt $p
         fi
 }
 

@@ -1793,45 +1788,10 @@
 
         print " Done."
 }
 
 #
-# Call hg-active to get the active list output in the wx active list format
-#
-function hg_active_wxfile
-{
-        typeset child=$1
-        typeset parent=$2
-
-        TMPFLIST=/tmp/$$.active
-        $HG_ACTIVE -w $child -p $parent -o $TMPFLIST
-        wxfile=$TMPFLIST
-}
-
-#
-# flist_from_mercurial
-# Call hg-active to get a wx-style active list, and hand it off to
-# flist_from_wx
-#
-function flist_from_mercurial
-{
-        typeset child=$1
-        typeset parent=$2
-
-        print " File list from: hg-active -p $parent ...\c"
-        if [[ ! -x $HG_ACTIVE ]]; then
-                print           # Blank line for the \c above
-                print -u2 "Error: hg-active tool not found.  Exiting"
-                exit 1
-        fi
-        hg_active_wxfile $child $parent
-
-        # flist_from_wx prints the Done, so we don't have to.
-        flist_from_wx $TMPFLIST
-}
-
-#
 # Transform a specified 'git log' output format into a wx-like active list.
 #
 function git_wxfile
 {
         typeset child="$1"

@@ -1977,86 +1937,10 @@
                         exit 1;
                 }
             ' $1
 }
 
-function build_old_new_mercurial
-{
-        typeset olddir="$1"
-        typeset newdir="$2"
-        typeset old_mode=
-        typeset new_mode=
-        typeset file
-
-        #
-        # Get old file mode, from the parent revision manifest entry.
-        # Mercurial only stores a "file is executable" flag, but the
-        # manifest will display an octal mode "644" or "755".
-        #
-        if [[ "$PDIR" == "." ]]; then
-                file="$PF"
-        else
-                file="$PDIR/$PF"
-        fi
-        file=`echo $file | $SED 's#/#\\\/#g'`
-        # match the exact filename, and return only the permission digits
-        old_mode=`$SED -n -e "/^\\(...\\) . ${file}$/s//\\1/p" \
-            < $HG_PARENT_MANIFEST`
-
-        #
-        # Get new file mode, directly from the filesystem.
-        # Normalize the mode to match Mercurial's behavior.
-        #
-        new_mode=`get_file_mode $CWS/$DIR/$F`
-        if [[ -n "$new_mode" ]]; then
-                if [[ "$new_mode" = *[1357]* ]]; then
-                        new_mode=755
-                else
-                        new_mode=644
-                fi
-        fi
-
-        #
-        # new version of the file.
-        #
-        rm -rf $newdir/$DIR/$F
-        if [[ -e $CWS/$DIR/$F ]]; then
-                cp $CWS/$DIR/$F $newdir/$DIR/$F
-                if [[ -n $new_mode ]]; then
-                        chmod $new_mode $newdir/$DIR/$F
-                else
-                        # should never happen
-                        print -u2 "ERROR: set mode of $newdir/$DIR/$F"
-                fi
-        fi
-
-        #
-        # parent's version of the file
-        #
-        # Note that we get this from the last version common to both
-        # ourselves and the parent.  References are via $CWS since we have no
-        # guarantee that the parent workspace is reachable via the filesystem.
-        #
-        if [[ -n $parent_webrev && -e $PWS/$PDIR/$PF ]]; then
-                cp $PWS/$PDIR/$PF $olddir/$PDIR/$PF
-        elif [[ -n $HG_PARENT ]]; then
-                hg cat -R $CWS -r $HG_PARENT $CWS/$PDIR/$PF > \
-                    $olddir/$PDIR/$PF 2>/dev/null
-
-                if (( $? != 0 )); then
-                        rm -f $olddir/$PDIR/$PF
-                else
-                        if [[ -n $old_mode ]]; then
-                                chmod $old_mode $olddir/$PDIR/$PF
-                        else
-                                # should never happen
-                                print -u2 "ERROR: set mode of $olddir/$PDIR/$PF"
-                        fi
-                fi
-        fi
-}
-
 function build_old_new_git
 {
         typeset olddir="$1"
         typeset newdir="$2"
         typeset o_mode=

@@ -2167,13 +2051,11 @@
         typeset newdir="$WDIR/raw_files/new"
 
         mkdir -p $olddir/$PDIR
         mkdir -p $newdir/$DIR
 
-        if [[ $SCM_MODE == "mercurial" ]]; then
-                build_old_new_mercurial "$olddir" "$newdir"
-        elif [[ $SCM_MODE == "git" ]]; then
+        if [[ $SCM_MODE == "git" ]]; then
                 build_old_new_git "$olddir" "$newdir"
         elif [[ $SCM_MODE == "subversion" ]]; then
                 build_old_new_subversion "$olddir" "$newdir"
         elif [[ $SCM_MODE == "unknown" ]]; then
                 build_old_new_unknown "$olddir" "$newdir"

@@ -2235,11 +2117,10 @@
 
 PATH=$(/bin/dirname "$(whence $0)"):$PATH
 
 [[ -z $WDIFF ]] && WDIFF=`look_for_prog wdiff`
 [[ -z $WX ]] && WX=`look_for_prog wx`
-[[ -z $HG_ACTIVE ]] && HG_ACTIVE=`look_for_prog hg-active`
 [[ -z $GIT ]] && GIT=`look_for_prog git`
 [[ -z $WHICH_SCM ]] && WHICH_SCM=`look_for_prog which_scm`
 [[ -z $CODEREVIEW ]] && CODEREVIEW=`look_for_prog codereview`
 [[ -z $PS2PDF ]] && PS2PDF=`look_for_prog ps2pdf`
 [[ -z $PERL ]] && PERL=`look_for_prog perl`

@@ -2308,14 +2189,10 @@
 uflag=
 Uflag=
 wflag=
 remote_target=
 
-#
-# NOTE: when adding/removing options it is necessary to sync the list
-#       with usr/src/tools/onbld/hgext/cdm.py
-#
 while getopts "c:C:Dh:i:I:lnNo:Op:t:Uw" opt
 do
         case $opt in
         c)      cflag=1
                 codemgr_head=$OPTARG

@@ -2382,36 +2259,12 @@
 # that the webrev exists in ${CWS}/webrev, but will upload it using the name
 # $(basename ${CWS}).  So we need to get CWS set before we skip any remaining
 # logic.
 #
 $WHICH_SCM | read SCM_MODE junk || exit 1
-if [[ $SCM_MODE == "mercurial" ]]; then
-        #
-        # Mercurial priorities:
-        # 1. hg root from CODEMGR_WS environment variable
-        # 1a. hg root from CODEMGR_WS/usr/closed if we're somewhere under
-        #    usr/closed when we run webrev
-        # 2. hg root from directory of invocation
-        #
-        if [[ ${PWD} =~ "usr/closed" ]]; then
-                testparent=${CODEMGR_WS}/usr/closed
-                # If we're in OpenSolaris mode, we enforce a minor policy:
-                # help to make sure the reviewer doesn't accidentally publish
-                # source which is under usr/closed
-                if [[ -n "$Oflag" ]]; then
-                        print -u2 "OpenSolaris output not permitted with" \
-                            "usr/closed changes"
-                        exit 1
-                fi
-        else
-                testparent=${CODEMGR_WS}
-        fi
-        [[ -z $codemgr_ws && -n $testparent ]] && \
-            codemgr_ws=$(hg root -R $testparent 2>/dev/null)
-        [[ -z $codemgr_ws ]] && codemgr_ws=$(hg root 2>/dev/null)
-        CWS=$codemgr_ws
-elif [[ $SCM_MODE == "git" ]]; then
+
+if [[ $SCM_MODE == "git" ]]; then
         #
         # Git priorities:
         # 1. git rev-parse --git-dir from CODEMGR_WS environment variable
         # 2. git rev-parse --git-dir from directory of invocation
         #

@@ -2510,11 +2363,11 @@
 #
 # Before we go on to further consider -l and -w, work out which SCM we think
 # is in use.
 #
 case "$SCM_MODE" in
-mercurial|git|subversion)
+git|subversion)
         ;;
 unknown)
         if [[ $flist_mode == "auto" ]]; then
                 print -u2 "Unable to determine SCM in use and file list not specified"
                 print -u2 "See which_scm(1) for SCM detection information."

@@ -2568,99 +2421,12 @@
 
 if [[ $# -gt 0 ]]; then
         print -u2 "WARNING: unused arguments: $*"
 fi
 
-#
-# Before we entered the DO_EVERYTHING loop, we should have already set CWS
-# and CODEMGR_WS as needed.  Here, we set the parent workspace.
-#
-if [[ $SCM_MODE == "mercurial" ]]; then
-        #
-        # Parent can either be specified with -p
-        # Specified with CODEMGR_PARENT in the environment
-        # or taken from hg's default path.
-        #
 
-        if [[ -z $codemgr_parent && -n $CODEMGR_PARENT ]]; then
-                codemgr_parent=$CODEMGR_PARENT
-        fi
-
-        if [[ -z $codemgr_parent ]]; then
-                codemgr_parent=`hg path -R $codemgr_ws default 2>/dev/null`
-        fi
-
-        PWS=$codemgr_parent
-
-        #
-        # If the parent is a webrev, we want to do some things against
-        # the natural workspace parent (file list, comments, etc)
-        #
-        if [[ -n $parent_webrev ]]; then
-                real_parent=$(hg path -R $codemgr_ws default 2>/dev/null)
-        else
-                real_parent=$PWS
-        fi
-
-        #
-        # If hg-active exists, then we run it.  In the case of no explicit
-        # flist given, we'll use it for our comments.  In the case of an
-        # explicit flist given we'll try to use it for comments for any
-        # files mentioned in the flist.
-        #
-        if [[ -z $flist_done ]]; then
-                flist_from_mercurial $CWS $real_parent
-                flist_done=1
-        fi
-
-        #
-        # If we have a file list now, pull out any variables set
-        # therein.  We do this now (rather than when we possibly use
-        # hg-active to find comments) to avoid stomping specifications
-        # in the user-specified flist.
-        #
-        if [[ -n $flist_done ]]; then
-                env_from_flist
-        fi
-
-        #
-        # Only call hg-active if we don't have a wx formatted file already
-        #
-        if [[ -x $HG_ACTIVE && -z $wxfile ]]; then
-                print "  Comments from: hg-active -p $real_parent ...\c"
-                hg_active_wxfile $CWS $real_parent
-                print " Done."
-        fi
-
-        #
-        # At this point we must have a wx flist either from hg-active,
-        # or in general.  Use it to try and find our parent revision,
-        # if we don't have one.
-        #
-        if [[ -z $HG_PARENT ]]; then
-                eval `$SED -e "s/#.*$//" $wxfile | $GREP HG_PARENT=`
-        fi
-
-        #
-        # If we still don't have a parent, we must have been given a
-        # wx-style active list with no HG_PARENT specification, run
-        # hg-active and pull an HG_PARENT out of it, ignore the rest.
-        #
-        if [[ -z $HG_PARENT && -x $HG_ACTIVE ]]; then
-                $HG_ACTIVE -w $codemgr_ws -p $real_parent | \
-                    eval `$SED -e "s/#.*$//" | $GREP HG_PARENT=`
-        elif [[ -z $HG_PARENT ]]; then
-                print -u2 "Error: Cannot discover parent revision"
-                exit 1
-        fi
-
-        pnode=$(trim_digest $HG_PARENT)
-        PRETTY_PWS="${PWS} (at ${pnode})"
-        cnode=$(hg parent -R $codemgr_ws --template '{node|short}' \
-            2>/dev/null)
-        PRETTY_CWS="${CWS} (at ${cnode})"}
-elif [[ $SCM_MODE == "git" ]]; then
+if [[ $SCM_MODE == "git" ]]; then
         # Check that "head" revision specified with -c or -h is sane
         if [[ -n $cflag || -n $hflag ]]; then
                 head_rev=$($GIT rev-parse --verify --quiet "$codemgr_head")
                 if [[ -z $head_rev ]]; then
                         print -u2 "Error: bad revision ${codemgr_head}"

@@ -3073,45 +2839,10 @@
 #
 $SED -e "s/#.*$//" -e "/=/d" -e "/^[   ]*$/d" $FLIST > /tmp/$$.flist.clean
 FLIST=/tmp/$$.flist.clean
 
 #
-# For Mercurial, create a cache of manifest entries.
-#
-if [[ $SCM_MODE == "mercurial" ]]; then
-        #
-        # Transform the FLIST into a temporary sed script that matches
-        # relevant entries in the Mercurial manifest as follows:
-        # 1) The script will be used against the parent revision manifest,
-        #    so for FLIST lines that have two filenames (a renamed file)
-        #    keep only the old name.
-        # 2) Escape all forward slashes the filename.
-        # 3) Change the filename into another sed command that matches
-        #    that file in "hg manifest -v" output:  start of line, three
-        #    octal digits for file permissions, space, a file type flag
-        #    character, space, the filename, end of line.
-        # 4) Eliminate any duplicate entries.  (This can occur if a
-        #    file has been used as the source of an hg cp and it's
-        #    also been modified in the same changeset.)
-        #
-        SEDFILE=/tmp/$$.manifest.sed
-        $SED '
-                s#^[^ ]* ##
-                s#/#\\\/#g
-                s#^.*$#/^... . &$/p#
-        ' < $FLIST | $SORT -u > $SEDFILE
-
-        #
-        # Apply the generated script to the output of "hg manifest -v"
-        # to get the relevant subset for this webrev.
-        #
-        HG_PARENT_MANIFEST=/tmp/$$.manifest
-        hg -R $CWS manifest -v -r $HG_PARENT |
-            $SED -n -f $SEDFILE > $HG_PARENT_MANIFEST
-fi
-
-#
 # First pass through the files: generate the per-file webrev HTML-files.
 #
 cat $FLIST | while read LINE
 do
         set - $LINE

@@ -3421,20 +3152,20 @@
 print "<table>"
 
 #
 # Get the preparer's name:
 #
-# If the SCM detected is Mercurial, and the configuration property
-# ui.username is available, use that, but be careful to properly escape
-# angle brackets (HTML syntax characters) in the email address.
+# If the SCM detected is Git, and the configuration property user.name is
+# available, use that, but be careful to properly escape angle brackets (HTML
+# syntax characters) in the email address.
 #
 # Otherwise, use the current userid in the form "John Doe (jdoe)", but
 # to maintain compatibility with passwd(4), we must support '&' substitutions.
 #
 preparer=
-if [[ "$SCM_MODE" == mercurial ]]; then
-        preparer=`hg showconfig ui.username 2>/dev/null`
+if [[ "$SCM_MODE" == git ]]; then
+        preparer=$(git config user.name 2>/dev/null)
         if [[ -n "$preparer" ]]; then
                 preparer="$(echo "$preparer" | html_quote)"
         fi
 fi
 if [[ -z "$preparer" ]]; then

@@ -3658,12 +3389,11 @@
         if [[ -f $F.count ]]; then
             cat $F.count
             rm $F.count
         fi
 
-        if [[ $SCM_MODE == "mercurial" ||
-            $SCM_MODE == "unknown" ]]; then
+        if [[ $SCM_MODE == "unknown" ]]; then
                 # Include warnings for important file mode situations:
                 # 1) New executable files
                 # 2) Permission changes of any kind
                 # 3) Existing executable files
                 old_mode=