hgeditor
author Martin von Zweigbergk <martinvonz@google.com>
Mon, 07 Dec 2015 20:43:24 -0800
changeset 27316 777f668eca70
parent 26781 1aee2ab0f902
permissions -rwxr-xr-x
merge: refuse update/merge if there are unresolved conflicts (BC) We currently allow updating and merging (with --force) when there are unresolved merge conflicts, as long as there is only one parent of the working copy. Even worse, when updating to another revision (linearly), if one of the unresolved files (including any conflict markers in the working copy) can now be merged cleanly with the target revision, the file becomes marked as resolved. While we could potentially allow updates that affect only files that are not in the set of unresolved files, that's considerably more work, and we don't have a use case for it anyway. Instead, let's keep it simple and refuse any merge or update (without -C) when there are unresolved conflicts. Note that test-merge-local.t explicitly checks for conflict markers that get carried over on update. It's unclear if that was intentional or not, but it seems bad enough that we should forbid it. The simplest way of fixing the test case is to leave the conflict markers in place and just mark the files resolved, so let's just do that for now.

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

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