hgext/mq.py
changeset 2818 bdc067ff6cf5
parent 2816 52516e48e3f3
child 2819 766ecdc83e43
equal deleted inserted replaced
2817:ff3edd1c1e27 2818:bdc067ff6cf5
    37 
    37 
    38 versionstr = "0.45"
    38 versionstr = "0.45"
    39 
    39 
    40 commands.norepo += " qclone qversion"
    40 commands.norepo += " qclone qversion"
    41 
    41 
    42 class StatusEntry:
    42 class statusentry:
    43     def __init__(self, rev, name=None):
    43     def __init__(self, rev, name=None):
    44         if not name:
    44         if not name:
    45             fields = rev.split(':')
    45             fields = rev.split(':')
    46             if len(fields) == 2:
    46             if len(fields) == 2:
    47                 self.rev, self.name = fields
    47                 self.rev, self.name = fields
    72         if os.path.exists(os.path.join(self.path, self.series_path)):
    72         if os.path.exists(os.path.join(self.path, self.series_path)):
    73             self.full_series = self.opener(self.series_path).read().splitlines()
    73             self.full_series = self.opener(self.series_path).read().splitlines()
    74         self.parse_series()
    74         self.parse_series()
    75 
    75 
    76         if os.path.exists(os.path.join(self.path, self.status_path)):
    76         if os.path.exists(os.path.join(self.path, self.status_path)):
    77             self.applied = [StatusEntry(l)
    77             self.applied = [statusentry(l)
    78                             for l in self.opener(self.status_path).read().splitlines()]
    78                             for l in self.opener(self.status_path).read().splitlines()]
    79 
    79 
    80     def find_series(self, patch):
    80     def find_series(self, patch):
    81         pre = re.compile("(\s*)([^#]+)")
    81         pre = re.compile("(\s*)([^#]+)")
    82         index = 0
    82         index = 0
   245             # the first patch in the queue is never a merge patch
   245             # the first patch in the queue is never a merge patch
   246             #
   246             #
   247             pname = ".hg.patches.merge.marker"
   247             pname = ".hg.patches.merge.marker"
   248             n = repo.commit(None, '[mq]: merge marker', user=None, force=1,
   248             n = repo.commit(None, '[mq]: merge marker', user=None, force=1,
   249                             wlock=wlock)
   249                             wlock=wlock)
   250             self.applied.append(StatusEntry(revlog.hex(n), pname))
   250             self.applied.append(statusentry(revlog.hex(n), pname))
   251             self.applied_dirty = 1
   251             self.applied_dirty = 1
   252 
   252 
   253         head = self.qparents(repo)
   253         head = self.qparents(repo)
   254 
   254 
   255         for patch in series:
   255         for patch in series:
   263                 self.ui.warn("patch %s is not applied\n" % patch)
   263                 self.ui.warn("patch %s is not applied\n" % patch)
   264                 return (1, None)
   264                 return (1, None)
   265             rev = revlog.bin(info[1])
   265             rev = revlog.bin(info[1])
   266             (err, head) = self.mergeone(repo, mergeq, head, patch, rev, wlock)
   266             (err, head) = self.mergeone(repo, mergeq, head, patch, rev, wlock)
   267             if head:
   267             if head:
   268                 self.applied.append(StatusEntry(revlog.hex(head), patch))
   268                 self.applied.append(statusentry(revlog.hex(head), patch))
   269                 self.applied_dirty = 1
   269                 self.applied_dirty = 1
   270             if err:
   270             if err:
   271                 return (err, head)
   271                 return (err, head)
   272         return (0, head)
   272         return (0, head)
   273 
   273 
   358 
   358 
   359             if n == None:
   359             if n == None:
   360                 raise util.Abort(_("repo commit failed"))
   360                 raise util.Abort(_("repo commit failed"))
   361 
   361 
   362             if update_status:
   362             if update_status:
   363                 self.applied.append(StatusEntry(revlog.hex(n), patch))
   363                 self.applied.append(statusentry(revlog.hex(n), patch))
   364 
   364 
   365             if patcherr:
   365             if patcherr:
   366                 if not patchfound:
   366                 if not patchfound:
   367                     self.ui.warn("patch %s is empty\n" % patch)
   367                     self.ui.warn("patch %s is empty\n" % patch)
   368                     err = 0
   368                     err = 0
   427             n = repo.commit(commitfiles,
   427             n = repo.commit(commitfiles,
   428                             "New patch: %s" % patch, force=True, wlock=wlock)
   428                             "New patch: %s" % patch, force=True, wlock=wlock)
   429         if n == None:
   429         if n == None:
   430             raise util.Abort(_("repo commit failed"))
   430             raise util.Abort(_("repo commit failed"))
   431         self.full_series[insert:insert] = [patch]
   431         self.full_series[insert:insert] = [patch]
   432         self.applied.append(StatusEntry(revlog.hex(n), patch))
   432         self.applied.append(statusentry(revlog.hex(n), patch))
   433         self.parse_series()
   433         self.parse_series()
   434         self.series_dirty = 1
   434         self.series_dirty = 1
   435         self.applied_dirty = 1
   435         self.applied_dirty = 1
   436         p = self.opener(patch, "w")
   436         p = self.opener(patch, "w")
   437         if msg:
   437         if msg:
   902             else:
   902             else:
   903                 message = msg
   903                 message = msg
   904 
   904 
   905             self.strip(repo, top, update=False, backup='strip', wlock=wlock)
   905             self.strip(repo, top, update=False, backup='strip', wlock=wlock)
   906             n = repo.commit(filelist, message, changes[1], force=1, wlock=wlock)
   906             n = repo.commit(filelist, message, changes[1], force=1, wlock=wlock)
   907             self.applied[-1] = StatusEntry(revlog.hex(n), patch)
   907             self.applied[-1] = statusentry(revlog.hex(n), patch)
   908             self.applied_dirty = 1
   908             self.applied_dirty = 1
   909         else:
   909         else:
   910             commands.dodiff(patchf, self.ui, repo, patchparent, None)
   910             commands.dodiff(patchf, self.ui, repo, patchparent, None)
   911             patchf.close()
   911             patchf.close()
   912             self.pop(repo, force=True, wlock=wlock)
   912             self.pop(repo, force=True, wlock=wlock)
   985                 l = lines[i].rstrip()
   985                 l = lines[i].rstrip()
   986                 l = l[10:].split(' ')
   986                 l = l[10:].split(' ')
   987                 qpp = [ hg.bin(x) for x in l ]
   987                 qpp = [ hg.bin(x) for x in l ]
   988             elif datastart != None:
   988             elif datastart != None:
   989                 l = lines[i].rstrip()
   989                 l = lines[i].rstrip()
   990                 se = StatusEntry(l)
   990                 se = statusentry(l)
   991                 file_ = se.name
   991                 file_ = se.name
   992                 if se.rev:
   992                 if se.rev:
   993                     applied.append(se)
   993                     applied.append(se)
   994                 series.append(file_)
   994                 series.append(file_)
   995         if datastart == None:
   995         if datastart == None:
  1046                    "\n".join(ar) + '\n' or "")
  1046                    "\n".join(ar) + '\n' or "")
  1047         n = repo.commit(None, text, user=None, force=1)
  1047         n = repo.commit(None, text, user=None, force=1)
  1048         if not n:
  1048         if not n:
  1049             self.ui.warn("repo commit failed\n")
  1049             self.ui.warn("repo commit failed\n")
  1050             return 1
  1050             return 1
  1051         self.applied.append(StatusEntry(revlog.hex(n),'.hg.patches.save.line'))
  1051         self.applied.append(statusentry(revlog.hex(n),'.hg.patches.save.line'))
  1052         self.applied_dirty = 1
  1052         self.applied_dirty = 1
  1053 
  1053 
  1054     def full_series_end(self):
  1054     def full_series_end(self):
  1055         if len(self.applied) > 0:
  1055         if len(self.applied) > 0:
  1056             p = self.applied[-1].name
  1056             p = self.applied[-1].name
  1480     q.parse_series()
  1480     q.parse_series()
  1481     q.series_dirty = 1
  1481     q.series_dirty = 1
  1482 
  1482 
  1483     info = q.isapplied(patch)
  1483     info = q.isapplied(patch)
  1484     if info:
  1484     if info:
  1485         q.applied[info[0]] = StatusEntry(info[1], name)
  1485         q.applied[info[0]] = statusentry(info[1], name)
  1486     q.applied_dirty = 1
  1486     q.applied_dirty = 1
  1487 
  1487 
  1488     util.rename(os.path.join(q.path, patch), absdest)
  1488     util.rename(os.path.join(q.path, patch), absdest)
  1489     r = q.qrepo()
  1489     r = q.qrepo()
  1490     if r:
  1490     if r:
  1550     """print the version number of the mq extension"""
  1550     """print the version number of the mq extension"""
  1551     ui.write("mq version %s\n" % versionstr)
  1551     ui.write("mq version %s\n" % versionstr)
  1552     return 0
  1552     return 0
  1553 
  1553 
  1554 def reposetup(ui, repo):
  1554 def reposetup(ui, repo):
  1555     class MqRepo(repo.__class__):
  1555     class mqrepo(repo.__class__):
  1556         def tags(self):
  1556         def tags(self):
  1557             if self.tagscache:
  1557             if self.tagscache:
  1558                 return self.tagscache
  1558                 return self.tagscache
  1559 
  1559 
  1560             tagscache = super(MqRepo, self).tags()
  1560             tagscache = super(mqrepo, self).tags()
  1561 
  1561 
  1562             q = self.mq
  1562             q = self.mq
  1563             if not q.applied:
  1563             if not q.applied:
  1564                 return tagscache
  1564                 return tagscache
  1565 
  1565 
  1572                 else:
  1572                 else:
  1573                     tagscache[patch[1]] = revlog.bin(patch[0])
  1573                     tagscache[patch[1]] = revlog.bin(patch[0])
  1574 
  1574 
  1575             return tagscache
  1575             return tagscache
  1576 
  1576 
  1577     repo.__class__ = MqRepo
  1577     repo.__class__ = mqrepo
  1578     repo.mq = queue(ui, repo.join(""))
  1578     repo.mq = queue(ui, repo.join(""))
  1579 
  1579 
  1580 cmdtable = {
  1580 cmdtable = {
  1581     "qapplied": (applied, [], 'hg qapplied [PATCH]'),
  1581     "qapplied": (applied, [], 'hg qapplied [PATCH]'),
  1582     "qclone": (clone,
  1582     "qclone": (clone,