diff -r 65a90c8e11ee -r 8cb81d75730c hgext/mq.py --- a/hgext/mq.py Mon Feb 08 19:44:04 2010 +0100 +++ b/hgext/mq.py Sun Feb 07 10:47:54 2010 -0500 @@ -68,7 +68,7 @@ return self.rev + ':' + self.name class patchheader(object): - def __init__(self, pf): + def __init__(self, pf, plainmode=False): def eatdiff(lines): while lines: l = lines[-1] @@ -90,6 +90,7 @@ comments = [] user = None date = None + parent = None format = None subject = None diffstart = 0 @@ -112,6 +113,8 @@ user = line[7:] elif line.startswith("# Date "): date = line[7:] + elif line.startswith("# Parent "): + parent = line[9:] elif not line.startswith("# ") and line: message.append(line) format = None @@ -126,6 +129,10 @@ line.startswith("from: "))): user = line[6:] format = "tag" + elif (format != "tagdone" and (line.startswith("Date: ") or + line.startswith("date: "))): + date = line[6:] + format = "tag" elif format == "tag" and line == "": # when looking for tags (subject: from: etc) they # end once you find a blank line in the source @@ -148,7 +155,9 @@ self.comments = comments self.user = user self.date = date + self.parent = parent self.haspatch = diffstart > 1 + self.plainmode = plainmode def setuser(self, user): if not self.updateheader(['From: ', '# User '], user): @@ -156,7 +165,7 @@ patchheaderat = self.comments.index('# HG changeset patch') self.comments.insert(patchheaderat + 1, '# User ' + user) except ValueError: - if self._hasheader(['Date: ']): + if self.plainmode or self._hasheader(['Date: ']): self.comments = ['From: ' + user] + self.comments else: tmp = ['# HG changeset patch', '# User ' + user, ''] @@ -169,13 +178,22 @@ patchheaderat = self.comments.index('# HG changeset patch') self.comments.insert(patchheaderat + 1, '# Date ' + date) except ValueError: - if self._hasheader(['From: ']): + if self.plainmode or self._hasheader(['From: ']): self.comments = ['Date: ' + date] + self.comments else: tmp = ['# HG changeset patch', '# Date ' + date, ''] self.comments = tmp + self.comments self.date = date + def setparent(self, parent): + if not self.updateheader(['# Parent '], parent): + try: + patchheaderat = self.comments.index('# HG changeset patch') + self.comments.insert(patchheaderat + 1, '# Parent ' + parent) + except ValueError: + pass + self.parent = parent + def setmessage(self, message): if self.comments: self._delmsg() @@ -245,6 +263,7 @@ self.gitmode = gitmode and 'yes' or 'no' except error.ConfigError: self.gitmode = ui.config('mq', 'git', 'auto').lower() + self.plainmode = ui.configbool('mq', 'plain', False) @util.propertycache def applied(self): @@ -509,7 +528,7 @@ if n is None: raise util.Abort(_("repo commit failed")) try: - ph = patchheader(mergeq.join(patch)) + ph = patchheader(mergeq.join(patch), self.plainmode) except: raise util.Abort(_("unable to read %s") % patch) @@ -639,7 +658,7 @@ pf = os.path.join(patchdir, patchname) try: - ph = patchheader(self.join(patchname)) + ph = patchheader(self.join(patchname), self.plainmode) except: self.ui.warn(_("unable to read %s\n") % patchname) err = 1 @@ -831,14 +850,20 @@ # if patch file write fails, abort early p = self.opener(patchfn, "w") try: - if date: + if self.plainmode: + if user: + p.write("From: " + user + "\n") + if not date: + p.write("\n") + if date: + p.write("Date: %d %d\n\n" % date) + else: p.write("# HG changeset patch\n") + p.write("# Parent " + hex(repo[None].parents()[0].node()) + "\n") if user: p.write("# User " + user + "\n") - p.write("# Date %d %d\n\n" % date) - elif user: - p.write("From: " + user + "\n\n") - + if date: + p.write("# Date %s %s\n\n" % date) if hasattr(msg, '__call__'): msg = msg() commitmsg = msg and msg or ("[mq]: %s" % patchfn) @@ -1214,7 +1239,7 @@ cparents = repo.changelog.parents(top) patchparent = self.qparents(repo, top) - ph = patchheader(self.join(patchfn)) + ph = patchheader(self.join(patchfn), self.plainmode) diffopts = self.diffopts({'git': opts.get('git')}, patchfn) if msg: ph.setmessage(msg) @@ -1222,6 +1247,7 @@ ph.setuser(newuser) if newdate: ph.setdate(newdate) + ph.setparent(hex(patchparent)) # only commit new patch when write is complete patchf = self.opener(patchfn, 'w', atomictemp=True) @@ -1406,7 +1432,7 @@ summary=False): def displayname(pfx, patchname): if summary: - ph = patchheader(self.join(patchname)) + ph = patchheader(self.join(patchname), self.plainmode) msg = ph.message and ph.message[0] or '' if self.ui.interactive(): width = util.termwidth() - len(pfx) - len(patchname) - 2 @@ -2012,7 +2038,7 @@ if message: raise util.Abort(_('option "-e" incompatible with "-m" or "-l"')) patch = q.applied[-1].name - ph = patchheader(q.join(patch)) + ph = patchheader(q.join(patch), q.plainmode) message = ui.edit('\n'.join(ph.message), ph.user or ui.username()) setupheaderopts(ui, opts) ret = q.refresh(repo, pats, msg=message, **opts) @@ -2074,7 +2100,7 @@ for p in patches: if not message: - ph = patchheader(q.join(p)) + ph = patchheader(q.join(p), q.plainmode) if ph.message: messages.append(ph.message) pf = q.join(p) @@ -2084,7 +2110,7 @@ patch.updatedir(ui, repo, files) if not message: - ph = patchheader(q.join(parent)) + ph = patchheader(q.join(parent), q.plainmode) message, user = ph.message, ph.user for msg in messages: message.append('* * *') @@ -2167,7 +2193,7 @@ ui.write('no patches applied\n') return 1 patch = q.lookup('qtip') - ph = patchheader(repo.mq.join(patch)) + ph = patchheader(q.join(patch), q.plainmode) ui.write('\n'.join(ph.message) + '\n')