hgext/mq.py
changeset 14592 fc94add69d9f
parent 14591 b49099712d30
child 14593 599a72895c0d
equal deleted inserted replaced
14591:b49099712d30 14592:fc94add69d9f
   265         except IOError:
   265         except IOError:
   266             curpath = os.path.join(path, 'patches')
   266             curpath = os.path.join(path, 'patches')
   267         self.path = patchdir or curpath
   267         self.path = patchdir or curpath
   268         self.opener = scmutil.opener(self.path)
   268         self.opener = scmutil.opener(self.path)
   269         self.ui = ui
   269         self.ui = ui
   270         self.applied_dirty = 0
   270         self.applieddirty = 0
   271         self.series_dirty = 0
   271         self.series_dirty = 0
   272         self.added = []
   272         self.added = []
   273         self.seriespath = "series"
   273         self.seriespath = "series"
   274         self.statuspath = "status"
   274         self.statuspath = "status"
   275         self.guardspath = "guards"
   275         self.guardspath = "guards"
   319 
   319 
   320     def invalidate(self):
   320     def invalidate(self):
   321         for a in 'applied fullseries series seriesguards'.split():
   321         for a in 'applied fullseries series seriesguards'.split():
   322             if a in self.__dict__:
   322             if a in self.__dict__:
   323                 delattr(self, a)
   323                 delattr(self, a)
   324         self.applied_dirty = 0
   324         self.applieddirty = 0
   325         self.series_dirty = 0
   325         self.series_dirty = 0
   326         self.guardsdirty = False
   326         self.guardsdirty = False
   327         self.activeguards = None
   327         self.activeguards = None
   328 
   328 
   329     def diffopts(self, opts={}, patchfn=None):
   329     def diffopts(self, opts={}, patchfn=None):
   493         def write_list(items, path):
   493         def write_list(items, path):
   494             fp = self.opener(path, 'w')
   494             fp = self.opener(path, 'w')
   495             for i in items:
   495             for i in items:
   496                 fp.write("%s\n" % i)
   496                 fp.write("%s\n" % i)
   497             fp.close()
   497             fp.close()
   498         if self.applied_dirty:
   498         if self.applieddirty:
   499             write_list(map(str, self.applied), self.statuspath)
   499             write_list(map(str, self.applied), self.statuspath)
   500         if self.series_dirty:
   500         if self.series_dirty:
   501             write_list(self.fullseries, self.seriespath)
   501             write_list(self.fullseries, self.seriespath)
   502         if self.guardsdirty:
   502         if self.guardsdirty:
   503             write_list(self.activeguards, self.guardspath)
   503             write_list(self.activeguards, self.guardspath)
   585             #
   585             #
   586             pname = ".hg.patches.merge.marker"
   586             pname = ".hg.patches.merge.marker"
   587             n = repo.commit('[mq]: merge marker', force=True)
   587             n = repo.commit('[mq]: merge marker', force=True)
   588             self.removeundo(repo)
   588             self.removeundo(repo)
   589             self.applied.append(statusentry(n, pname))
   589             self.applied.append(statusentry(n, pname))
   590             self.applied_dirty = 1
   590             self.applieddirty = 1
   591 
   591 
   592         head = self.qparents(repo)
   592         head = self.qparents(repo)
   593 
   593 
   594         for patch in series:
   594         for patch in series:
   595             patch = mergeq.lookup(patch, strict=True)
   595             patch = mergeq.lookup(patch, strict=True)
   606                 return (1, None)
   606                 return (1, None)
   607             rev = info[1]
   607             rev = info[1]
   608             err, head = self.mergeone(repo, mergeq, head, patch, rev, diffopts)
   608             err, head = self.mergeone(repo, mergeq, head, patch, rev, diffopts)
   609             if head:
   609             if head:
   610                 self.applied.append(statusentry(head, patch))
   610                 self.applied.append(statusentry(head, patch))
   611                 self.applied_dirty = 1
   611                 self.applieddirty = 1
   612             if err:
   612             if err:
   613                 return (err, head)
   613                 return (err, head)
   614         self.savedirty()
   614         self.savedirty()
   615         return (0, head)
   615         return (0, head)
   616 
   616 
   740                 os.unlink(self.join(p))
   740                 os.unlink(self.join(p))
   741 
   741 
   742         if numrevs:
   742         if numrevs:
   743             qfinished = self.applied[:numrevs]
   743             qfinished = self.applied[:numrevs]
   744             del self.applied[:numrevs]
   744             del self.applied[:numrevs]
   745             self.applied_dirty = 1
   745             self.applieddirty = 1
   746 
   746 
   747         unknown = []
   747         unknown = []
   748 
   748 
   749         for (i, p) in sorted([(self.findseries(p), p) for p in patches],
   749         for (i, p) in sorted([(self.findseries(p), p) for p in patches],
   750                              reverse=True):
   750                              reverse=True):
   947                 try:
   947                 try:
   948                     self.fullseries[insert:insert] = [patchfn]
   948                     self.fullseries[insert:insert] = [patchfn]
   949                     self.applied.append(statusentry(n, patchfn))
   949                     self.applied.append(statusentry(n, patchfn))
   950                     self.parseseries()
   950                     self.parseseries()
   951                     self.series_dirty = 1
   951                     self.series_dirty = 1
   952                     self.applied_dirty = 1
   952                     self.applieddirty = 1
   953                     if msg:
   953                     if msg:
   954                         msg = msg + "\n\n"
   954                         msg = msg + "\n\n"
   955                         p.write(msg)
   955                         p.write(msg)
   956                     if commitfiles:
   956                     if commitfiles:
   957                         parent = self.qparents(repo, n)
   957                         parent = self.qparents(repo, n)
  1160                 del self.fullseries[index]
  1160                 del self.fullseries[index]
  1161                 self.fullseries.insert(start, fullpatch)
  1161                 self.fullseries.insert(start, fullpatch)
  1162                 self.parseseries()
  1162                 self.parseseries()
  1163                 self.series_dirty = 1
  1163                 self.series_dirty = 1
  1164 
  1164 
  1165             self.applied_dirty = 1
  1165             self.applieddirty = 1
  1166             if start > 0:
  1166             if start > 0:
  1167                 self.checktoppatch(repo)
  1167                 self.checktoppatch(repo)
  1168             if not patch:
  1168             if not patch:
  1169                 patch = self.series[start]
  1169                 patch = self.series[start]
  1170                 end = start + 1
  1170                 end = start + 1
  1263                     if entry.node in parents:
  1263                     if entry.node in parents:
  1264                         needupdate = True
  1264                         needupdate = True
  1265                         break
  1265                         break
  1266                 update = needupdate
  1266                 update = needupdate
  1267 
  1267 
  1268             self.applied_dirty = 1
  1268             self.applieddirty = 1
  1269             end = len(self.applied)
  1269             end = len(self.applied)
  1270             rev = self.applied[start].node
  1270             rev = self.applied[start].node
  1271             if update:
  1271             if update:
  1272                 top = self.checktoppatch(repo)[0]
  1272                 top = self.checktoppatch(repo)[0]
  1273 
  1273 
  1492                 user = ph.user or changes[1]
  1492                 user = ph.user or changes[1]
  1493 
  1493 
  1494                 # assumes strip can roll itself back if interrupted
  1494                 # assumes strip can roll itself back if interrupted
  1495                 repo.dirstate.setparents(*cparents)
  1495                 repo.dirstate.setparents(*cparents)
  1496                 self.applied.pop()
  1496                 self.applied.pop()
  1497                 self.applied_dirty = 1
  1497                 self.applieddirty = 1
  1498                 self.strip(repo, [top], update=False,
  1498                 self.strip(repo, [top], update=False,
  1499                            backup='strip')
  1499                            backup='strip')
  1500             except:
  1500             except:
  1501                 repo.dirstate.invalidate()
  1501                 repo.dirstate.invalidate()
  1502                 raise
  1502                 raise
  1640         self.ui.warn(_("restoring status: %s\n") % lines[0])
  1640         self.ui.warn(_("restoring status: %s\n") % lines[0])
  1641         self.fullseries = series
  1641         self.fullseries = series
  1642         self.applied = applied
  1642         self.applied = applied
  1643         self.parseseries()
  1643         self.parseseries()
  1644         self.series_dirty = 1
  1644         self.series_dirty = 1
  1645         self.applied_dirty = 1
  1645         self.applieddirty = 1
  1646         heads = repo.changelog.heads()
  1646         heads = repo.changelog.heads()
  1647         if delete:
  1647         if delete:
  1648             if rev not in heads:
  1648             if rev not in heads:
  1649                 self.ui.warn(_("save entry has children, leaving it alone\n"))
  1649                 self.ui.warn(_("save entry has children, leaving it alone\n"))
  1650             else:
  1650             else:
  1688         n = repo.commit(msg, force=True)
  1688         n = repo.commit(msg, force=True)
  1689         if not n:
  1689         if not n:
  1690             self.ui.warn(_("repo commit failed\n"))
  1690             self.ui.warn(_("repo commit failed\n"))
  1691             return 1
  1691             return 1
  1692         self.applied.append(statusentry(n, '.hg.patches.save.line'))
  1692         self.applied.append(statusentry(n, '.hg.patches.save.line'))
  1693         self.applied_dirty = 1
  1693         self.applieddirty = 1
  1694         self.removeundo(repo)
  1694         self.removeundo(repo)
  1695 
  1695 
  1696     def fullseriesend(self):
  1696     def fullseriesend(self):
  1697         if self.applied:
  1697         if self.applied:
  1698             p = self.applied[-1].name
  1698             p = self.applied[-1].name
  1799                 self.applied.insert(0, se)
  1799                 self.applied.insert(0, se)
  1800 
  1800 
  1801                 self.added.append(patchname)
  1801                 self.added.append(patchname)
  1802                 patchname = None
  1802                 patchname = None
  1803             self.parseseries()
  1803             self.parseseries()
  1804             self.applied_dirty = 1
  1804             self.applieddirty = 1
  1805             self.series_dirty = True
  1805             self.series_dirty = True
  1806 
  1806 
  1807         for i, filename in enumerate(files):
  1807         for i, filename in enumerate(files):
  1808             if existing:
  1808             if existing:
  1809                 if filename == '-':
  1809                 if filename == '-':
  2600     q.series_dirty = 1
  2600     q.series_dirty = 1
  2601 
  2601 
  2602     info = q.isapplied(patch)
  2602     info = q.isapplied(patch)
  2603     if info:
  2603     if info:
  2604         q.applied[info[0]] = statusentry(info[1], name)
  2604         q.applied[info[0]] = statusentry(info[1], name)
  2605     q.applied_dirty = 1
  2605     q.applieddirty = 1
  2606 
  2606 
  2607     destdir = os.path.dirname(absdest)
  2607     destdir = os.path.dirname(absdest)
  2608     if not os.path.isdir(destdir):
  2608     if not os.path.isdir(destdir):
  2609         os.makedirs(destdir)
  2609         os.makedirs(destdir)
  2610     util.rename(q.join(patch), absdest)
  2610     util.rename(q.join(patch), absdest)
  2743     q = repo.mq
  2743     q = repo.mq
  2744     if q.applied:
  2744     if q.applied:
  2745         # refresh queue state if we're about to strip
  2745         # refresh queue state if we're about to strip
  2746         # applied patches
  2746         # applied patches
  2747         if cl.rev(repo.lookup('qtip')) in strippedrevs:
  2747         if cl.rev(repo.lookup('qtip')) in strippedrevs:
  2748             q.applied_dirty = True
  2748             q.applieddirty = True
  2749             start = 0
  2749             start = 0
  2750             end = len(q.applied)
  2750             end = len(q.applied)
  2751             for i, statusentry in enumerate(q.applied):
  2751             for i, statusentry in enumerate(q.applied):
  2752                 if statusentry.node in rootnodes:
  2752                 if statusentry.node in rootnodes:
  2753                     # if one of the stripped roots is an applied
  2753                     # if one of the stripped roots is an applied