hgext/mq.py
changeset 2757 787e18b84893
parent 2756 caa6d992608b
parent 2752 5dfeda163bb7
child 2765 0327bd1c831c
equal deleted inserted replaced
2756:caa6d992608b 2757:787e18b84893
   380                 err = 1
   380                 err = 1
   381                 break
   381                 break
   382         tr.close()
   382         tr.close()
   383         return (err, n)
   383         return (err, n)
   384 
   384 
   385     def delete(self, repo, patch):
   385     def delete(self, repo, patch, force=False):
   386         patch = self.lookup(patch, strict=True)
   386         patch = self.lookup(patch, strict=True)
   387         info = self.isapplied(patch)
   387         info = self.isapplied(patch)
   388         if info:
   388         if info:
   389             raise util.Abort(_("cannot delete applied patch %s") % patch)
   389             raise util.Abort(_("cannot delete applied patch %s") % patch)
   390         if patch not in self.series:
   390         if patch not in self.series:
   391             raise util.Abort(_("patch %s not in series file") % patch)
   391             raise util.Abort(_("patch %s not in series file") % patch)
       
   392         if force:
       
   393             r = self.qrepo()
       
   394             if r:
       
   395                 r.remove([patch], True)
       
   396             else:
       
   397                 os.unlink(os.path.join(self.path, patch))
   392         i = self.find_series(patch)
   398         i = self.find_series(patch)
   393         del self.full_series[i]
   399         del self.full_series[i]
   394         self.read_series(self.full_series)
   400         self.read_series(self.full_series)
   395         self.series_dirty = 1
   401         self.series_dirty = 1
   396 
   402 
  1163         qrepo = self.qrepo()
  1169         qrepo = self.qrepo()
  1164         if qrepo:
  1170         if qrepo:
  1165             qrepo.add(added)
  1171             qrepo.add(added)
  1166 
  1172 
  1167 def delete(ui, repo, patch, **opts):
  1173 def delete(ui, repo, patch, **opts):
  1168     """remove a patch from the series file"""
  1174     """remove a patch from the series file
       
  1175 
       
  1176     The patch must not be applied.
       
  1177     With -f, deletes the patch file as well as the series entry."""
  1169     q = repo.mq
  1178     q = repo.mq
  1170     q.delete(repo, patch)
  1179     q.delete(repo, patch, force=opts.get('force'))
  1171     q.save_dirty()
  1180     q.save_dirty()
  1172     return 0
  1181     return 0
  1173 
  1182 
  1174 def applied(ui, repo, patch=None, **opts):
  1183 def applied(ui, repo, patch=None, **opts):
  1175     """print the patches already applied"""
  1184     """print the patches already applied"""
  1446         q = repo.mq
  1455         q = repo.mq
  1447     q.pop(repo, patch, force=opts['force'], update=localupdate, all=opts['all'])
  1456     q.pop(repo, patch, force=opts['force'], update=localupdate, all=opts['all'])
  1448     q.save_dirty()
  1457     q.save_dirty()
  1449     return 0
  1458     return 0
  1450 
  1459 
       
  1460 def rename(ui, repo, patch, name=None, **opts):
       
  1461     """rename a patch
       
  1462 
       
  1463     With one argument, renames the current patch to PATCH1.
       
  1464     With two arguments, renames PATCH1 to PATCH2."""
       
  1465 
       
  1466     q = repo.mq
       
  1467 
       
  1468     if not name:
       
  1469         name = patch
       
  1470         patch = None
       
  1471 
       
  1472     if name in q.series:
       
  1473         raise util.Abort(_('A patch named %s already exists in the series file') % name)
       
  1474 
       
  1475     absdest = os.path.join(q.path, name)
       
  1476     if os.path.exists(absdest):
       
  1477         raise util.Abort(_('%s already exists') % absdest)
       
  1478     
       
  1479     if patch:
       
  1480         patch = q.lookup(patch)
       
  1481     else:
       
  1482         if not q.applied:
       
  1483             ui.write(_('No patches applied\n'))
       
  1484             return
       
  1485         patch = q.lookup('qtip')
       
  1486 
       
  1487     if ui.verbose:
       
  1488         ui.write('Renaming %s to %s\n' % (patch, name))
       
  1489     i = q.find_series(patch)
       
  1490     q.full_series[i] = name
       
  1491     q.read_series(q.full_series)
       
  1492     q.series_dirty = 1
       
  1493 
       
  1494     info = q.isapplied(patch)
       
  1495     if info:
       
  1496         q.applied[info[0]] = info[1] + ':' + name
       
  1497     q.applied_dirty = 1
       
  1498 
       
  1499     util.rename(os.path.join(q.path, patch), absdest)
       
  1500     r = q.qrepo()
       
  1501     if r:
       
  1502         wlock = r.wlock()
       
  1503         if r.dirstate.state(name) == 'r':
       
  1504             r.undelete([name], wlock)
       
  1505         r.copy(patch, name, wlock)
       
  1506         r.remove([patch], False, wlock)
       
  1507 
       
  1508     q.save_dirty()
       
  1509 
  1451 def restore(ui, repo, rev, **opts):
  1510 def restore(ui, repo, rev, **opts):
  1452     """restore the queue state saved by a rev"""
  1511     """restore the queue state saved by a rev"""
  1453     rev = repo.lookup(rev)
  1512     rev = repo.lookup(rev)
  1454     q = repo.mq
  1513     q = repo.mq
  1455     q.restore(repo, rev, delete=opts['delete'],
  1514     q.restore(repo, rev, delete=opts['delete'],
  1544     "qcommit|qci":
  1603     "qcommit|qci":
  1545         (commit,
  1604         (commit,
  1546          commands.table["^commit|ci"][1],
  1605          commands.table["^commit|ci"][1],
  1547          'hg qcommit [OPTION]... [FILE]...'),
  1606          'hg qcommit [OPTION]... [FILE]...'),
  1548     "^qdiff": (diff, [], 'hg qdiff [FILE]...'),
  1607     "^qdiff": (diff, [], 'hg qdiff [FILE]...'),
  1549     "qdelete": (delete, [], 'hg qdelete PATCH'),
  1608     "qdelete":
       
  1609         (delete,
       
  1610          [('f', 'force', None, _('delete patch file'))],
       
  1611           'hg qdelete [-f] PATCH'),
  1550     'qfold':
  1612     'qfold':
  1551         (fold,
  1613         (fold,
  1552          [('e', 'edit', None, _('edit patch header')),
  1614          [('e', 'edit', None, _('edit patch header')),
  1553           ('m', 'message', '', _('set patch header to <text>')),
  1615           ('m', 'message', '', _('set patch header to <text>')),
  1554           ('l', 'logfile', '', _('set patch header to contents of <file>'))],
  1616           ('l', 'logfile', '', _('set patch header to contents of <file>'))],
  1592          [('e', 'edit', None, _('edit commit message')),
  1654          [('e', 'edit', None, _('edit commit message')),
  1593           ('m', 'message', '', _('change commit message with <text>')),
  1655           ('m', 'message', '', _('change commit message with <text>')),
  1594           ('l', 'logfile', '', _('change commit message with <file> content')),
  1656           ('l', 'logfile', '', _('change commit message with <file> content')),
  1595           ('s', 'short', None, 'short refresh')],
  1657           ('s', 'short', None, 'short refresh')],
  1596          'hg qrefresh [-e] [-m TEXT] [-l FILE] [-s]'),
  1658          'hg qrefresh [-e] [-m TEXT] [-l FILE] [-s]'),
       
  1659     'qrename|qmv':
       
  1660         (rename, [], 'hg qrename PATCH1 [PATCH2]'),
  1597     "qrestore":
  1661     "qrestore":
  1598         (restore,
  1662         (restore,
  1599          [('d', 'delete', None, 'delete save entry'),
  1663          [('d', 'delete', None, 'delete save entry'),
  1600           ('u', 'update', None, 'update queue working dir')],
  1664           ('u', 'update', None, 'update queue working dir')],
  1601          'hg qrestore [-d] [-u] REV'),
  1665          'hg qrestore [-d] [-u] REV'),