Mercurial > hg
view tests/test-mq-qpush-exact.t @ 33003:f63d111258da
revset: add startdepth limit to ancestors() as internal option
This is necessary to implement the set{gen} (set subscript) operator. For
example, set{-n} will be translated to ancestors(set, depth=n, startdepth=n).
https://www.mercurial-scm.org/wiki/RevsetOperatorPlan#ideas_from_mpm
The UI is undecided and I doubt if the startdepth option would be actually
useful, so the option is hidden for now. 'depth' could be extended to take
min:max range, in which case, integer depth should select a single generation.
ancestors(set, depth=:y) # scan up to y-th generation
ancestors(set, depth=x:) # skip until (x-1)-th generation
ancestors(set, depth=x) # select only x-th generation
Any ideas are welcomed.
# reverse(ancestors(tip)) using hg repo
3) 0.075951
4) 0.076175
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 18 Jun 2017 00:40:58 +0900 |
parents | bbf544b5f2e9 |
children |
line wrap: on
line source
$ echo "[extensions]" >> $HGRCPATH $ echo "mq=" >> $HGRCPATH make a test repository that looks like this: o 2:28bc7b1afd6a | | @ 1:d7fe2034f71b |/ o 0/62ecad8b70e5 $ hg init r0 $ cd r0 $ touch f0 $ hg ci -m0 -Aq $ touch f1 $ hg ci -m1 -Aq $ hg update 0 -q $ touch f2 $ hg ci -m2 -Aq $ hg update 1 -q make some patches with a parent: 1:d7fe2034f71b -> p0 -> p1 $ echo cp0 >> fp0 $ hg add fp0 $ hg ci -m p0 -d "0 0" $ hg export -r. > p0 $ hg strip -qn . $ hg qimport p0 adding p0 to series file $ hg qpush applying p0 now at: p0 $ echo cp1 >> fp1 $ hg add fp1 $ hg qnew p1 -d "0 0" $ hg qpop -aq patch queue now empty qpush --exact when at the parent $ hg update 1 -q $ hg qpush -e applying p0 now at: p0 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg qpush -e p0 applying p0 now at: p0 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg qpush -e p1 applying p0 applying p1 now at: p1 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty qpush --exact when at another rev $ hg update 0 -q $ hg qpush -e 1 files updated, 0 files merged, 0 files removed, 0 files unresolved applying p0 now at: p0 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg update 0 -q $ hg qpush -e p0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved applying p0 now at: p0 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg update 0 -q $ hg qpush -e p1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved applying p0 applying p1 now at: p1 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg update 0 -q $ hg qpush -ea 1 files updated, 0 files merged, 0 files removed, 0 files unresolved applying p0 applying p1 now at: p1 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty qpush --exact while crossing branches $ hg update 2 -q $ hg qpush -e 1 files updated, 0 files merged, 1 files removed, 0 files unresolved applying p0 now at: p0 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg update 2 -q $ hg qpush -e p0 1 files updated, 0 files merged, 1 files removed, 0 files unresolved applying p0 now at: p0 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg update 2 -q $ hg qpush -e p1 1 files updated, 0 files merged, 1 files removed, 0 files unresolved applying p0 applying p1 now at: p1 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty $ hg update 2 -q $ hg qpush -ea 1 files updated, 0 files merged, 1 files removed, 0 files unresolved applying p0 applying p1 now at: p1 $ hg parents -qr qbase 1:d7fe2034f71b $ hg qpop -aq patch queue now empty qpush --exact --force with changes to an unpatched file $ hg update 1 -q $ echo c0 >> f0 $ hg qpush -e abort: local changes found [255] $ hg qpush -ef applying p0 now at: p0 $ cat f0 c0 $ rm f0 $ touch f0 $ hg qpop -aq patch queue now empty $ hg update 1 -q $ echo c0 >> f0 $ hg qpush -e p1 abort: local changes found [255] $ hg qpush -e p1 -f applying p0 applying p1 now at: p1 $ cat f0 c0 $ rm f0 $ touch f0 $ hg qpop -aq patch queue now empty qpush --exact --force with changes to a patched file $ hg update 1 -q $ echo cp0-bad >> fp0 $ hg add fp0 $ hg qpush -e abort: local changes found [255] $ hg qpush -ef applying p0 file fp0 already exists 1 out of 1 hunks FAILED -- saving rejects to file fp0.rej patch failed, unable to continue (try -v) patch failed, rejects left in working directory errors during apply, please fix and qrefresh p0 [2] $ cat fp0 cp0-bad $ cat fp0.rej --- fp0 +++ fp0 @@ -0,0 +1,1 @@ +cp0 $ hg qpop -aqf patch queue now empty $ rm fp0 $ rm fp0.rej $ hg update 1 -q $ echo cp1-bad >> fp1 $ hg add fp1 $ hg qpush -e p1 abort: local changes found [255] $ hg qpush -e p1 -f applying p0 applying p1 file fp1 already exists 1 out of 1 hunks FAILED -- saving rejects to file fp1.rej patch failed, unable to continue (try -v) patch failed, rejects left in working directory errors during apply, please fix and qrefresh p1 [2] $ cat fp1 cp1-bad $ cat fp1.rej --- fp1 +++ fp1 @@ -0,0 +1,1 @@ +cp1 $ hg qpop -aqf patch queue now empty $ hg forget fp1 $ rm fp1 $ rm fp1.rej qpush --exact when already at a patch $ hg update 1 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg qpush -e p0 applying p0 now at: p0 $ hg qpush -e p1 abort: cannot push --exact with applied patches [255] $ hg qpop -aq patch queue now empty qpush --exact --move should fail $ hg qpush -e --move p1 abort: cannot use --exact and --move together [255] qpush --exact a patch without a parent recorded $ hg qpush -q now at: p0 $ grep -v '# Parent' .hg/patches/p0 > p0.new $ mv p0.new .hg/patches/p0 $ hg qpop -aq patch queue now empty $ hg qpush -e abort: p0 does not have a parent recorded [255] $ hg qpush -e p0 abort: p0 does not have a parent recorded [255] $ hg qpush -e p1 abort: p0 does not have a parent recorded [255] $ hg qpush -ea abort: p0 does not have a parent recorded [255] $ cd ..