hgeditor
author Stefano Tortarolo <stefano.tortarolo@gmail.com>
Wed, 23 Mar 2011 01:14:43 +0100
changeset 13733 4e2690a764c1
parent 11266 2b440bb8a66b
child 26781 1aee2ab0f902
permissions -rwxr-xr-x
rebase: allow for rebasing descendants onto ancestors on different named branches So far we've been denying rebasing descendants onto ancestors, but there are situations in which this kind of operation makes perfect sense to me. Let's say we have made a commit (or more), that belongs to branch 'dev', on top of the named branch 'stable': ... a (stable) - b (dev) but then we realize that b should belong to branch 'stable'. In these cases a rebase means: "move these csets from named branch A to named branch B" and there isn't a valid reason to deny it. This patch basically doesn't block it, if source and destination are on different named branches. The old behaviour still applies for rebases across the same named branch. Can you think of any tricky corner cases in which this new behaviour could lead to problems? (I bet there are tons of them...) By the way, I created a brand new .t because I feel there should be more tests I can't think of at the moment.

#!/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 $?