hgext/mq.py
changeset 3085 dc784839516d
parent 3084 fd1479e30aaf
child 3088 7fa3d38a99b6
equal deleted inserted replaced
3084:fd1479e30aaf 3085:dc784839516d
   481                 err = 1
   481                 err = 1
   482                 break
   482                 break
   483         tr.close()
   483         tr.close()
   484         return (err, n)
   484         return (err, n)
   485 
   485 
   486     def delete(self, repo, patches, keep=False):
   486     def delete(self, repo, patches, opts):
   487         realpatches = []
   487         realpatches = []
       
   488         appliedbase = 0
       
   489         forget = opts.get('forget')
   488         for patch in patches:
   490         for patch in patches:
   489             patch = self.lookup(patch, strict=True)
   491             patch = self.lookup(patch, strict=True)
   490             info = self.isapplied(patch)
   492             info = self.isapplied(patch)
   491             if info:
   493             if info and not forget:
   492                 raise util.Abort(_("cannot delete applied patch %s") % patch)
   494                 raise util.Abort(_("cannot delete applied patch %s") % patch)
   493             if patch not in self.series:
   495             if patch not in self.series:
   494                 raise util.Abort(_("patch %s not in series file") % patch)
   496                 raise util.Abort(_("patch %s not in series file") % patch)
       
   497             if forget:
       
   498                 if not info:
       
   499                     raise util.Abort(_("cannot forget unapplied patch %s") % patch)
       
   500                 if info[0] != appliedbase:
       
   501                     raise util.Abort(_("patch %s not at base") % patch)
       
   502                 appliedbase += 1
   495             realpatches.append(patch)
   503             realpatches.append(patch)
   496 
   504 
   497         if not keep:
   505         if not opts.get('keep'):
   498             r = self.qrepo()
   506             r = self.qrepo()
   499             if r:
   507             if r:
   500                 r.remove(realpatches, True)
   508                 r.remove(realpatches, True)
   501             else:
   509             else:
   502                 os.unlink(self.join(patch))
   510                 os.unlink(self.join(patch))
   503 
   511 
       
   512         if forget:
       
   513             del self.applied[:appliedbase]
       
   514             self.applied_dirty = 1
   504         indices = [self.find_series(p) for p in realpatches]
   515         indices = [self.find_series(p) for p in realpatches]
   505         indices.sort()
   516         indices.sort()
   506         for i in indices[-1::-1]:
   517         for i in indices[-1::-1]:
   507             del self.full_series[i]
   518             del self.full_series[i]
   508         self.parse_series()
   519         self.parse_series()
  1304             qrepo.add(added)
  1315             qrepo.add(added)
  1305 
  1316 
  1306 def delete(ui, repo, patch, *patches, **opts):
  1317 def delete(ui, repo, patch, *patches, **opts):
  1307     """remove patches from queue
  1318     """remove patches from queue
  1308 
  1319 
  1309     The patches must not be applied.
  1320     With --forget, mq will stop managing the named patches. The
  1310     With -k, the patch files are preserved in the patch directory."""
  1321     patches must be applied and at the base of the stack. This option
       
  1322     is useful when the patches have been applied upstream.
       
  1323 
       
  1324     Otherwise, the patches must not be applied.
       
  1325 
       
  1326     With --keep, the patch files are preserved in the patch directory."""
  1311     q = repo.mq
  1327     q = repo.mq
  1312     q.delete(repo, (patch,) + patches, keep=opts.get('keep'))
  1328     q.delete(repo, (patch,) + patches, opts)
  1313     q.save_dirty()
  1329     q.save_dirty()
  1314     return 0
  1330     return 0
  1315 
  1331 
  1316 def applied(ui, repo, patch=None, **opts):
  1332 def applied(ui, repo, patch=None, **opts):
  1317     """print the patches already applied"""
  1333     """print the patches already applied"""
  1915                [('I', 'include', [], _('include names matching the given patterns')),
  1931                [('I', 'include', [], _('include names matching the given patterns')),
  1916                 ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1932                 ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1917                'hg qdiff [-I] [-X] [FILE]...'),
  1933                'hg qdiff [-I] [-X] [FILE]...'),
  1918     "qdelete|qremove|qrm":
  1934     "qdelete|qremove|qrm":
  1919         (delete,
  1935         (delete,
  1920          [('k', 'keep', None, _('keep patch file'))],
  1936          [('f', 'forget', None, _('stop managing an applied patch')),
  1921           'hg qdelete [-k] PATCH'),
  1937           ('k', 'keep', None, _('keep patch file'))],
       
  1938           'hg qdelete [-f] [-k] PATCH'),
  1922     'qfold':
  1939     'qfold':
  1923         (fold,
  1940         (fold,
  1924          [('e', 'edit', None, _('edit patch header')),
  1941          [('e', 'edit', None, _('edit patch header')),
  1925           ('k', 'keep', None, _('keep folded patch files')),
  1942           ('k', 'keep', None, _('keep folded patch files')),
  1926           ('m', 'message', '', _('set patch header to <text>')),
  1943           ('m', 'message', '', _('set patch header to <text>')),