merge: allow smarter tool configuration
Add [merge-tool] hgrc section with:
<tool>.executable = name or path (<tool>)
<tool>.args = args with $local/base/other/output ($local $base $other)
<tool>.priority = priority (default 0)
<tool>.binary = handles binary (False)
<tool>.symlink = handles symlinks (False)
<tool>.checkconflict = check for conflict markers (False)
<tool>.premerge = try internal simplemerge (True if not binary or symlink)
Four built-in tools: internal:{merge,local,other,fail}
Add [merge-patterns] section of the form:
<pattern> = <tool>
Priority of settings is:
HGMERGE
merge-patterns
ui:merge
merge-tools by priority
hgmerge, if it can be found
Changes:
unsuccessful merges leave .orig files
#!/bin/sh
# test parents command
hg init repo
cd repo
echo % no working directory
hg parents
echo a > a
echo b > b
hg ci -Amab -d '0 0'
echo a >> a
hg ci -Ama -d '1 0'
echo b >> b
hg ci -Amb -d '2 0'
echo c > c
hg ci -Amc -d '3 0'
hg up -C 1
echo d > c
hg ci -Amc2 -d '4 0'
hg up -C 3
echo % hg parents
hg parents
echo % hg parents a
hg parents a
echo % hg parents c, single revision
hg parents c
echo % hg parents -r 3 c
hg parents -r 3 c
echo % hg parents -r 2
hg parents -r 2
echo % hg parents -r 2 a
hg parents -r 2 a
echo % hg parents -r 2 ../a
hg parents -r 2 ../a
echo '% cd dir; hg parents -r 2 ../a'
mkdir dir
cd dir
hg parents -r 2 ../a
echo '% hg parents -r 2 path:a'
hg parents -r 2 path:a
echo '% hg parents -r 2 glob:a'
cd ..
hg parents -r 2 glob:a
echo % merge working dir with 2 parents, hg parents c
HGMERGE=true hg merge
hg parents c
echo % merge working dir with 1 parent, hg parents
hg up -C 2
HGMERGE=true hg merge -r 4
hg parents
echo % merge working dir with 1 parent, hg parents c
hg parents c
true