814 for f in files: |
814 for f in files: |
815 if os.path.lexists(repo.wjoin(f)): |
815 if os.path.lexists(repo.wjoin(f)): |
816 merged.append(f) |
816 merged.append(f) |
817 else: |
817 else: |
818 removed.append(f) |
818 removed.append(f) |
|
819 repo.dirstate.beginparentchange() |
819 for f in removed: |
820 for f in removed: |
820 repo.dirstate.remove(f) |
821 repo.dirstate.remove(f) |
821 for f in merged: |
822 for f in merged: |
822 repo.dirstate.merge(f) |
823 repo.dirstate.merge(f) |
823 p1, p2 = repo.dirstate.parents() |
824 p1, p2 = repo.dirstate.parents() |
824 repo.setparents(p1, merge) |
825 repo.setparents(p1, merge) |
|
826 repo.dirstate.endparentchange() |
825 |
827 |
826 if all_files and '.hgsubstate' in all_files: |
828 if all_files and '.hgsubstate' in all_files: |
827 wctx = repo[None] |
829 wctx = repo[None] |
828 pctx = repo['.'] |
830 pctx = repo['.'] |
829 overwrite = False |
831 overwrite = False |
1449 |
1451 |
1450 tobackup = set(a + m + r) & tobackup |
1452 tobackup = set(a + m + r) & tobackup |
1451 if keepchanges and tobackup: |
1453 if keepchanges and tobackup: |
1452 raise util.Abort(_("local changes found, refresh first")) |
1454 raise util.Abort(_("local changes found, refresh first")) |
1453 self.backup(repo, tobackup) |
1455 self.backup(repo, tobackup) |
1454 |
1456 repo.dirstate.beginparentchange() |
1455 for f in a: |
1457 for f in a: |
1456 util.unlinkpath(repo.wjoin(f), ignoremissing=True) |
1458 util.unlinkpath(repo.wjoin(f), ignoremissing=True) |
1457 repo.dirstate.drop(f) |
1459 repo.dirstate.drop(f) |
1458 for f in m + r: |
1460 for f in m + r: |
1459 fctx = ctx[f] |
1461 fctx = ctx[f] |
1460 repo.wwrite(f, fctx.data(), fctx.flags()) |
1462 repo.wwrite(f, fctx.data(), fctx.flags()) |
1461 repo.dirstate.normal(f) |
1463 repo.dirstate.normal(f) |
1462 repo.setparents(qp, nullid) |
1464 repo.setparents(qp, nullid) |
|
1465 repo.dirstate.endparentchange() |
1463 for patch in reversed(self.applied[start:end]): |
1466 for patch in reversed(self.applied[start:end]): |
1464 self.ui.status(_("popping %s\n") % patch.name) |
1467 self.ui.status(_("popping %s\n") % patch.name) |
1465 del self.applied[start:end] |
1468 del self.applied[start:end] |
1466 strip(self.ui, repo, [rev], update=False, backup=False) |
1469 strip(self.ui, repo, [rev], update=False, backup=False) |
1467 for s, state in repo['.'].substate.items(): |
1470 for s, state in repo['.'].substate.items(): |
1597 match = scmutil.matchfiles(repo, files) |
1600 match = scmutil.matchfiles(repo, files) |
1598 |
1601 |
1599 bmlist = repo[top].bookmarks() |
1602 bmlist = repo[top].bookmarks() |
1600 |
1603 |
1601 try: |
1604 try: |
|
1605 repo.dirstate.beginparentchange() |
1602 if diffopts.git or diffopts.upgrade: |
1606 if diffopts.git or diffopts.upgrade: |
1603 copies = {} |
1607 copies = {} |
1604 for dst in a: |
1608 for dst in a: |
1605 src = repo.dirstate.copied(dst) |
1609 src = repo.dirstate.copied(dst) |
1606 # during qfold, the source file for copies may |
1610 # during qfold, the source file for copies may |
1649 |
1653 |
1650 oldphase = repo[top].phase() |
1654 oldphase = repo[top].phase() |
1651 |
1655 |
1652 # assumes strip can roll itself back if interrupted |
1656 # assumes strip can roll itself back if interrupted |
1653 repo.setparents(*cparents) |
1657 repo.setparents(*cparents) |
|
1658 repo.dirstate.endparentchange() |
1654 self.applied.pop() |
1659 self.applied.pop() |
1655 self.applieddirty = True |
1660 self.applieddirty = True |
1656 strip(self.ui, repo, [top], update=False, backup=False) |
1661 strip(self.ui, repo, [top], update=False, backup=False) |
1657 except: # re-raises |
1662 except: # re-raises |
1658 repo.dirstate.invalidate() |
1663 repo.dirstate.invalidate() |