comparison hgext/mq.py @ 2757:787e18b84893

merge patches from brendan cully that did not apply clean against tip.
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Tue, 01 Aug 2006 15:40:28 -0700
parents caa6d992608b 5dfeda163bb7
children 0327bd1c831c
comparison
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'),