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'), |