mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 01:39:21 +03:00
5315858d38
When applying a patch renaming/copying 'a' to 'b' on a revision where 'a' does not exist, the patching process would abort immediately, without processing the remaining hunks and without reporting it. This patch makes the patching no longer abort and possible hunks applied on the copied/renamed file be written in reject files.
196 lines
3.2 KiB
Perl
196 lines
3.2 KiB
Perl
|
|
Issue835: qpush fails immediately when patching a missing file, but
|
|
remaining added files are still created empty which will trick a
|
|
future qrefresh.
|
|
|
|
$ cat > writelines.py <<EOF
|
|
> import sys
|
|
> path = sys.argv[1]
|
|
> args = sys.argv[2:]
|
|
> assert (len(args) % 2) == 0
|
|
>
|
|
> f = file(path, 'wb')
|
|
> for i in xrange(len(args)/2):
|
|
> count, s = args[2*i:2*i+2]
|
|
> count = int(count)
|
|
> s = s.decode('string_escape')
|
|
> f.write(s*count)
|
|
> f.close()
|
|
> EOF
|
|
|
|
$ echo "[extensions]" >> $HGRCPATH
|
|
$ echo "mq=" >> $HGRCPATH
|
|
|
|
$ hg init normal
|
|
$ cd normal
|
|
$ python ../writelines.py b 10 'a\n'
|
|
$ hg ci -Am addb
|
|
adding b
|
|
$ echo a > a
|
|
$ python ../writelines.py b 2 'b\n' 10 'a\n' 2 'c\n'
|
|
$ echo c > c
|
|
$ hg add a c
|
|
$ hg qnew -f changeb
|
|
$ hg qpop
|
|
popping changeb
|
|
patch queue now empty
|
|
$ hg rm b
|
|
$ hg ci -Am rmb
|
|
|
|
Push patch with missing target:
|
|
|
|
$ hg qpush
|
|
applying changeb
|
|
unable to find 'b' for patching
|
|
2 out of 2 hunks FAILED -- saving rejects to file b.rej
|
|
patch failed, unable to continue (try -v)
|
|
patch failed, rejects left in working dir
|
|
errors during apply, please fix and refresh changeb
|
|
[2]
|
|
|
|
Display added files:
|
|
|
|
$ cat a
|
|
a
|
|
$ cat c
|
|
c
|
|
|
|
Display rejections:
|
|
|
|
$ cat b.rej
|
|
--- b
|
|
+++ b
|
|
@@ -1,3 +1,5 @@
|
|
+b
|
|
+b
|
|
a
|
|
a
|
|
a
|
|
@@ -8,3 +10,5 @@
|
|
a
|
|
a
|
|
a
|
|
+c
|
|
+c
|
|
|
|
Test missing renamed file
|
|
|
|
$ hg qpop
|
|
popping changeb
|
|
patch queue now empty
|
|
$ hg up -qC 0
|
|
$ echo a > a
|
|
$ hg mv b bb
|
|
$ python ../writelines.py bb 2 'b\n' 10 'a\n' 2 'c\n'
|
|
$ echo c > c
|
|
$ hg add a c
|
|
$ hg qnew changebb
|
|
$ hg qpop
|
|
popping changebb
|
|
patch queue now empty
|
|
$ hg up -qC 1
|
|
$ hg qpush
|
|
applying changebb
|
|
patching file bb
|
|
Hunk #1 FAILED at 0
|
|
Hunk #2 FAILED at 7
|
|
2 out of 2 hunks FAILED -- saving rejects to file bb.rej
|
|
b not tracked!
|
|
patch failed, unable to continue (try -v)
|
|
patch failed, rejects left in working dir
|
|
errors during apply, please fix and refresh changebb
|
|
[2]
|
|
$ cat a
|
|
a
|
|
$ cat c
|
|
c
|
|
$ cat bb.rej
|
|
--- bb
|
|
+++ bb
|
|
@@ -1,3 +1,5 @@
|
|
+b
|
|
+b
|
|
a
|
|
a
|
|
a
|
|
@@ -8,3 +10,5 @@
|
|
a
|
|
a
|
|
a
|
|
+c
|
|
+c
|
|
|
|
$ cd ..
|
|
|
|
|
|
$ echo "[diff]" >> $HGRCPATH
|
|
$ echo "git=1" >> $HGRCPATH
|
|
|
|
$ hg init git
|
|
$ cd git
|
|
$ python ../writelines.py b 1 '\x00'
|
|
$ hg ci -Am addb
|
|
adding b
|
|
$ echo a > a
|
|
$ python ../writelines.py b 1 '\x01' 1 '\x00'
|
|
$ echo c > c
|
|
$ hg add a c
|
|
$ hg qnew -f changeb
|
|
$ hg qpop
|
|
popping changeb
|
|
patch queue now empty
|
|
$ hg rm b
|
|
$ hg ci -Am rmb
|
|
|
|
Push git patch with missing target:
|
|
|
|
$ hg qpush
|
|
applying changeb
|
|
unable to find 'b' for patching
|
|
1 out of 1 hunks FAILED -- saving rejects to file b.rej
|
|
patch failed, unable to continue (try -v)
|
|
patch failed, rejects left in working dir
|
|
errors during apply, please fix and refresh changeb
|
|
[2]
|
|
$ hg st
|
|
? b.rej
|
|
|
|
Display added files:
|
|
|
|
$ cat a
|
|
a
|
|
$ cat c
|
|
c
|
|
|
|
Display rejections:
|
|
|
|
$ cat b.rej
|
|
--- b
|
|
+++ b
|
|
GIT binary patch
|
|
literal 2
|
|
Jc${No0000400IC2
|
|
|
|
$ cd ..
|
|
|
|
Test push creating directory during git copy or rename:
|
|
|
|
$ hg init missingdir
|
|
$ cd missingdir
|
|
$ echo a > a
|
|
$ hg ci -Am adda
|
|
adding a
|
|
$ mkdir d
|
|
$ hg copy a d/a2
|
|
$ hg mv a d/a
|
|
$ hg qnew -g -f patch
|
|
$ hg qpop
|
|
popping patch
|
|
patch queue now empty
|
|
$ hg qpush
|
|
applying patch
|
|
now at: patch
|
|
|
|
$ cd ..
|
|
|