##// END OF EJS Templates
rust: Parse "subinclude"d files along the way, not later...
rust: Parse "subinclude"d files along the way, not later When parsing a `.hgignore` file and encountering an `include:` line, the included file is parsed recursively right then in a depth-first fashion. With `subinclude:` however included files were parsed (recursively) much later. This changes it to be expanded during parsing, like `.hgignore`. The motivation for this is an upcoming changeset that needs to detect changes in which files are ignored or not. The plan is to hash all ignore files while they are being read, and store that hash in the dirstate (in v2 format). In order to allow a potential alternative implementations to read that format, the algorithm to compute that hash must be documented. Having a well-defined depth-first ordering for the tree of (sub-)included files makes that easier. Differential Revision: https://phab.mercurial-scm.org/D10834

File last commit:

r26804:61250290 default
r48170:f6bb181c default
Show More
editmerge
58 lines | 1.4 KiB | text/plain | TextLexer
#!/usr/bin/env bash
# A simple script for opening merge conflicts in the editor.
# Use the following Mercurial settings to enable it.
#
# [ui]
# merge = editmerge
#
# [merge-tools]
# editmerge.args=$output
# editmerge.check=changed
# editmerge.premerge=keep
FILE="$1"
getlines() {
grep -n "^<<<<<<" "$FILE" | cut -f1 -d:
}
# editor preference loosely based on https://mercurial-scm.org/wiki/editor
# hg showconfig is at the bottom though, since it's slow to run (0.15 seconds)
ED="$HGEDITOR"
if [ "$ED" = "" ] ; then
ED="$VISUAL"
fi
if [ "$ED" = "" ] ; then
ED="$EDITOR"
fi
if [ "$ED" = "" ] ; then
ED="$(hg showconfig ui.editor)"
fi
if [ "$ED" = "" ] ; then
echo "merge failed - unable to find editor"
exit 1
fi
if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then
FIRSTLINE="$(getlines | head -n 1)"
PREVIOUSLINE=""
# open the editor to the first conflict until there are no more
# or the user stops editing the file
while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do
$ED "+$FIRSTLINE" "$FILE"
PREVIOUSLINE="$FIRSTLINE"
FIRSTLINE="$(getlines | head -n 1)"
done
else
$ED "$FILE"
fi
# get the line numbers of the remaining conflicts
CONFLICTS="$(getlines | sed ':a;N;$!ba;s/\n/, /g')"
if [ ! "$CONFLICTS" = "" ] ; then
echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'"
exit 1
fi
exit 0