obsolete: use parsers.fm1readmarker if it exists for a ~38% perf win
This moves perfloadmarkers on my linux workstation (63494 markers from
mpm, crew, and myself) performance from
! wall 0.357657 comb 0.360000 user 0.350000 sys 0.010000 (best of 28)
to
! wall 0.222345 comb 0.220000 user 0.210000 sys 0.010000 (best of 41)
which is a pretty good improvement.
On my BSD machine, which is ancient and slow, before:
! wall 3.584964 comb 3.578125 user 3.539062 sys 0.039062 (best of 3)
after:
! wall 2.267974 comb 2.265625 user 2.195312 sys 0.070312 (best of 5)
I feel like we could do better by moving the whole generator function
into C, but I didn't want to tackle that right away.
Set up a repo
$ cat <<EOF >> $HGRCPATH
> [ui]
> interactive = true
> [extensions]
> record =
> EOF
$ hg init a
$ cd a
Select no files
$ touch empty-rw
$ hg add empty-rw
$ hg record empty-rw<<EOF
> n
> EOF
diff --git a/empty-rw b/empty-rw
new file mode 100644
examine changes to 'empty-rw'? [Ynesfdaq?] n
no changes to record
$ hg tip -p
changeset: -1:000000000000
tag: tip
user:
date: Thu Jan 01 00:00:00 1970 +0000
Select files but no hunks
$ hg record empty-rw<<EOF
> y
> n
> EOF
diff --git a/empty-rw b/empty-rw
new file mode 100644
examine changes to 'empty-rw'? [Ynesfdaq?] y
abort: empty commit message
[255]
$ hg tip -p
changeset: -1:000000000000
tag: tip
user:
date: Thu Jan 01 00:00:00 1970 +0000
Record empty file
$ hg record -d '0 0' -m empty empty-rw<<EOF
> y
> y
> EOF
diff --git a/empty-rw b/empty-rw
new file mode 100644
examine changes to 'empty-rw'? [Ynesfdaq?] y
$ hg tip -p
changeset: 0:c0708cf4e46e
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: empty
Summary shows we updated to the new cset
$ hg summary
parent: 0:c0708cf4e46e tip
empty
branch: default
commit: (clean)
update: (current)
Rename empty file
$ hg mv empty-rw empty-rename
$ hg record -d '1 0' -m rename<<EOF
> y
> EOF
diff --git a/empty-rw b/empty-rename
rename from empty-rw
rename to empty-rename
examine changes to 'empty-rw' and 'empty-rename'? [Ynesfdaq?] y
$ hg tip -p
changeset: 1:d695e8dcb197
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: rename
Copy empty file
$ hg cp empty-rename empty-copy
$ hg record -d '2 0' -m copy<<EOF
> y
> EOF
diff --git a/empty-rename b/empty-copy
copy from empty-rename
copy to empty-copy
examine changes to 'empty-rename' and 'empty-copy'? [Ynesfdaq?] y
$ hg tip -p
changeset: 2:1d4b90bea524
tag: tip
user: test
date: Thu Jan 01 00:00:02 1970 +0000
summary: copy
Delete empty file
$ hg rm empty-copy
$ hg record -d '3 0' -m delete<<EOF
> y
> EOF
diff --git a/empty-copy b/empty-copy
deleted file mode 100644
examine changes to 'empty-copy'? [Ynesfdaq?] y
$ hg tip -p
changeset: 3:b39a238f01a1
tag: tip
user: test
date: Thu Jan 01 00:00:03 1970 +0000
summary: delete
Add binary file
$ hg bundle --base -2 tip.bundle
1 changesets found
$ hg add tip.bundle
$ hg record -d '4 0' -m binary<<EOF
> y
> EOF
diff --git a/tip.bundle b/tip.bundle
new file mode 100644
this is a binary file
examine changes to 'tip.bundle'? [Ynesfdaq?] y
$ hg tip -p
changeset: 4:ad816da3711e
tag: tip
user: test
date: Thu Jan 01 00:00:04 1970 +0000
summary: binary
diff -r b39a238f01a1 -r ad816da3711e tip.bundle
Binary file tip.bundle has changed
Change binary file
$ hg bundle --base -2 tip.bundle
1 changesets found
$ hg record -d '5 0' -m binary-change<<EOF
> y
> EOF
diff --git a/tip.bundle b/tip.bundle
this modifies a binary file (all or nothing)
examine changes to 'tip.bundle'? [Ynesfdaq?] y
$ hg tip -p
changeset: 5:dccd6f3eb485
tag: tip
user: test
date: Thu Jan 01 00:00:05 1970 +0000
summary: binary-change
diff -r ad816da3711e -r dccd6f3eb485 tip.bundle
Binary file tip.bundle has changed
Rename and change binary file
$ hg mv tip.bundle top.bundle
$ hg bundle --base -2 top.bundle
1 changesets found
$ hg record -d '6 0' -m binary-change-rename<<EOF
> y
> EOF
diff --git a/tip.bundle b/top.bundle
rename from tip.bundle
rename to top.bundle
this modifies a binary file (all or nothing)
examine changes to 'tip.bundle' and 'top.bundle'? [Ynesfdaq?] y
$ hg tip -p
changeset: 6:7fa44105f5b3
tag: tip
user: test
date: Thu Jan 01 00:00:06 1970 +0000
summary: binary-change-rename
diff -r dccd6f3eb485 -r 7fa44105f5b3 tip.bundle
Binary file tip.bundle has changed
diff -r dccd6f3eb485 -r 7fa44105f5b3 top.bundle
Binary file top.bundle has changed
Add plain file
$ for i in 1 2 3 4 5 6 7 8 9 10; do
> echo $i >> plain
> done
$ hg add plain
$ hg record -d '7 0' -m plain plain<<EOF
> y
> y
> EOF
diff --git a/plain b/plain
new file mode 100644
examine changes to 'plain'? [Ynesfdaq?] y
$ hg tip -p
changeset: 7:11fb457c1be4
tag: tip
user: test
date: Thu Jan 01 00:00:07 1970 +0000
summary: plain
diff -r 7fa44105f5b3 -r 11fb457c1be4 plain
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plain Thu Jan 01 00:00:07 1970 +0000
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
Modify end of plain file with username unset
$ echo 11 >> plain
$ unset HGUSER
$ hg record --config ui.username= -d '8 0' -m end plain
abort: no username supplied
(use "hg config --edit" to set your username)
[255]
Modify end of plain file, also test that diffopts are accounted for
$ HGUSER="test"
$ export HGUSER
$ hg record --config diff.showfunc=true -d '8 0' -m end plain <<EOF
> y
> y
> EOF
diff --git a/plain b/plain
1 hunks, 1 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -8,3 +8,4 @@ 7
8
9
10
+11
record this change to 'plain'? [Ynesfdaq?] y
Modify end of plain file, no EOL
$ hg tip --template '{node}' >> plain
$ hg record -d '9 0' -m noeol plain <<EOF
> y
> y
> EOF
diff --git a/plain b/plain
1 hunks, 1 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -9,3 +9,4 @@
9
10
11
+7264f99c5f5ff3261504828afa4fb4d406c3af54
\ No newline at end of file
record this change to 'plain'? [Ynesfdaq?] y
Modify end of plain file, add EOL
$ echo >> plain
$ echo 1 > plain2
$ hg add plain2
$ hg record -d '10 0' -m eol plain plain2 <<EOF
> y
> y
> y
> EOF
diff --git a/plain b/plain
1 hunks, 1 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -9,4 +9,4 @@
9
10
11
-7264f99c5f5ff3261504828afa4fb4d406c3af54
\ No newline at end of file
+7264f99c5f5ff3261504828afa4fb4d406c3af54
record change 1/2 to 'plain'? [Ynesfdaq?] y
diff --git a/plain2 b/plain2
new file mode 100644
examine changes to 'plain2'? [Ynesfdaq?] y
Modify beginning, trim end, record both, add another file to test
changes numbering
$ rm plain
$ for i in 2 2 3 4 5 6 7 8 9 10; do
> echo $i >> plain
> done
$ echo 2 >> plain2
$ hg record -d '10 0' -m begin-and-end plain plain2 <<EOF
> y
> y
> y
> y
> y
> EOF
diff --git a/plain b/plain
2 hunks, 3 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -1,4 +1,4 @@
-1
+2
2
3
4
record change 1/3 to 'plain'? [Ynesfdaq?] y
@@ -8,5 +8,3 @@
8
9
10
-11
-7264f99c5f5ff3261504828afa4fb4d406c3af54
record change 2/3 to 'plain'? [Ynesfdaq?] y
diff --git a/plain2 b/plain2
1 hunks, 1 lines changed
examine changes to 'plain2'? [Ynesfdaq?] y
@@ -1,1 +1,2 @@
1
+2
record change 3/3 to 'plain2'? [Ynesfdaq?] y
$ hg tip -p
changeset: 11:21df83db12b8
tag: tip
user: test
date: Thu Jan 01 00:00:10 1970 +0000
summary: begin-and-end
diff -r ddb8b281c3ff -r 21df83db12b8 plain
--- a/plain Thu Jan 01 00:00:10 1970 +0000
+++ b/plain Thu Jan 01 00:00:10 1970 +0000
@@ -1,4 +1,4 @@
-1
+2
2
3
4
@@ -8,5 +8,3 @@
8
9
10
-11
-7264f99c5f5ff3261504828afa4fb4d406c3af54
diff -r ddb8b281c3ff -r 21df83db12b8 plain2
--- a/plain2 Thu Jan 01 00:00:10 1970 +0000
+++ b/plain2 Thu Jan 01 00:00:10 1970 +0000
@@ -1,1 +1,2 @@
1
+2
Trim beginning, modify end
$ rm plain
> for i in 4 5 6 7 8 9 10.new; do
> echo $i >> plain
> done
Record end
$ hg record -d '11 0' -m end-only plain <<EOF
> y
> n
> y
> EOF
diff --git a/plain b/plain
2 hunks, 4 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -1,9 +1,6 @@
-2
-2
-3
4
5
6
7
8
9
record change 1/2 to 'plain'? [Ynesfdaq?] n
@@ -4,7 +1,7 @@
4
5
6
7
8
9
-10
+10.new
record change 2/2 to 'plain'? [Ynesfdaq?] y
$ hg tip -p
changeset: 12:99337501826f
tag: tip
user: test
date: Thu Jan 01 00:00:11 1970 +0000
summary: end-only
diff -r 21df83db12b8 -r 99337501826f plain
--- a/plain Thu Jan 01 00:00:10 1970 +0000
+++ b/plain Thu Jan 01 00:00:11 1970 +0000
@@ -7,4 +7,4 @@
7
8
9
-10
+10.new
Record beginning
$ hg record -d '12 0' -m begin-only plain <<EOF
> y
> y
> EOF
diff --git a/plain b/plain
1 hunks, 3 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -1,6 +1,3 @@
-2
-2
-3
4
5
6
record this change to 'plain'? [Ynesfdaq?] y
$ hg tip -p
changeset: 13:bbd45465d540
tag: tip
user: test
date: Thu Jan 01 00:00:12 1970 +0000
summary: begin-only
diff -r 99337501826f -r bbd45465d540 plain
--- a/plain Thu Jan 01 00:00:11 1970 +0000
+++ b/plain Thu Jan 01 00:00:12 1970 +0000
@@ -1,6 +1,3 @@
-2
-2
-3
4
5
6
Add to beginning, trim from end
$ rm plain
$ for i in 1 2 3 4 5 6 7 8 9; do
> echo $i >> plain
> done
Record end
$ hg record --traceback -d '13 0' -m end-again plain<<EOF
> y
> n
> y
> EOF
diff --git a/plain b/plain
2 hunks, 4 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -1,6 +1,9 @@
+1
+2
+3
4
5
6
7
8
9
record change 1/2 to 'plain'? [Ynesfdaq?] n
@@ -1,7 +4,6 @@
4
5
6
7
8
9
-10.new
record change 2/2 to 'plain'? [Ynesfdaq?] y
Add to beginning, middle, end
$ rm plain
$ for i in 1 2 3 4 5 5.new 5.reallynew 6 7 8 9 10 11; do
> echo $i >> plain
> done
Record beginning, middle, and test that format-breaking diffopts are ignored
$ hg record --config diff.noprefix=True -d '14 0' -m middle-only plain <<EOF
> y
> y
> y
> n
> EOF
diff --git a/plain b/plain
3 hunks, 7 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -1,2 +1,5 @@
+1
+2
+3
4
5
record change 1/3 to 'plain'? [Ynesfdaq?] y
@@ -1,6 +4,8 @@
4
5
+5.new
+5.reallynew
6
7
8
9
record change 2/3 to 'plain'? [Ynesfdaq?] y
@@ -3,4 +8,6 @@
6
7
8
9
+10
+11
record change 3/3 to 'plain'? [Ynesfdaq?] n
$ hg tip -p
changeset: 15:f34a7937ec33
tag: tip
user: test
date: Thu Jan 01 00:00:14 1970 +0000
summary: middle-only
diff -r 82c065d0b850 -r f34a7937ec33 plain
--- a/plain Thu Jan 01 00:00:13 1970 +0000
+++ b/plain Thu Jan 01 00:00:14 1970 +0000
@@ -1,5 +1,10 @@
+1
+2
+3
4
5
+5.new
+5.reallynew
6
7
8
Record end
$ hg record -d '15 0' -m end-only plain <<EOF
> y
> y
> EOF
diff --git a/plain b/plain
1 hunks, 2 lines changed
examine changes to 'plain'? [Ynesfdaq?] y
@@ -9,3 +9,5 @@
7
8
9
+10
+11
record this change to 'plain'? [Ynesfdaq?] y
$ hg tip -p
changeset: 16:f9900b71a04c
tag: tip
user: test
date: Thu Jan 01 00:00:15 1970 +0000
summary: end-only
diff -r f34a7937ec33 -r f9900b71a04c plain
--- a/plain Thu Jan 01 00:00:14 1970 +0000
+++ b/plain Thu Jan 01 00:00:15 1970 +0000
@@ -9,3 +9,5 @@
7
8
9
+10
+11
$ mkdir subdir
$ cd subdir
$ echo a > a
$ hg ci -d '16 0' -Amsubdir
adding subdir/a
$ echo a >> a
$ hg record -d '16 0' -m subdir-change a <<EOF
> y
> y
> EOF
diff --git a/subdir/a b/subdir/a
1 hunks, 1 lines changed
examine changes to 'subdir/a'? [Ynesfdaq?] y
@@ -1,1 +1,2 @@
a
+a
record this change to 'subdir/a'? [Ynesfdaq?] y
$ hg tip -p
changeset: 18:61be427a9deb
tag: tip
user: test
date: Thu Jan 01 00:00:16 1970 +0000
summary: subdir-change
diff -r a7ffae4d61cb -r 61be427a9deb subdir/a
--- a/subdir/a Thu Jan 01 00:00:16 1970 +0000
+++ b/subdir/a Thu Jan 01 00:00:16 1970 +0000
@@ -1,1 +1,2 @@
a
+a
$ echo a > f1
$ echo b > f2
$ hg add f1 f2
$ hg ci -mz -d '17 0'
$ echo a >> f1
$ echo b >> f2
Help, quit
$ hg record <<EOF
> ?
> q
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] ?
y - yes, record this change
n - no, skip this change
e - edit this change manually
s - skip remaining changes to this file
f - record remaining changes to this file
d - done, skip remaining changes and files
a - record all changes to all remaining files
q - quit, recording no changes
? - ? (display help)
examine changes to 'subdir/f1'? [Ynesfdaq?] q
abort: user quit
[255]
Skip
$ hg record <<EOF
> s
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] s
diff --git a/subdir/f2 b/subdir/f2
1 hunks, 1 lines changed
examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected
[255]
No
$ hg record <<EOF
> n
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] n
diff --git a/subdir/f2 b/subdir/f2
1 hunks, 1 lines changed
examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected
[255]
f, quit
$ hg record <<EOF
> f
> q
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] f
diff --git a/subdir/f2 b/subdir/f2
1 hunks, 1 lines changed
examine changes to 'subdir/f2'? [Ynesfdaq?] q
abort: user quit
[255]
s, all
$ hg record -d '18 0' -mx <<EOF
> s
> a
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] s
diff --git a/subdir/f2 b/subdir/f2
1 hunks, 1 lines changed
examine changes to 'subdir/f2'? [Ynesfdaq?] a
$ hg tip -p
changeset: 20:b3df3dda369a
tag: tip
user: test
date: Thu Jan 01 00:00:18 1970 +0000
summary: x
diff -r 6e02d6c9906d -r b3df3dda369a subdir/f2
--- a/subdir/f2 Thu Jan 01 00:00:17 1970 +0000
+++ b/subdir/f2 Thu Jan 01 00:00:18 1970 +0000
@@ -1,1 +1,2 @@
b
+b
f
$ hg record -d '19 0' -my <<EOF
> f
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] f
$ hg tip -p
changeset: 21:38ec577f126b
tag: tip
user: test
date: Thu Jan 01 00:00:19 1970 +0000
summary: y
diff -r b3df3dda369a -r 38ec577f126b subdir/f1
--- a/subdir/f1 Thu Jan 01 00:00:18 1970 +0000
+++ b/subdir/f1 Thu Jan 01 00:00:19 1970 +0000
@@ -1,1 +1,2 @@
a
+a
#if execbit
Preserve chmod +x
$ chmod +x f1
$ echo a >> f1
$ hg record -d '20 0' -mz <<EOF
> y
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
old mode 100644
new mode 100755
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -1,2 +1,3 @@
a
a
+a
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg tip --config diff.git=True -p
changeset: 22:3261adceb075
tag: tip
user: test
date: Thu Jan 01 00:00:20 1970 +0000
summary: z
diff --git a/subdir/f1 b/subdir/f1
old mode 100644
new mode 100755
--- a/subdir/f1
+++ b/subdir/f1
@@ -1,2 +1,3 @@
a
a
+a
Preserve execute permission on original
$ echo b >> f1
$ hg record -d '21 0' -maa <<EOF
> y
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -1,3 +1,4 @@
a
a
a
+b
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg tip --config diff.git=True -p
changeset: 23:b429867550db
tag: tip
user: test
date: Thu Jan 01 00:00:21 1970 +0000
summary: aa
diff --git a/subdir/f1 b/subdir/f1
--- a/subdir/f1
+++ b/subdir/f1
@@ -1,3 +1,4 @@
a
a
a
+b
Preserve chmod -x
$ chmod -x f1
$ echo c >> f1
$ hg record -d '22 0' -mab <<EOF
> y
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
old mode 100755
new mode 100644
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -2,3 +2,4 @@
a
a
b
+c
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg tip --config diff.git=True -p
changeset: 24:0b082130c20a
tag: tip
user: test
date: Thu Jan 01 00:00:22 1970 +0000
summary: ab
diff --git a/subdir/f1 b/subdir/f1
old mode 100755
new mode 100644
--- a/subdir/f1
+++ b/subdir/f1
@@ -2,3 +2,4 @@
a
a
b
+c
#else
Slightly bogus tests to get almost same repo structure as when x bit is used
- but with different hashes.
Mock "Preserve chmod +x"
$ echo a >> f1
$ hg record -d '20 0' -mz <<EOF
> y
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -1,2 +1,3 @@
a
a
+a
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg tip --config diff.git=True -p
changeset: 22:0d463bd428f5
tag: tip
user: test
date: Thu Jan 01 00:00:20 1970 +0000
summary: z
diff --git a/subdir/f1 b/subdir/f1
--- a/subdir/f1
+++ b/subdir/f1
@@ -1,2 +1,3 @@
a
a
+a
Mock "Preserve execute permission on original"
$ echo b >> f1
$ hg record -d '21 0' -maa <<EOF
> y
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -1,3 +1,4 @@
a
a
a
+b
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg tip --config diff.git=True -p
changeset: 23:0eab41a3e524
tag: tip
user: test
date: Thu Jan 01 00:00:21 1970 +0000
summary: aa
diff --git a/subdir/f1 b/subdir/f1
--- a/subdir/f1
+++ b/subdir/f1
@@ -1,3 +1,4 @@
a
a
a
+b
Mock "Preserve chmod -x"
$ chmod -x f1
$ echo c >> f1
$ hg record -d '22 0' -mab <<EOF
> y
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -2,3 +2,4 @@
a
a
b
+c
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg tip --config diff.git=True -p
changeset: 24:f4f718f27b7c
tag: tip
user: test
date: Thu Jan 01 00:00:22 1970 +0000
summary: ab
diff --git a/subdir/f1 b/subdir/f1
--- a/subdir/f1
+++ b/subdir/f1
@@ -2,3 +2,4 @@
a
a
b
+c
#endif
$ cd ..
Abort early when a merge is in progress
$ hg up 4
1 files updated, 0 files merged, 6 files removed, 0 files unresolved
$ touch iwillmergethat
$ hg add iwillmergethat
$ hg branch thatbranch
marked working directory as branch thatbranch
(branches are permanent and global, did you want a bookmark?)
$ hg ci -m'new head'
$ hg up default
6 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg merge thatbranch
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg record -m'will abort'
abort: cannot partially commit a merge (use "hg commit" instead)
[255]
$ hg up -C
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Editing patch (and ignoring trailing text)
$ cat > editor.sh << '__EOF__'
> sed -e 7d -e '5s/^-/ /' -e '/^# ---/i\
> trailing\nditto' "$1" > tmp
> mv tmp "$1"
> __EOF__
$ cat > editedfile << '__EOF__'
> This is the first line
> This is the second line
> This is the third line
> __EOF__
$ hg add editedfile
$ hg commit -medit-patch-1
$ cat > editedfile << '__EOF__'
> This line has changed
> This change will be committed
> This is the third line
> __EOF__
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record -d '23 0' -medit-patch-2 <<EOF
> y
> e
> EOF
diff --git a/editedfile b/editedfile
1 hunks, 2 lines changed
examine changes to 'editedfile'? [Ynesfdaq?] y
@@ -1,3 +1,3 @@
-This is the first line
-This is the second line
+This line has changed
+This change will be committed
This is the third line
record this change to 'editedfile'? [Ynesfdaq?] e
$ cat editedfile
This line has changed
This change will be committed
This is the third line
$ hg cat -r tip editedfile
This is the first line
This change will be committed
This is the third line
$ hg revert editedfile
Trying to edit patch for whole file
$ echo "This is the fourth line" >> editedfile
$ hg record <<EOF
> e
> q
> EOF
diff --git a/editedfile b/editedfile
1 hunks, 1 lines changed
examine changes to 'editedfile'? [Ynesfdaq?] e
cannot edit patch for whole file
examine changes to 'editedfile'? [Ynesfdaq?] q
abort: user quit
[255]
$ hg revert editedfile
Removing changes from patch
$ sed -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile > tmp
$ mv tmp editedfile
$ echo "This line has been added" >> editedfile
$ cat > editor.sh << '__EOF__'
> sed -e 's/^[-+]/ /' "$1" > tmp
> mv tmp "$1"
> __EOF__
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
> y
> e
> EOF
diff --git a/editedfile b/editedfile
1 hunks, 3 lines changed
examine changes to 'editedfile'? [Ynesfdaq?] y
@@ -1,3 +1,3 @@
-This is the first line
-This change will be committed
-This is the third line
+This change will not be committed
+This is the second line
+This line has been added
record this change to 'editedfile'? [Ynesfdaq?] e
no changes to record
$ cat editedfile
This change will not be committed
This is the second line
This line has been added
$ hg cat -r tip editedfile
This is the first line
This change will be committed
This is the third line
$ hg revert editedfile
Invalid patch
$ sed -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile > tmp
$ mv tmp editedfile
$ echo "This line has been added" >> editedfile
$ cat > editor.sh << '__EOF__'
> sed s/This/That/ "$1" > tmp
> mv tmp "$1"
> __EOF__
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
> y
> e
> EOF
diff --git a/editedfile b/editedfile
1 hunks, 3 lines changed
examine changes to 'editedfile'? [Ynesfdaq?] y
@@ -1,3 +1,3 @@
-This is the first line
-This change will be committed
-This is the third line
+This change will not be committed
+This is the second line
+This line has been added
record this change to 'editedfile'? [Ynesfdaq?] e
patching file editedfile
Hunk #1 FAILED at 0
1 out of 1 hunks FAILED -- saving rejects to file editedfile.rej
abort: patch failed to apply
[255]
$ cat editedfile
This change will not be committed
This is the second line
This line has been added
$ hg cat -r tip editedfile
This is the first line
This change will be committed
This is the third line
$ cat editedfile.rej
--- editedfile
+++ editedfile
@@ -1,3 +1,3 @@
-That is the first line
-That change will be committed
-That is the third line
+That change will not be committed
+That is the second line
+That line has been added
Malformed patch - error handling
$ cat > editor.sh << '__EOF__'
> sed -e '/^@/p' "$1" > tmp
> mv tmp "$1"
> __EOF__
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
> y
> e
> EOF
diff --git a/editedfile b/editedfile
1 hunks, 3 lines changed
examine changes to 'editedfile'? [Ynesfdaq?] y
@@ -1,3 +1,3 @@
-This is the first line
-This change will be committed
-This is the third line
+This change will not be committed
+This is the second line
+This line has been added
record this change to 'editedfile'? [Ynesfdaq?] e
abort: error parsing patch: unhandled transition: range -> range
[255]
random text in random positions is still an error
$ cat > editor.sh << '__EOF__'
> sed -e '/^@/i\
> other' "$1" > tmp
> mv tmp "$1"
> __EOF__
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
> y
> e
> EOF
diff --git a/editedfile b/editedfile
1 hunks, 3 lines changed
examine changes to 'editedfile'? [Ynesfdaq?] y
@@ -1,3 +1,3 @@
-This is the first line
-This change will be committed
-This is the third line
+This change will not be committed
+This is the second line
+This line has been added
record this change to 'editedfile'? [Ynesfdaq?] e
abort: error parsing patch: unhandled transition: file -> other
[255]
$ hg up -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
With win32text
$ echo '[extensions]' >> .hg/hgrc
$ echo 'win32text = ' >> .hg/hgrc
$ echo '[decode]' >> .hg/hgrc
$ echo '** = cleverdecode:' >> .hg/hgrc
$ echo '[encode]' >> .hg/hgrc
$ echo '** = cleverencode:' >> .hg/hgrc
$ echo '[patch]' >> .hg/hgrc
$ echo 'eol = crlf' >> .hg/hgrc
Ignore win32text deprecation warning for now:
$ echo '[win32text]' >> .hg/hgrc
$ echo 'warn = no' >> .hg/hgrc
$ echo d >> subdir/f1
$ hg record -d '24 0' -mw1 <<EOF
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -3,3 +3,4 @@
a
b
c
+d
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg tip -p
changeset: 28:* (glob)
tag: tip
user: test
date: Thu Jan 01 00:00:24 1970 +0000
summary: w1
diff -r ???????????? -r ???????????? subdir/f1 (glob)
--- a/subdir/f1 Thu Jan 01 00:00:23 1970 +0000
+++ b/subdir/f1 Thu Jan 01 00:00:24 1970 +0000
@@ -3,3 +3,4 @@
a
b
c
+d
Test --user when ui.username not set
$ unset HGUSER
$ echo e >> subdir/f1
$ hg record --config ui.username= -d '8 0' --user xyz -m "user flag" <<EOF
> y
> y
> EOF
diff --git a/subdir/f1 b/subdir/f1
1 hunks, 1 lines changed
examine changes to 'subdir/f1'? [Ynesfdaq?] y
@@ -4,3 +4,4 @@
b
c
d
+e
record this change to 'subdir/f1'? [Ynesfdaq?] y
$ hg log --template '{author}\n' -l 1
xyz
$ HGUSER="test"
$ export HGUSER
$ cd ..