view tests/test-git-export @ 10397:8cb81d75730c

mq: add parent node IDs to MQ patches on qrefresh/qnew The goal of this patch is to add the IDs of the parents of applied MQ patches into the patch file headers whenever qnew or qrefresh are run. This will serve as a reminder of when the patches last applied cleanly and will let us do more intelligent things in the future, such as: * Resolve conflicts found when qpushing to a new location by merging instead of simply showing rejects. * Display better diffs of versioned MQ patches because we can tell how the patched files have changed in the meantime. Here are the new rules this patch introduces. They are checked in this order: * If a patch currently has old, plain-style patch headers ("From:" and "Date:") do not change the style or add any new headers. * If the 'mq.plain' configuration setting is true, only plain-style headers will be used for all MQ patches. * qnew will initialize new patches with HG-style headers and fill in the "# Parent" header with the appropriate parent node. * qrefresh will refresh the "# Parent" header with the current parent of the current patch.
author Steve Losh <steve@stevelosh.com>
date Sun, 07 Feb 2010 10:47:54 -0500
parents 6c82beaaa11a
children
line wrap: on
line source

#!/bin/sh

hg init a
cd a

echo start > start
hg ci -Amstart
echo new > new
hg ci -Amnew
echo '% new file'
hg diff --git -r 0

hg cp new copy
hg ci -mcopy
echo '% copy'
hg diff --git -r 1:tip

hg mv copy rename
hg ci -mrename
echo '% rename'
hg diff --git -r 2:tip

hg rm rename
hg ci -mdelete
echo '% delete'
hg diff --git -r 3:tip

cat > src <<EOF
1
2
3
4
5
EOF
hg ci -Amsrc
chmod +x src
hg ci -munexec
echo '% chmod 644'
hg diff --git -r 5:tip

hg mv src dst
chmod -x dst
echo a >> dst
hg ci -mrenamemod
echo '% rename+mod+chmod'
hg diff --git -r 6:tip

echo '% nonexistent in tip+chmod'
hg diff --git -r 5:6

echo '% binary diff'
cp $TESTDIR/binfile.bin .
hg add binfile.bin
hg diff --git > b.diff
cat b.diff

echo '% import binary diff'
hg revert binfile.bin
rm binfile.bin
hg import -mfoo b.diff
cmp binfile.bin $TESTDIR/binfile.bin

echo
echo '% rename binary file'
hg mv binfile.bin renamed.bin
hg diff --git

echo
echo '% diff across many revisions'
hg mv dst dst2
hg ci -m 'mv dst dst2'

echo >> start
hg ci -m 'change start'

hg revert -r -2 start
hg mv dst2 dst3
hg ci -m 'mv dst2 dst3; revert start'

hg diff --git -r 9:11
echo '%  reversed'
hg diff --git -r 11:9

echo a >> foo
hg add foo
hg ci -m 'add foo'
echo b >> foo
hg ci -m 'change foo'
hg mv foo bar
hg ci -m 'mv foo bar'
echo c >> bar
hg ci -m 'change bar'

echo
echo '% file created before r1 and renamed before r2'
hg diff --git -r -3:-1
echo '%  reversed'
hg diff --git -r -1:-3
echo
echo '% file created in r1 and renamed before r2'
hg diff --git -r -4:-1
echo '%  reversed'
hg diff --git -r -1:-4
echo
echo '% file created after r1 and renamed before r2'
hg diff --git -r -5:-1
echo '%  reversed'
hg diff --git -r -1:-5

echo
echo '% comparing with the working dir'
echo >> start
hg ci -m 'change start again'

echo > created
hg add created
hg ci -m 'add created'

hg mv created created2
hg ci -m 'mv created created2'

hg mv created2 created3
echo "% there's a copy in the working dir..."
hg diff --git
echo
echo "% ...but there's another copy between the original rev and the wd"
hg diff --git -r -2
echo
echo "% ...but the source of the copy was created after the original rev"
hg diff --git -r -3
hg ci -m 'mv created2 created3'

echo > brand-new
hg add brand-new
hg ci -m 'add brand-new'
hg mv brand-new brand-new2
echo '% created in parent of wd; renamed in the wd'
hg diff --git

echo
echo '% created between r1 and parent of wd; renamed in the wd'
hg diff --git -r -2
hg ci -m 'mv brand-new brand-new2'

echo '% one file is copied to many destinations and removed'
hg cp brand-new2 brand-new3
hg mv brand-new2 brand-new3-2
hg ci -m 'multiple renames/copies'
hg diff --git -r -2 -r -1
echo '%  reversed'
hg diff --git -r -1 -r -2

echo '% there should be a trailing TAB if there are spaces in the file name'
echo foo > 'with spaces'
hg add 'with spaces'
hg diff --git
hg ci -m 'add filename with spaces'