Mercurial > hg
view tests/test-rebase-mq @ 8849:80cc4b1a62d0
compare grep result between target and its parent
I found that typical case is that grep target is added at (*) revision
in the tree shown below.
+--- 1(*) --- 3
0
+--- 2 ------ 4
Now, I expect 'hg grep --all' to show only rev:1 which is first
appearance of target line.
But 'hg grep --all' will tell:
target line dis-appeared at 3 => 4
target line appeared at 2 => 3
target line dis-appeared at 1 => 2
target line appeared at 0 => 1
because current 'hg grep' implementation compares not between target
revision and its parent, but between neighbor revisions in walkthrough
order.
I checked performance of this patch by "hg grep --follow --all
walkchangerevs" on whole Mercurial repo, and patched version could
complete as fast as un-patched one.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Tue, 19 May 2009 16:49:54 +0900 |
parents | 8766fee6f225 |
children | 8cb81d75730c |
line wrap: on
line source
#!/bin/sh echo "[extensions]" >> $HGRCPATH echo "graphlog=" >> $HGRCPATH echo "rebase=" >> $HGRCPATH echo "mq=" >> $HGRCPATH filterpatch() { sed -e "s/^\(# Date\).*/\1/" \ -e "s/^\(# Node ID\).*/\1/" \ -e "s/^\(# Parent\).*/\1/" \ -e "s/^\(diff -r \)\([a-f0-9]* \)\(-r \)\([a-f0-9]* \)/\1x \3y /" \ -e "s/^\(diff -r \)\([a-f0-9]* \)/\1x /" \ -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" \ -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" } hg init a cd a hg qinit -c # This must work even with a managed mq queue echo 'c1' > f hg add f hg commit -d '0 0' -m "C1" echo 'r1' > f hg commit -d '2 0' -m "R1" hg up 0 hg qnew f.patch echo 'mq1' > f hg qref -m 'P0' hg qnew f2.patch echo 'mq2' > f hg qref -m 'P1' hg glog --template '{rev} {desc} tags: {tags}\n' echo echo '% Rebase - try to rebase on an applied mq patch' hg rebase -s 1 -d 3 echo echo '% Rebase - generate a conflict' hg rebase -s 2 -d 1 echo echo '% Fix the 1st conflict' echo 'mq1r1' > f hg resolve -m f hg rebase -c 2>&1 | sed -e 's/\(saving bundle to \).*/\1/' echo echo '% Fix the 2nd conflict' echo 'mq1r1mq2' > f hg resolve -m f hg rebase -c 2>&1 | sed -e 's/\(saving bundle to \).*/\1/' hg glog --template '{rev} {desc} tags: {tags}\n' echo echo '% Update to qbase' hg up qbase echo '% f correctly reflects the merge result' cat f echo '% And the patch is correct' cat .hg/patches/f.patch | filterpatch echo echo '% Update to qtip' hg up qtip echo '% f correctly reflects the merge result' cat f echo '% And the patch is correct' cat .hg/patches/f2.patch | filterpatch echo echo '% Adding one git-style patch and one normal' hg qpop -a rm -fr .hg/patches hg qinit -c hg up 0 hg qnew --git f_git.patch echo 'mq1' > p hg add p hg qref --git -m 'P0 (git)' hg qnew f.patch echo 'mq2' > p hg qref -m 'P1' echo '% Git patch' cat .hg/patches/f_git.patch | filterpatch echo echo '% Normal patch' cat .hg/patches/f.patch | filterpatch echo echo '% Rebase the applied mq patches' hg rebase -s 2 -d 1 --quiet 2>&1 | sed -e 's/\(saving bundle to \).*/\1/' echo '% And the patches are correct' echo '% Git patch' cat .hg/patches/f_git.patch | filterpatch echo echo '% Normal patch' cat .hg/patches/f.patch | filterpatch