##// END OF EJS Templates
mq: preserve --git flag when merging patches...
Patrick Mezard -
r10185:7637fe4f stable
parent child Browse files
Show More
@@ -261,12 +261,21 b' class queue(object):'
261 261 def diffopts(self, opts={}, patchfn=None):
262 262 diffopts = patch.diffopts(self.ui, opts)
263 263 if patchfn:
264 # if the patch was a git patch, refresh it as a git patch
265 patchf = self.opener(patchfn, 'r')
266 for line in patchf:
267 if line.startswith('diff --git'):
268 diffopts.git = True
269 break
264 diffopts = self.patchopts(diffopts, patchfn)
265 return diffopts
266
267 def patchopts(self, diffopts, patchfn):
268 """Return a copy of input diff options with git set to true if
269 referenced patch is a git patch.
270 """
271 diffopts = diffopts.copy()
272 patchf = self.opener(patchfn, 'r')
273 # if the patch was a git patch, refresh it as a git patch
274 for line in patchf:
275 if line.startswith('diff --git'):
276 diffopts.git = True
277 break
278 patchf.close()
270 279 return diffopts
271 280
272 281 def join(self, *p):
@@ -469,6 +478,7 b' class queue(object):'
469 478 except:
470 479 raise util.Abort(_("unable to read %s") % patch)
471 480
481 diffopts = self.patchopts(diffopts, patch)
472 482 patchf = self.opener(patch, "w")
473 483 comments = str(ph)
474 484 if comments:
@@ -55,6 +55,11 b' class diffopts(object):'
55 55 raise util.Abort(_('diff context lines count must be '
56 56 'an integer, not %r') % self.context)
57 57
58 def copy(self, **kwargs):
59 opts = dict((k, getattr(self, k)) for k in self.defaults)
60 opts.update(kwargs)
61 return diffopts(**opts)
62
58 63 defaultopts = diffopts()
59 64
60 65 def wsclean(opts, text, blank=True):
@@ -56,18 +56,27 b' echo'
56 56 echo % init t2
57 57 hg init t2
58 58 cd t2
59 echo '[diff]' > .hg/hgrc
60 echo 'nodates = 1' >> .hg/hgrc
59 61 echo a > a
60 62 hg ci -Am init
61 echo b >> a
63 echo b > a
62 64 hg ci -m changea
63 65 hg up -C 0
66 hg cp a aa
64 67 echo c >> a
65 hg qnew -f -e patcha
68 hg qnew --git -f -e patcha
69 echo d >> a
70 hg qnew -d '0 0' -f -e patcha2
66 71 echo % create the reference queue
67 72 hg qsave -c -e -n refqueue 2> /dev/null
68 73 hg up -C 1
69 74 echo % merge
70 hg qpush -m -n refqueue 2>&1 | \
75 HGMERGE=internal:other hg qpush -a -m -n refqueue 2>&1 | \
71 76 sed 's/merging with queue at.*refqueue/merging with queue at refqueue/'
77 echo % check patcha is still a git patch
78 cat .hg/patches/patcha
79 echo % check patcha2 is still a regular patch
80 grep git .hg/patches/patcha2 && echo 'git patch found!'
72 81 cd ..
73 82
@@ -18,8 +18,35 b' patch queue now empty'
18 18 adding a
19 19 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
20 20 % create the reference queue
21 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
21 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
22 22 % merge
23 23 merging with queue at refqueue
24 24 applying patcha
25 now at: patcha
25 patching file a
26 Hunk #1 FAILED at 0
27 1 out of 1 hunks FAILED -- saving rejects to file a.rej
28 patch failed, unable to continue (try -v)
29 patch failed, rejects left in working dir
30 patch didn't work out, merging patcha
31 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
32 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
33 (branch merge, don't forget to commit)
34 applying patcha2
35 now at: patcha2
36 % check patcha is still a git patch
37 diff --git a/a b/a
38 --- a/a
39 +++ b/a
40 @@ -1,1 +1,2 @@
41 -b
42 +a
43 +c
44 diff --git a/a b/aa
45 copy from a
46 copy to aa
47 --- a/a
48 +++ b/aa
49 @@ -1,1 +1,1 @@
50 -b
51 +a
52 % check patcha2 is still a regular patch
General Comments 0
You need to be logged in to leave comments. Login now