tests/test-uncommit-interactive.t
branchmercurial-4.2
changeset 3274 ddbb4d069203
parent 3273 c0ee9ddfd5ff
parent 3188 4cc1057970a2
child 3275 875de4816c5b
child 3288 b714709afe6a
--- a/tests/test-uncommit-interactive.t	Mon Dec 11 09:33:04 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,908 +0,0 @@
-================================================
-||  The test for `hg uncommit --interactive`  ||
-================================================
-
-Repo Setup
-============
-
-  $ . $TESTDIR/testlib/common.sh
-  $ cat >> $HGRCPATH <<EOF
-  > [ui]
-  > interactive = true
-  > [extensions]
-  > evolve =
-  > EOF
-
-  $ glog() {
-  >   hg log -G --template '{rev}:{node|short}@{branch}({separate("/", obsolete, phase)}) {desc|firstline}\n' "$@"
-  > }
-
-  $ hg init repo
-  $ cd repo
-
-  $ touch a
-  $ cat >> a << EOF
-  > 1
-  > 2
-  > 3
-  > 4
-  > 5
-  > EOF
-
-  $ hg add a
-  $ hg ci -m "The base commit"
-
-Make sure aborting the interactive selection does no magic
-----------------------------------------------------------
-
-  $ hg status
-  $ hg uncommit -i<<EOF
-  > q
-  > EOF
-  diff --git a/a b/a
-  new file mode 100644
-  examine changes to 'a'? [Ynesfdaq?] q
-  
-  abort: user quit
-  [255]
-  $ hg status
-
-Make a commit with multiple hunks
----------------------------------
-
-  $ cat > a << EOF
-  > -2
-  > -1
-  > 0
-  > 1
-  > 2
-  > 3
-  > foo
-  > bar
-  > 4
-  > 5
-  > babar
-  > EOF
-
-  $ hg diff
-  diff -r 7733902a8d94 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,5 +1,11 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  +babar
-
-  $ hg ci -m "another one"
-
-Not selecting anything to uncommit
-==================================
-
-  $ hg uncommit -i<<EOF
-  > y
-  > n
-  > n
-  > n
-  > EOF
-  diff --git a/a b/a
-  3 hunks, 6 lines changed
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  discard change 1/3 to 'a'? [Ynesfdaq?] n
-  
-  @@ -1,5 +4,7 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  discard change 2/3 to 'a'? [Ynesfdaq?] n
-  
-  @@ -4,2 +9,3 @@
-   4
-   5
-  +babar
-  discard change 3/3 to 'a'? [Ynesfdaq?] n
-  
-  abort: nothing selected to uncommit
-  [255]
-  $ hg status
-
-Uncommit a chunk
-================
-
-  $ hg amend --extract -i<<EOF
-  > y
-  > y
-  > n
-  > n
-  > EOF
-  diff --git a/a b/a
-  3 hunks, 6 lines changed
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  discard change 1/3 to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,5 +4,7 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  discard change 2/3 to 'a'? [Ynesfdaq?] n
-  
-  @@ -4,2 +9,3 @@
-   4
-   5
-  +babar
-  discard change 3/3 to 'a'? [Ynesfdaq?] n
-  
-The unselected part should be in the diff
------------------------------------------
-
-  $ hg diff
-  diff -r 678a59e5ff90 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-
-The commit should contain the rest of part
-------------------------------------------
-
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 678a59e5ff90754d5e94719bd82ad169be773c21
-  # Parent  7733902a8d94c789ca81d866bea1893d79442db6
-  another one
-  
-  diff -r 7733902a8d94 -r 678a59e5ff90 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,5 +1,8 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  +babar
-
-Uncommiting on dirty working directory
-======================================
-
-  $ hg status
-  M a
-  $ hg diff
-  diff -r 678a59e5ff90 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-
-  $ hg uncommit -i<<EOF
-  > y
-  > n
-  > y
-  > EOF
-  diff --git a/a b/a
-  2 hunks, 3 lines changed
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,5 +1,7 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  discard change 1/2 to 'a'? [Ynesfdaq?] n
-  
-  @@ -4,2 +6,3 @@
-   4
-   5
-  +babar
-  discard change 2/2 to 'a'? [Ynesfdaq?] y
-  
-  patching file a
-  Hunk #1 succeeded at 2 with fuzz 1 (offset 0 lines).
-
-  $ hg diff
-  diff -r 46e35360be47 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  @@ -5,3 +8,4 @@
-   bar
-   4
-   5
-  +babar
-
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 46e35360be473bf761bedf3d05de4a68ffd9d9f8
-  # Parent  7733902a8d94c789ca81d866bea1893d79442db6
-  another one
-  
-  diff -r 7733902a8d94 -r 46e35360be47 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,5 +1,7 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-
-Checking the obsolescence history
-
-  $ hg obslog
-  @  46e35360be47 (5) another one
-  |
-  x  678a59e5ff90 (3) another one
-  |    rewritten(content) as 46e35360be47 by test (Thu Jan 01 00:00:00 1970 +0000)
-  |
-  x  f70fb463d5bf (1) another one
-       rewritten(content) as 678a59e5ff90 by test (Thu Jan 01 00:00:00 1970 +0000)
-  
-
-Push the changes back to the commit and more commits for more testing
-
-  $ hg amend
-  $ glog
-  @  7:905eb2a23ea2@default(draft) another one
-  |
-  o  0:7733902a8d94@default(draft) The base commit
-  
-  $ touch foo
-  $ echo "hey" >> foo
-  $ hg ci -Am "Added foo"
-  adding foo
-
-Testing uncommiting a whole changeset and also for a file addition
-==================================================================
-
-  $ hg uncommit -i<<EOF
-  > y
-  > y
-  > EOF
-  diff --git a/foo b/foo
-  new file mode 100644
-  examine changes to 'foo'? [Ynesfdaq?] y
-  
-  @@ -0,0 +1,1 @@
-  +hey
-  discard this change to 'foo'? [Ynesfdaq?] y
-  
-  new changeset is empty
-  (use 'hg prune .' to remove it)
-
-  $ hg status
-  A foo
-  $ hg diff
-  diff -r 857367499298 foo
-  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
-  @@ -0,0 +1,1 @@
-  +hey
-
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 857367499298e999b5841bb01df65f73088b5d3b
-  # Parent  905eb2a23ea2d92073419d0e19165b90d36ea223
-  Added foo
-  
-  $ hg amend
-
-Testing to uncommit removed files completely
-============================================
-
-  $ hg rm a
-  $ hg ci -m "Removed a"
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 219cfe20964e93f8bb9bd82ceaa54d3b776046db
-  # Parent  42cc15efbec26c14d96d805dee2766ba91d1fd31
-  Removed a
-  
-  diff -r 42cc15efbec2 -r 219cfe20964e a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,11 +0,0 @@
-  --2
-  --1
-  -0
-  -1
-  -2
-  -3
-  -foo
-  -bar
-  -4
-  -5
-  -babar
-
-Not examining the file
-----------------------
-
-  $ hg uncommit -i<<EOF
-  > n
-  > EOF
-  diff --git a/a b/a
-  deleted file mode 100644
-  examine changes to 'a'? [Ynesfdaq?] n
-  
-  abort: nothing selected to uncommit
-  [255]
-
-Examining the file
-------------------
-XXX: there is a bug in interactive selection as it is not letting to examine the
-file. Tried with curses too. In the curses UI, if you just unselect the hunks
-and the not file mod thing at the top, it will show the same "nothing unselected
-to uncommit" message which is a bug in interactive selection.
-
-  $ hg uncommit -i<<EOF
-  > y
-  > EOF
-  diff --git a/a b/a
-  deleted file mode 100644
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  new changeset is empty
-  (use 'hg prune .' to remove it)
-
-  $ hg diff
-  diff -r 737487f1e5f8 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,11 +0,0 @@
-  --2
-  --1
-  -0
-  -1
-  -2
-  -3
-  -foo
-  -bar
-  -4
-  -5
-  -babar
-  $ hg status
-  R a
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 737487f1e5f853e55decb73ea31522c63e7f5980
-  # Parent  42cc15efbec26c14d96d805dee2766ba91d1fd31
-  Removed a
-  
-
-  $ hg prune .
-  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  working directory now at 42cc15efbec2
-  1 changesets pruned
-  $ hg revert --all
-  undeleting a
-
-  $ glog
-  @  12:42cc15efbec2@default(draft) Added foo
-  |
-  o  7:905eb2a23ea2@default(draft) another one
-  |
-  o  0:7733902a8d94@default(draft) The base commit
-  
-
-Testing when a new file is added in the last commit
-===================================================
-
-  $ echo "foo" >> foo
-  $ touch x
-  $ echo "abcd" >> x
-  $ hg add x
-  $ hg ci -m "Added x"
-  $ hg uncommit -i<<EOF
-  > y
-  > y
-  > y
-  > n
-  > EOF
-  diff --git a/foo b/foo
-  1 hunks, 1 lines changed
-  examine changes to 'foo'? [Ynesfdaq?] y
-  
-  @@ -1,1 +1,2 @@
-   hey
-  +foo
-  discard change 1/2 to 'foo'? [Ynesfdaq?] y
-  
-  diff --git a/x b/x
-  new file mode 100644
-  examine changes to 'x'? [Ynesfdaq?] y
-  
-  @@ -0,0 +1,1 @@
-  +abcd
-  discard change 2/2 to 'x'? [Ynesfdaq?] n
-  
-
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 25a080d13cb23dbd014839f54d99a96e57ba7e9b
-  # Parent  42cc15efbec26c14d96d805dee2766ba91d1fd31
-  Added x
-  
-  diff -r 42cc15efbec2 -r 25a080d13cb2 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 @@
-  +abcd
-
-  $ hg diff
-  diff -r 25a080d13cb2 foo
-  --- a/foo	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,1 +1,2 @@
-   hey
-  +foo
-
-  $ hg status
-  M foo
-
-  $ hg revert --all
-  reverting foo
-
-Testing between the stack and with dirty working copy
-=====================================================
-
-  $ glog
-  @  18:25a080d13cb2@default(draft) Added x
-  |
-  o  12:42cc15efbec2@default(draft) Added foo
-  |
-  o  7:905eb2a23ea2@default(draft) another one
-  |
-  o  0:7733902a8d94@default(draft) The base commit
-  
-  $ hg up 905eb2a23ea2
-  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
-
-  $ touch bar
-  $ echo "foo" >> bar
-  $ hg add bar
-  $ hg status
-  A bar
-  ? foo.orig
-
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 905eb2a23ea2d92073419d0e19165b90d36ea223
-  # Parent  7733902a8d94c789ca81d866bea1893d79442db6
-  another one
-  
-  diff -r 7733902a8d94 -r 905eb2a23ea2 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,5 +1,11 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  +babar
-
-  $ hg uncommit -i<<EOF
-  > y
-  > n
-  > n
-  > y
-  > EOF
-  diff --git a/a b/a
-  3 hunks, 6 lines changed
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  discard change 1/3 to 'a'? [Ynesfdaq?] n
-  
-  @@ -1,5 +4,7 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  discard change 2/3 to 'a'? [Ynesfdaq?] n
-  
-  @@ -4,2 +9,3 @@
-   4
-   5
-  +babar
-  discard change 3/3 to 'a'? [Ynesfdaq?] y
-  
-  patching file a
-  Hunk #1 succeeded at 1 with fuzz 1 (offset -1 lines).
-  2 new unstable changesets
-
-  $ hg diff
-  diff -r 676366511f95 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -8,3 +8,4 @@
-   bar
-   4
-   5
-  +babar
-  diff -r 676366511f95 bar
-  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/bar	Thu Jan 01 00:00:00 1970 +0000
-  @@ -0,0 +1,1 @@
-  +foo
-
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 676366511f95ca4122413dcf79b45eaab61fb387
-  # Parent  7733902a8d94c789ca81d866bea1893d79442db6
-  another one
-  
-  diff -r 7733902a8d94 -r 676366511f95 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,5 +1,10 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  $ hg status
-  M a
-  A bar
-  ? foo.orig
-
-More uncommit on the same dirty working copy
-=============================================
-
-  $ hg uncommit -i<<EOF
-  > y
-  > y
-  > n
-  > EOF
-  diff --git a/a b/a
-  2 hunks, 5 lines changed
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  discard change 1/2 to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,5 +4,7 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-  discard change 2/2 to 'a'? [Ynesfdaq?] n
-  
-
-  $ hg exp
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 62d907d0c4fa13b4b8bfeed05f13751035daf963
-  # Parent  7733902a8d94c789ca81d866bea1893d79442db6
-  another one
-  
-  diff -r 7733902a8d94 -r 62d907d0c4fa a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,5 +1,7 @@
-   1
-   2
-   3
-  +foo
-  +bar
-   4
-   5
-
-  $ hg diff
-  diff -r 62d907d0c4fa a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,3 +1,6 @@
-  +-2
-  +-1
-  +0
-   1
-   2
-   3
-  @@ -5,3 +8,4 @@
-   bar
-   4
-   5
-  +babar
-  diff -r 62d907d0c4fa bar
-  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/bar	Thu Jan 01 00:00:00 1970 +0000
-  @@ -0,0 +1,1 @@
-  +foo
-
-  $ hg status
-  M a
-  A bar
-  ? foo.orig
-
-Interactive uncommit with a pattern
------------------------------------
-
-(more setup)
-
-  $ hg ci -m 'roaming changes'
-  $ cat > b << EOF
-  > a
-  > b
-  > c
-  > d
-  > e
-  > f
-  > h
-  > EOF
-  $ hg add b
-  $ hg ci -m 'add b'
-  $ echo 'celeste' >> a
-  $ echo 'i' >> b
-  $ hg ci -m 'some more changes'
-  $ hg export
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID be5c67225e80b050867862bbd9f4755c4e9207c5
-  # Parent  c280a907fddcef2ffe9fadcc2d87f29998e22b2f
-  some more changes
-  
-  diff -r c280a907fddc -r be5c67225e80 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -9,3 +9,4 @@
-   4
-   5
-   babar
-  +celeste
-  diff -r c280a907fddc -r be5c67225e80 b
-  --- a/b	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/b	Thu Jan 01 00:00:00 1970 +0000
-  @@ -5,3 +5,4 @@
-   e
-   f
-   h
-  +i
-
-  $ hg uncommit -i a << DONE
-  > y
-  > y
-  > DONE
-  diff --git a/a b/a
-  1 hunks, 1 lines changed
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  @@ -9,3 +9,4 @@
-   4
-   5
-   babar
-  +celeste
-  discard this change to 'a'? [Ynesfdaq?] y
-  
-  $ hg status
-  M a
-  ? foo.orig
-  $ hg diff
-  diff -r c701d7c8d18b a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -9,3 +9,4 @@
-   4
-   5
-   babar
-  +celeste
-  $ hg export
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID c701d7c8d18be55a92688f4458c26bd74fb1f525
-  # Parent  c280a907fddcef2ffe9fadcc2d87f29998e22b2f
-  some more changes
-  
-  diff -r c280a907fddc -r c701d7c8d18b b
-  --- a/b	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/b	Thu Jan 01 00:00:00 1970 +0000
-  @@ -5,3 +5,4 @@
-   e
-   f
-   h
-  +i
-
-(reset)
-
-  $ cat << EOF  > a
-  > -3
-  > -2
-  > -1
-  > 0
-  > 1
-  > 2
-  > 3
-  > foo
-  > bar
-  > 4
-  > 5
-  > babar
-  > celeste
-  > EOF
-  $ hg amend 
-
-Same but do not select some change in 'a'
-
-  $ hg uncommit -i a << DONE
-  > y
-  > y
-  > n
-  > DONE
-  diff --git a/a b/a
-  2 hunks, 2 lines changed
-  examine changes to 'a'? [Ynesfdaq?] y
-  
-  @@ -1,3 +1,4 @@
-  +-3
-   -2
-   -1
-   0
-  discard change 1/2 to 'a'? [Ynesfdaq?] y
-  
-  @@ -9,3 +10,4 @@
-   4
-   5
-   babar
-  +celeste
-  discard change 2/2 to 'a'? [Ynesfdaq?] n
-  
-  $ hg status
-  M a
-  ? foo.orig
-
-  $ hg diff
-  diff -r 28d5de12b225 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -1,3 +1,4 @@
-  +-3
-   -2
-   -1
-   0
-
-  $ hg export
-  # HG changeset patch
-  # User test
-  # Date 0 0
-  #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 28d5de12b225d1e0951110cced8d8994227be026
-  # Parent  c280a907fddcef2ffe9fadcc2d87f29998e22b2f
-  some more changes
-  
-  diff -r c280a907fddc -r 28d5de12b225 a
-  --- a/a	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
-  @@ -9,3 +9,4 @@
-   4
-   5
-   babar
-  +celeste
-  diff -r c280a907fddc -r 28d5de12b225 b
-  --- a/b	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/b	Thu Jan 01 00:00:00 1970 +0000
-  @@ -5,3 +5,4 @@
-   e
-   f
-   h
-  +i
-
-  $ cat b
-  a
-  b
-  c
-  d
-  e
-  f
-  h
-  i