view hgeditor @ 18853:78d760aa3607

duplicatecopies: do not mark items not in the dirstate as copies Consider the following repo: 0 -- 1 (renames a to b) \ - 2 If we're rebasing 2 onto 1, then duplicatecopies is called with arguments (2, 1). copies.pathcopies goes backwards from 1 to 0 and returns the pair dst = a, src = b. Of course, since we're working on top of 2, at this point a doesn't exist in the dirstate. Extra entries in the copymap are currently harmless because the copymap is only queried for items in the dirstate map. However, if the dirstate.copy method becomes one of the sources used to determine which files have changed, this will prove problematic. Note that we can't avoid going backwards in general -- consider this repo: 0 -- 1 (renames a to b) \ - 2 (renames a to c) Rebasing 2 onto 1 should produce a rename from b to c.
author Siddharth Agarwal <sid0@fb.com>
date Thu, 28 Mar 2013 18:27:19 -0700
parents 2b440bb8a66b
children 1aee2ab0f902
line wrap: on
line source

#!/bin/sh
#
# This is an example of using HGEDITOR to create of diff to review the
# changes while commiting.

# If you want to pass your favourite editor some other parameters
# only for Mercurial, modify this:
case "${EDITOR}" in
    "")
        EDITOR="vi"
        ;;
    emacs)
        EDITOR="$EDITOR -nw"
        ;;
    gvim|vim)
        EDITOR="$EDITOR -f -o"
        ;;
esac


HGTMP=""
cleanup_exit() {
    rm -rf "$HGTMP"
}

# Remove temporary files even if we get interrupted
trap "cleanup_exit" 0 # normal exit
trap "exit 255" HUP INT QUIT ABRT TERM

HGTMP=$(mktemp -d ${TMPDIR-/tmp}/hgeditor.XXXXXX)
[ x$HGTMP != x -a -d $HGTMP ] || {
  echo "Could not create temporary directory! Exiting." 1>&2
  exit 1
}

(
    grep '^HG: changed' "$1" | cut -b 13- | while read changed; do
        "$HG" diff "$changed" >> "$HGTMP/diff"
    done
)

cat "$1" > "$HGTMP/msg"

MD5=$(which md5sum 2>/dev/null) || \
    MD5=$(which md5 2>/dev/null)
[ -x "${MD5}" ] && CHECKSUM=`${MD5} "$HGTMP/msg"`
if [ -s "$HGTMP/diff" ]; then
    $EDITOR "$HGTMP/msg" "$HGTMP/diff" || exit $?
else
    $EDITOR "$HGTMP/msg" || exit $?
fi
[ -x "${MD5}" ] && (echo "$CHECKSUM" | ${MD5} -c >/dev/null 2>&1 && exit 13)

mv "$HGTMP/msg" "$1"

exit $?