mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
e09288137b
Summary: Remove ui.progress as a method of updating progress. All progress bars now go through new-style progress bars. This also splits out the rendering of progress bars from the reporting of progress. All tests are updated to use new-style debug progress bars, which simply report the position of the progress bar. Rendering of progress bars will be tested separately once the progress bar engine has been rewritten. Reviewed By: quark-zju Differential Revision: D7329488 fbshipit-source-id: 14f8ab67365ddd98b74986aa25d9abc7a0546144
588 lines
12 KiB
Perl
588 lines
12 KiB
Perl
Test histedit extension: Fold commands
|
|
======================================
|
|
|
|
This test file is dedicated to testing the fold command in non conflicting
|
|
case.
|
|
|
|
Initialization
|
|
---------------
|
|
|
|
|
|
$ . "$TESTDIR/histedit-helpers.sh"
|
|
|
|
$ cat >> $HGRCPATH <<EOF
|
|
> [alias]
|
|
> logt = log --template '{rev}:{node|short} {desc|firstline}\n'
|
|
> [extensions]
|
|
> histedit=
|
|
> EOF
|
|
|
|
|
|
Simple folding
|
|
--------------------
|
|
$ addwithdate ()
|
|
> {
|
|
> echo $1 > $1
|
|
> hg add $1
|
|
> hg ci -m $1 -d "$2 0"
|
|
> }
|
|
|
|
$ initrepo ()
|
|
> {
|
|
> hg init r
|
|
> cd r
|
|
> addwithdate a 1
|
|
> addwithdate b 2
|
|
> addwithdate c 3
|
|
> addwithdate d 4
|
|
> addwithdate e 5
|
|
> addwithdate f 6
|
|
> }
|
|
|
|
$ initrepo
|
|
|
|
log before edit
|
|
$ hg logt --graph
|
|
@ 5:178e35e0ce73 f
|
|
|
|
|
o 4:1ddb6c90f2ee e
|
|
|
|
|
o 3:532247a8969b d
|
|
|
|
|
o 2:ff2c9fa2018b c
|
|
|
|
|
o 1:97d72e5f12c7 b
|
|
|
|
|
o 0:8580ff50825a a
|
|
|
|
|
|
$ hg histedit ff2c9fa2018b --commands - 2>&1 <<EOF | fixbundle
|
|
> pick 1ddb6c90f2ee e
|
|
> pick 178e35e0ce73 f
|
|
> fold ff2c9fa2018b c
|
|
> pick 532247a8969b d
|
|
> EOF
|
|
|
|
log after edit
|
|
$ hg logt --graph
|
|
@ 4:c4d7f3def76d d
|
|
|
|
|
o 3:575228819b7e f
|
|
|
|
|
o 2:505a591af19e e
|
|
|
|
|
o 1:97d72e5f12c7 b
|
|
|
|
|
o 0:8580ff50825a a
|
|
|
|
|
|
post-fold manifest
|
|
$ hg manifest
|
|
a
|
|
b
|
|
c
|
|
d
|
|
e
|
|
f
|
|
|
|
|
|
check histedit_source, including that it uses the later date, from the first changeset
|
|
|
|
$ hg log --debug --rev 3
|
|
changeset: 3:575228819b7e6ed69e8c0a6a383ee59a80db7358
|
|
phase: draft
|
|
parent: 2:505a591af19eed18f560af827b9e03d2076773dc
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 3:81eede616954057198ead0b2c73b41d1f392829a
|
|
user: test
|
|
date: Thu Jan 01 00:00:06 1970 +0000
|
|
files+: c f
|
|
extra: branch=default
|
|
extra: histedit_source=7cad1d7030207872dfd1c3a7cb430f24f2884086,ff2c9fa2018b15fa74b33363bda9527323e2a99f
|
|
description:
|
|
f
|
|
***
|
|
c
|
|
|
|
|
|
|
|
rollup will fold without preserving the folded commit's message or date
|
|
|
|
$ OLDHGEDITOR=$HGEDITOR
|
|
$ HGEDITOR=false
|
|
$ hg histedit 97d72e5f12c7 --commands - 2>&1 <<EOF | fixbundle
|
|
> pick 97d72e5f12c7 b
|
|
> roll 505a591af19e e
|
|
> pick 575228819b7e f
|
|
> pick c4d7f3def76d d
|
|
> EOF
|
|
|
|
$ HGEDITOR=$OLDHGEDITOR
|
|
|
|
log after edit
|
|
$ hg logt --graph
|
|
@ 3:bab801520cec d
|
|
|
|
|
o 2:58c8f2bfc151 f
|
|
|
|
|
o 1:5d939c56c72e b
|
|
|
|
|
o 0:8580ff50825a a
|
|
|
|
|
|
description is taken from rollup target commit
|
|
|
|
$ hg log --debug --rev 1
|
|
changeset: 1:5d939c56c72e77e29f5167696218e2131a40f5cf
|
|
phase: draft
|
|
parent: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 1:b5e112a3a8354e269b1524729f0918662d847c38
|
|
user: test
|
|
date: Thu Jan 01 00:00:02 1970 +0000
|
|
files+: b e
|
|
extra: branch=default
|
|
extra: histedit_source=97d72e5f12c7e84f85064aa72e5a297142c36ed9,505a591af19eed18f560af827b9e03d2076773dc
|
|
description:
|
|
b
|
|
|
|
|
|
|
|
check saving last-message.txt
|
|
|
|
$ cat > $TESTTMP/abortfolding.py <<EOF
|
|
> from mercurial import util
|
|
> def abortfolding(ui, repo, hooktype, **kwargs):
|
|
> ctx = repo[kwargs.get('node')]
|
|
> if set(ctx.files()) == {'c', 'd', 'f'}:
|
|
> return True # abort folding commit only
|
|
> ui.warn('allow non-folding commit\\n')
|
|
> EOF
|
|
$ cat > .hg/hgrc <<EOF
|
|
> [hooks]
|
|
> pretxncommit.abortfolding = python:$TESTTMP/abortfolding.py:abortfolding
|
|
> EOF
|
|
|
|
$ cat > $TESTTMP/editor.sh << EOF
|
|
> echo "==== before editing"
|
|
> cat \$1
|
|
> echo "===="
|
|
> echo "check saving last-message.txt" >> \$1
|
|
> EOF
|
|
|
|
$ rm -f .hg/last-message.txt
|
|
$ hg status --rev '58c8f2bfc151^1::bab801520cec'
|
|
A c
|
|
A d
|
|
A f
|
|
$ HGEDITOR="sh $TESTTMP/editor.sh" hg histedit 58c8f2bfc151 --commands - 2>&1 <<EOF
|
|
> pick 58c8f2bfc151 f
|
|
> fold bab801520cec d
|
|
> EOF
|
|
allow non-folding commit
|
|
==== before editing
|
|
f
|
|
***
|
|
c
|
|
***
|
|
d
|
|
|
|
|
|
|
|
HG: Enter commit message. Lines beginning with 'HG:' are removed.
|
|
HG: Leave message empty to abort commit.
|
|
HG: --
|
|
HG: user: test
|
|
HG: branch 'default'
|
|
HG: added c
|
|
HG: added d
|
|
HG: added f
|
|
====
|
|
transaction abort!
|
|
rollback completed
|
|
abort: pretxncommit.abortfolding hook failed
|
|
[255]
|
|
|
|
$ cat .hg/last-message.txt
|
|
f
|
|
***
|
|
c
|
|
***
|
|
d
|
|
|
|
|
|
|
|
check saving last-message.txt
|
|
|
|
$ cd ..
|
|
$ rm -r r
|
|
|
|
folding preserves initial author but uses later date
|
|
----------------------------------------------------
|
|
|
|
$ initrepo
|
|
|
|
$ hg ci -d '7 0' --user "someone else" --amend --quiet
|
|
|
|
tip before edit
|
|
$ hg log --rev .
|
|
changeset: 5:10c36dd37515
|
|
tag: tip
|
|
user: someone else
|
|
date: Thu Jan 01 00:00:07 1970 +0000
|
|
summary: f
|
|
|
|
|
|
$ hg --config progress.debug=1 --debug \
|
|
> histedit 1ddb6c90f2ee --commands - 2>&1 <<EOF | \
|
|
> egrep 'editing|unresolved'
|
|
> pick 1ddb6c90f2ee e
|
|
> fold 10c36dd37515 f
|
|
> EOF
|
|
progress: editing: pick 1ddb6c90f2ee 4 e 1/2 changes (50.00%)
|
|
progress: editing: fold 10c36dd37515 5 f 2/2 changes (100.00%)
|
|
progress: editing (end)
|
|
|
|
tip after edit, which should use the later date, from the second changeset
|
|
$ hg log --rev .
|
|
changeset: 4:e4f3ec5d0b40
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:07 1970 +0000
|
|
summary: e
|
|
|
|
|
|
$ cd ..
|
|
$ rm -r r
|
|
|
|
folding and creating no new change doesn't break:
|
|
-------------------------------------------------
|
|
|
|
folded content is dropped during a merge. The folded commit should properly disappear.
|
|
|
|
$ mkdir fold-to-empty-test
|
|
$ cd fold-to-empty-test
|
|
$ hg init
|
|
$ printf "1\n2\n3\n" > file
|
|
$ hg add file
|
|
$ hg commit -m '1+2+3'
|
|
$ echo 4 >> file
|
|
$ hg commit -m '+4'
|
|
$ echo 5 >> file
|
|
$ hg commit -m '+5'
|
|
$ echo 6 >> file
|
|
$ hg commit -m '+6'
|
|
$ hg logt --graph
|
|
@ 3:251d831eeec5 +6
|
|
|
|
|
o 2:888f9082bf99 +5
|
|
|
|
|
o 1:617f94f13c0f +4
|
|
|
|
|
o 0:0189ba417d34 1+2+3
|
|
|
|
|
|
$ hg histedit 1 --commands - << EOF
|
|
> pick 617f94f13c0f 1 +4
|
|
> drop 888f9082bf99 2 +5
|
|
> fold 251d831eeec5 3 +6
|
|
> EOF
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
merging file
|
|
warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
|
|
Fix up the change (fold 251d831eeec5)
|
|
(hg histedit --continue to resume)
|
|
[1]
|
|
There were conflicts, we keep P1 content. This
|
|
should effectively drop the changes from +6.
|
|
|
|
$ hg status -v
|
|
M file
|
|
? file.orig
|
|
# The repository is in an unfinished *histedit* state.
|
|
|
|
# Unresolved merge conflicts:
|
|
#
|
|
# file
|
|
#
|
|
# To mark files as resolved: hg resolve --mark FILE
|
|
|
|
# To continue: hg histedit --continue
|
|
# To abort: hg histedit --abort
|
|
|
|
$ hg resolve -l
|
|
U file
|
|
$ hg revert -r 'p1()' file
|
|
$ hg resolve --mark file
|
|
(no more unresolved files)
|
|
continue: hg histedit --continue
|
|
$ hg histedit --continue
|
|
251d831eeec5: empty changeset
|
|
saved backup bundle to $TESTTMP/fold-to-empty-test/.hg/strip-backup/888f9082bf99-daa0b8b3-histedit.hg
|
|
$ hg logt --graph
|
|
@ 1:617f94f13c0f +4
|
|
|
|
|
o 0:0189ba417d34 1+2+3
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
Test fold through dropped
|
|
-------------------------
|
|
|
|
|
|
Test corner case where folded revision is separated from its parent by a
|
|
dropped revision.
|
|
|
|
|
|
$ hg init fold-with-dropped
|
|
$ cd fold-with-dropped
|
|
$ printf "1\n2\n3\n" > file
|
|
$ hg commit -Am '1+2+3'
|
|
adding file
|
|
$ echo 4 >> file
|
|
$ hg commit -m '+4'
|
|
$ echo 5 >> file
|
|
$ hg commit -m '+5'
|
|
$ echo 6 >> file
|
|
$ hg commit -m '+6'
|
|
$ hg logt -G
|
|
@ 3:251d831eeec5 +6
|
|
|
|
|
o 2:888f9082bf99 +5
|
|
|
|
|
o 1:617f94f13c0f +4
|
|
|
|
|
o 0:0189ba417d34 1+2+3
|
|
|
|
$ hg histedit 1 --commands - << EOF
|
|
> pick 617f94f13c0f 1 +4
|
|
> drop 888f9082bf99 2 +5
|
|
> fold 251d831eeec5 3 +6
|
|
> EOF
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
merging file
|
|
warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
|
|
Fix up the change (fold 251d831eeec5)
|
|
(hg histedit --continue to resume)
|
|
[1]
|
|
$ cat > file << EOF
|
|
> 1
|
|
> 2
|
|
> 3
|
|
> 4
|
|
> 5
|
|
> EOF
|
|
$ hg resolve --mark file
|
|
(no more unresolved files)
|
|
continue: hg histedit --continue
|
|
$ hg commit -m '+5.2'
|
|
$ echo 6 >> file
|
|
$ HGEDITOR=cat hg histedit --continue
|
|
+4
|
|
***
|
|
+5.2
|
|
***
|
|
+6
|
|
|
|
|
|
|
|
HG: Enter commit message. Lines beginning with 'HG:' are removed.
|
|
HG: Leave message empty to abort commit.
|
|
HG: --
|
|
HG: user: test
|
|
HG: branch 'default'
|
|
HG: changed file
|
|
saved backup bundle to $TESTTMP/fold-with-dropped/.hg/strip-backup/617f94f13c0f-3d69522c-histedit.hg
|
|
$ hg logt -G
|
|
@ 1:10c647b2cdd5 +4
|
|
|
|
|
o 0:0189ba417d34 1+2+3
|
|
|
|
$ hg export tip
|
|
# HG changeset patch
|
|
# User test
|
|
# Date 0 0
|
|
# Thu Jan 01 00:00:00 1970 +0000
|
|
# Node ID 10c647b2cdd54db0603ecb99b2ff5ce66d5a5323
|
|
# Parent 0189ba417d34df9dda55f88b637dcae9917b5964
|
|
+4
|
|
***
|
|
+5.2
|
|
***
|
|
+6
|
|
|
|
diff -r 0189ba417d34 -r 10c647b2cdd5 file
|
|
--- a/file Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/file Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -1,3 +1,6 @@
|
|
1
|
|
2
|
|
3
|
|
+4
|
|
+5
|
|
+6
|
|
$ cd ..
|
|
|
|
|
|
Folding with initial rename (issue3729)
|
|
---------------------------------------
|
|
|
|
$ hg init fold-rename
|
|
$ cd fold-rename
|
|
$ echo a > a.txt
|
|
$ hg add a.txt
|
|
$ hg commit -m a
|
|
$ hg rename a.txt b.txt
|
|
$ hg commit -m rename
|
|
$ echo b >> b.txt
|
|
$ hg commit -m b
|
|
|
|
$ hg logt --follow b.txt
|
|
2:e0371e0426bc b
|
|
1:1c4f440a8085 rename
|
|
0:6c795aa153cb a
|
|
|
|
$ hg histedit 1c4f440a8085 --commands - 2>&1 << EOF | fixbundle
|
|
> pick 1c4f440a8085 rename
|
|
> fold e0371e0426bc b
|
|
> EOF
|
|
|
|
$ hg logt --follow b.txt
|
|
1:cf858d235c76 rename
|
|
0:6c795aa153cb a
|
|
|
|
$ cd ..
|
|
|
|
Folding with swapping
|
|
---------------------
|
|
|
|
This is an excuse to test hook with histedit temporary commit (issue4422)
|
|
|
|
|
|
$ hg init issue4422
|
|
$ cd issue4422
|
|
$ echo a > a.txt
|
|
$ hg add a.txt
|
|
$ hg commit -m a
|
|
$ echo b > b.txt
|
|
$ hg add b.txt
|
|
$ hg commit -m b
|
|
$ echo c > c.txt
|
|
$ hg add c.txt
|
|
$ hg commit -m c
|
|
|
|
$ hg logt
|
|
2:a1a953ffb4b0 c
|
|
1:199b6bb90248 b
|
|
0:6c795aa153cb a
|
|
|
|
Setup the proper environment variable symbol for the platform, to be subbed
|
|
into the hook command.
|
|
#if windows
|
|
$ NODE="%HG_NODE%"
|
|
#else
|
|
$ NODE="\$HG_NODE"
|
|
#endif
|
|
$ hg histedit 6c795aa153cb --config hooks.commit="echo commit $NODE" --commands - 2>&1 << EOF | fixbundle
|
|
> pick 199b6bb90248 b
|
|
> fold a1a953ffb4b0 c
|
|
> pick 6c795aa153cb a
|
|
> EOF
|
|
commit 9599899f62c05f4377548c32bf1c9f1a39634b0c
|
|
|
|
$ hg logt
|
|
1:9599899f62c0 a
|
|
0:79b99e9c8e49 b
|
|
|
|
$ echo "foo" > amended.txt
|
|
$ hg add amended.txt
|
|
$ hg ci -q --amend -I amended.txt
|
|
|
|
Test that folding multiple changes in a row doesn't show multiple
|
|
editors.
|
|
|
|
$ echo foo >> foo
|
|
$ hg add foo
|
|
$ hg ci -m foo1
|
|
$ echo foo >> foo
|
|
$ hg ci -m foo2
|
|
$ echo foo >> foo
|
|
$ hg ci -m foo3
|
|
$ hg logt
|
|
4:21679ff7675c foo3
|
|
3:b7389cc4d66e foo2
|
|
2:0e01aeef5fa8 foo1
|
|
1:578c7455730c a
|
|
0:79b99e9c8e49 b
|
|
$ cat > "$TESTTMP/editor.sh" <<EOF
|
|
> echo ran editor >> "$TESTTMP/editorlog.txt"
|
|
> cat \$1 >> "$TESTTMP/editorlog.txt"
|
|
> echo END >> "$TESTTMP/editorlog.txt"
|
|
> echo merged foos > \$1
|
|
> EOF
|
|
$ HGEDITOR="sh \"$TESTTMP/editor.sh\"" hg histedit 1 --commands - 2>&1 <<EOF | fixbundle
|
|
> pick 578c7455730c 1 a
|
|
> pick 0e01aeef5fa8 2 foo1
|
|
> fold b7389cc4d66e 3 foo2
|
|
> fold 21679ff7675c 4 foo3
|
|
> EOF
|
|
$ hg logt
|
|
2:e8bedbda72c1 merged foos
|
|
1:578c7455730c a
|
|
0:79b99e9c8e49 b
|
|
Editor should have run only once
|
|
$ cat $TESTTMP/editorlog.txt
|
|
ran editor
|
|
foo1
|
|
***
|
|
foo2
|
|
***
|
|
foo3
|
|
|
|
|
|
|
|
HG: Enter commit message. Lines beginning with 'HG:' are removed.
|
|
HG: Leave message empty to abort commit.
|
|
HG: --
|
|
HG: user: test
|
|
HG: branch 'default'
|
|
HG: added foo
|
|
END
|
|
|
|
$ cd ..
|
|
|
|
Test rolling into a commit with multiple children (issue5498)
|
|
|
|
$ hg init roll
|
|
$ cd roll
|
|
$ echo a > a
|
|
$ hg commit -qAm aa
|
|
$ echo b > b
|
|
$ hg commit -qAm bb
|
|
$ hg up -q ".^"
|
|
$ echo c > c
|
|
$ hg commit -qAm cc
|
|
$ hg log -G -T '{node|short} {desc}'
|
|
@ 5db65b93a12b cc
|
|
|
|
|
| o 301d76bdc3ae bb
|
|
|/
|
|
o 8f0162e483d0 aa
|
|
|
|
|
|
$ hg histedit . --commands - << EOF
|
|
> r 5db65b93a12b
|
|
> EOF
|
|
hg: parse error: first changeset cannot use verb "roll"
|
|
[255]
|
|
$ hg log -G -T '{node|short} {desc}'
|
|
@ 5db65b93a12b cc
|
|
|
|
|
| o 301d76bdc3ae bb
|
|
|/
|
|
o 8f0162e483d0 aa
|
|
|
|
|