##// END OF EJS Templates
sqlitestore: disable test with chg...
sqlitestore: disable test with chg There are known issues with transactions not being closed in a timely fashion, making the test flakey. Differential Revision: https://phab.mercurial-scm.org/D9821

File last commit:

r44339:c06eba91 default
r47042:9c35267f default
Show More
test-commit-interactive-curses.t
489 lines | 9.5 KiB | text/troff | Tads3Lexer
/ tests / test-commit-interactive-curses.t
FUJIWARA Katsunori
tests: add test-commit-interactive-curses.t "require tic" for test portability...
r30236 #require tic
Laurent Charignon
record: add tests for the curses recording interface
r24344 Set up a repo
Simon Farnsworth
ui: add new config flag for interface selection...
r28542 $ cp $HGRCPATH $HGRCPATH.pretest
Laurent Charignon
record: add tests for the curses recording interface
r24344 $ cat <<EOF >> $HGRCPATH
> [ui]
> interactive = true
Simon Farnsworth
crecord: use ui.interface to choose curses interface...
r28543 > interface = curses
Laurent Charignon
record: add tests for the curses recording interface
r24344 > [experimental]
> crecordtest = testModeCommands
> EOF
timeless
crecord: properly handle files with No newline at eof (issue5268)...
r29862 Record with noeol at eof (issue5268)
$ hg init noeol
$ cd noeol
$ printf '0' > a
$ printf '0\n' > b
$ hg ci -Aqm initial
$ printf '1\n0' > a
$ printf '1\n0\n' > b
$ cat <<EOF >testModeCommands
> c
> EOF
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit -i -m "add hunks" -d "0 0"
$ cd ..
Normal repo
Laurent Charignon
record: add tests for the curses recording interface
r24344 $ hg init a
$ cd a
Committing some changes but stopping on the way
$ echo "a" > a
$ hg add a
$ cat <<EOF >testModeCommands
Kyle Lippincott
crecord: add "x" alias for space, remove test-only "TOGGLE" alias...
r42770 > x
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Laurent Charignon
record: add tests for the curses recording interface
r24344 > EOF
$ hg commit -i -m "a" -d "0 0"
no changes to record
Philippe Pepiot
commit: return 1 for interactive commit with no changes (issue5397)...
r30157 [1]
Laurent Charignon
record: add tests for the curses recording interface
r24344 $ hg tip
changeset: -1:000000000000
tag: tip
user:
date: Thu Jan 01 00:00:00 1970 +0000
Committing some changes
$ cat <<EOF >testModeCommands
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Laurent Charignon
record: add tests for the curses recording interface
r24344 > EOF
$ hg commit -i -m "a" -d "0 0"
$ hg tip
changeset: 0:cb9a9f314b8b
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
Laurent Charignon
crecord: add dictionary to default return value of filterpatch...
r27321 Check that commit -i works with no changes
$ hg commit -i
no changes to record
Philippe Pepiot
commit: return 1 for interactive commit with no changes (issue5397)...
r30157 [1]
Laurent Charignon
crecord: add dictionary to default return value of filterpatch...
r27321
Laurent Charignon
record: add tests for the curses recording interface
r24344 Committing only one file
$ echo "a" >> a
Pulkit Goyal
py3: fix .write() calls in few tests...
r38097 >>> open('b', 'wb').write(b"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n") and None
Laurent Charignon
record: add tests for the curses recording interface
r24344 $ hg add b
$ cat <<EOF >testModeCommands
Kyle Lippincott
crecord: add "x" alias for space, remove test-only "TOGGLE" alias...
r42770 > x
Laurent Charignon
record: add tests for the curses recording interface
r24344 > KEY_DOWN
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Laurent Charignon
record: add tests for the curses recording interface
r24344 > EOF
$ hg commit -i -m "one file" -d "0 0"
$ hg tip
changeset: 1:fb2705a663ea
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: one file
$ hg cat -r tip a
a
$ cat a
a
a
Laurent Charignon
crecord: exit edition of hunk with non-zero status does not interrupt session...
r25557 Committing only one hunk while aborting edition of hunk
Laurent Charignon
record: add tests for the curses recording interface
r24344
- Untoggle all the hunks, go down to the second file
- unfold it
- go down to second hunk (1 for the first hunk, 1 for the first hunkline, 1 for the second hunk, 1 for the second hunklike)
- toggle the second hunk
Jordi GutiƩrrez Hermoso
crecord: repurpose "a" key to toggle all selections (BC)...
r44339 - toggle all lines twice (to check that it does nothing)
Mads Kiilerich
spelling: trivial spell checking
r26781 - edit the hunk and quit the editor immediately with non-zero status
Laurent Charignon
record: add tests for the curses recording interface
r24344 - commit
Laurent Charignon
crecord: exit edition of hunk with non-zero status does not interrupt session...
r25557 $ printf "printf 'editor ran\n'; exit 1" > editor.sh
Laurent Charignon
record: add tests for the curses recording interface
r24344 $ echo "x" > c
$ cat b >> c
$ echo "y" >> c
$ mv c b
$ cat <<EOF >testModeCommands
> A
> KEY_DOWN
> f
> KEY_DOWN
> KEY_DOWN
> KEY_DOWN
> KEY_DOWN
Kyle Lippincott
crecord: add "x" alias for space, remove test-only "TOGGLE" alias...
r42770 > x
Laurent Charignon
commit: add amend mode for commit -i...
r27156 > a
> a
Laurent Charignon
crecord: exit edition of hunk with non-zero status does not interrupt session...
r25557 > e
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Laurent Charignon
record: add tests for the curses recording interface
r24344 > EOF
Laurent Charignon
crecord: exit edition of hunk with non-zero status does not interrupt session...
r25557 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit -i -m "one hunk" -d "0 0"
editor ran
$ rm editor.sh
Laurent Charignon
record: add tests for the curses recording interface
r24344 $ hg tip
changeset: 2:7d10dfe755a8
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: one hunk
$ hg cat -r tip b
1
2
3
4
5
6
7
8
9
10
y
$ cat b
x
1
2
3
4
5
6
7
8
9
10
y
$ hg commit -m "other hunks"
$ hg tip
changeset: 3:a6735021574d
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: other hunks
$ hg cat -r tip b
x
1
2
3
4
5
6
7
8
9
10
y
Laurent Charignon
record_curses: add test for newly added files...
r24469 Newly added files can be selected with the curses interface
Laurent Charignon
record: add tests for the curses recording interface
r24344
Laurent Charignon
record_curses: add test for newly added files...
r24469 $ hg update -C .
Laurent Charignon
record: fix record with change on moved file crashes (issue4619)...
r24837 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
Laurent Charignon
record_curses: add test for newly added files...
r24469 $ echo "hello" > x
$ hg add x
$ cat <<EOF >testModeCommands
Kyle Lippincott
crecord: add "x" alias for space, remove test-only "TOGGLE" alias...
r42770 > x
> x
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Laurent Charignon
record_curses: add test for newly added files...
r24469 > EOF
$ hg st
A x
? testModeCommands
$ hg commit -i -m "newly added file" -d "0 0"
$ hg st
? testModeCommands
Jordi GutiƩrrez Hermoso
crecord: repurpose "a" key to toggle all selections (BC)...
r44339 Test toggling all selections works
- Change one line
- Add an extra line at the end
- Unselect all
- Select the extra line at the end
- Toggle all selections (so the extra line at the is unselected and the modified line is selected)
- Commit
Laurent Charignon
commit: add amend mode for commit -i...
r27156 $ echo "hello world" > x
Jordi GutiƩrrez Hermoso
crecord: repurpose "a" key to toggle all selections (BC)...
r44339 $ echo "goodbye world" >> x
$ hg diff
diff -r 2b0e9be4d336 x
--- a/x Thu Jan 01 00:00:00 1970 +0000
Laurent Charignon
commit: add amend mode for commit -i...
r27156 +++ b/x Thu Jan 01 00:00:00 1970 +0000
Jordi GutiƩrrez Hermoso
crecord: repurpose "a" key to toggle all selections (BC)...
r44339 @@ -1,1 +1,2 @@
-hello
+hello world
+goodbye world
Laurent Charignon
commit: add amend mode for commit -i...
r27156 $ cat <<EOF >testModeCommands
Jordi GutiƩrrez Hermoso
crecord: repurpose "a" key to toggle all selections (BC)...
r44339 > f
> j
> x
> j
> j
> j
> x
Laurent Charignon
commit: add amend mode for commit -i...
r27156 > a
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Laurent Charignon
commit: add amend mode for commit -i...
r27156 > EOF
Jordi GutiƩrrez Hermoso
crecord: repurpose "a" key to toggle all selections (BC)...
r44339 $ hg commit -i --amend -m "newly added file" -d "0 0" x
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 saved backup bundle to $TESTTMP/a/.hg/strip-backup/2b0e9be4d336-3cf0bc8c-amend.hg
Jordi GutiƩrrez Hermoso
crecord: repurpose "a" key to toggle all selections (BC)...
r44339 $ hg rev x --no-backup
Laurent Charignon
commit: add amend mode for commit -i...
r27156 $ hg diff -c .
diff -r a6735021574d -r c1d239d165ae x
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/x Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+hello world
Laurent Charignon
crecord: edit during hg crecord should preserve cursor position (issue5041)...
r27914
Jun Wu
crecord: fix line number in hunk header (issue5917)...
r38330 Make file empty
Augie Fackler
tests: replace `echo -n` with `printf` per check-code...
r38345 $ printf "" > x
Jun Wu
crecord: fix line number in hunk header (issue5917)...
r38330 $ cat <<EOF >testModeCommands
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Jun Wu
crecord: fix line number in hunk header (issue5917)...
r38330 > EOF
$ hg ci -i -m emptify -d "0 0"
$ hg update -C '.^' -q
Laurent Charignon
crecord: edit during hg crecord should preserve cursor position (issue5041)...
r27914 Editing a hunk puts you back on that hunk when done editing (issue5041)
To do that, we change two lines in a file, pretend to edit the second line,
exit, toggle the line selected at the end of the edit and commit.
The first line should be recorded if we were put on the second line at the end
of the edit.
$ hg update -C .
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo "foo" > x
$ echo "hello world" >> x
$ echo "bar" >> x
$ cat <<EOF >testModeCommands
> f
> KEY_DOWN
> KEY_DOWN
> KEY_DOWN
> KEY_DOWN
> e
Kyle Lippincott
crecord: add "x" alias for space, remove test-only "TOGGLE" alias...
r42770 > x
Kyle Lippincott
crecord: stop using test-only "X" as alternative for "c"...
r42769 > c
Laurent Charignon
crecord: edit during hg crecord should preserve cursor position (issue5041)...
r27914 > EOF
$ printf "printf 'editor ran\n'; exit 0" > editor.sh
Jun Wu
crecord: fix line number in hunk header (issue5917)...
r38330 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit -i -m "edit hunk" -d "0 0" -q
Laurent Charignon
crecord: edit during hg crecord should preserve cursor position (issue5041)...
r27914 editor ran
$ hg cat -r . x
foo
hello world
Jordi GutiƩrrez Hermoso
crecord: re-enable reviewing a patch before comitting it...
r28638 Testing the review option. The entire final filtered patch should show
up in the editor and be editable. We will unselect the second file and
the first hunk of the third file. During review, we will decide that
"lower" sounds better than "bottom", and the final commit should
reflect this edition.
Laurent Charignon
crecord: edit during hg crecord should preserve cursor position (issue5041)...
r27914
Jordi GutiƩrrez Hermoso
crecord: re-enable reviewing a patch before comitting it...
r28638 $ hg update -C .
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo "top" > c
$ cat x >> c
$ echo "bottom" >> c
$ mv c x
$ echo "third a" >> a
$ echo "we will unselect this" >> b
$ cat > editor.sh <<EOF
> cat "\$1"
> cat "\$1" | sed s/bottom/lower/ > tmp
> mv tmp "\$1"
> EOF
$ cat > testModeCommands <<EOF
> KEY_DOWN
Kyle Lippincott
crecord: add "x" alias for space, remove test-only "TOGGLE" alias...
r42770 > x
Jordi GutiƩrrez Hermoso
crecord: re-enable reviewing a patch before comitting it...
r28638 > KEY_DOWN
> f
> KEY_DOWN
Kyle Lippincott
crecord: add "x" alias for space, remove test-only "TOGGLE" alias...
r42770 > x
Jordi GutiƩrrez Hermoso
crecord: re-enable reviewing a patch before comitting it...
r28638 > R
> EOF
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit -i -m "review hunks" -d "0 0"
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed from the patch.
#
# If the patch applies cleanly, the edited patch will immediately
# be finalised. If it does not apply cleanly, rejects files will be
# generated. You can use those when you try again.
diff --git a/a b/a
--- a/a
+++ b/a
@@ -1,2 +1,3 @@
a
a
+third a
diff --git a/x b/x
--- a/x
+++ b/x
@@ -1,2 +1,3 @@
foo
hello world
+bottom
$ hg cat -r . a
a
a
third a
$ hg cat -r . b
x
1
2
3
4
5
6
7
8
9
10
y
$ hg cat -r . x
foo
hello world
lower
av6
tests: test experimental.spacemovesdown config for commit -i...
r30831
Kyle Lippincott
crecord: provide 'X' as a range-select mechanism...
r42773 Test range select: unselect 3, 5, and 6, reselect 5, then go back up to 2 and
press 'X', unselecting (because 2 is currently selected) 5 (because it's the
start of the range) and 4, leaving 3 unselected.
$ hg init $TESTTMP/range_select
$ cd $TESTTMP/range_select
>>> open('range_select', 'wb').write(b"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n") and None
$ hg add range_select
$ cat <<EOF >testModeCommands
> KEY_RIGHT
> KEY_RIGHT
> KEY_DOWN
> KEY_DOWN
> KEY_ENTER
> KEY_DOWN
> KEY_ENTER
> x
> KEY_UP
> x
> KEY_UP
> KEY_UP
> KEY_UP
> X
> c
> EOF
$ hg commit -i -m "range_select" -d "0 0"
$ hg cat -r tip range_select
1
7
8
9
10
$ cat range_select
1
2
3
4
5
6
7
8
9
10
Simon Farnsworth
ui: add new config flag for interface selection...
r28542 Check ui.interface logic for the chunkselector
The default interface is text
$ cp $HGRCPATH.pretest $HGRCPATH
$ chunkselectorinterface() {
Matt Harbison
tests: quote PYTHON usage...
r39743 > "$PYTHON" <<EOF
Gregory Szorc
tests: handles bytes/str mismatch in test-commit-interface-curses.t...
r41461 > from mercurial import hg, pycompat, ui;\
> repo = hg.repository(ui.ui.load(), b".");\
> print(pycompat.sysstr(repo.ui.interface(b"chunkselector")))
Simon Farnsworth
ui: add new config flag for interface selection...
r28542 > EOF
> }
$ chunkselectorinterface
text
If only the default is set, we'll use that for the feature, too
$ cp $HGRCPATH.pretest $HGRCPATH
$ cat <<EOF >> $HGRCPATH
> [ui]
> interface = curses
> EOF
$ chunkselectorinterface
curses
Kyle Lippincott
curses: use "text" interface if TERM=dumb...
r38749 If TERM=dumb, we use text, even if the config says curses
$ chunkselectorinterface
curses
$ TERM=dumb chunkselectorinterface
text
(Something is keeping TERM=dumb in the environment unless I do this, it's not
scoped to just that previous command like in many shells)
$ TERM=xterm chunkselectorinterface
curses
Simon Farnsworth
ui: add new config flag for interface selection...
r28542 It is possible to override the default interface with a feature specific
interface
$ cp $HGRCPATH.pretest $HGRCPATH
$ cat <<EOF >> $HGRCPATH
> [ui]
> interface = text
> interface.chunkselector = curses
> EOF
$ chunkselectorinterface
curses
$ cp $HGRCPATH.pretest $HGRCPATH
$ cat <<EOF >> $HGRCPATH
> [ui]
> interface = curses
> interface.chunkselector = text
> EOF
$ chunkselectorinterface
text
If a bad interface name is given, we use the default value (with a nice
error message to suggest that the configuration needs to be fixed)
$ cp $HGRCPATH.pretest $HGRCPATH
$ cat <<EOF >> $HGRCPATH
> [ui]
> interface = blah
> EOF
$ chunkselectorinterface
invalid value for ui.interface: blah (using text)
text
$ cp $HGRCPATH.pretest $HGRCPATH
$ cat <<EOF >> $HGRCPATH
> [ui]
> interface = curses
> interface.chunkselector = blah
> EOF
$ chunkselectorinterface
invalid value for ui.interface.chunkselector: blah (using curses)
curses
$ cp $HGRCPATH.pretest $HGRCPATH
$ cat <<EOF >> $HGRCPATH
> [ui]
> interface = blah
> interface.chunkselector = curses
> EOF
$ chunkselectorinterface
invalid value for ui.interface: blah
curses
$ cp $HGRCPATH.pretest $HGRCPATH
$ cat <<EOF >> $HGRCPATH
> [ui]
> interface = blah
> interface.chunkselector = blah
> EOF
$ chunkselectorinterface
invalid value for ui.interface: blah
invalid value for ui.interface.chunkselector: blah (using text)
text