mercurial/localrepo.py
changeset 50071 d91fc026071c
parent 50070 c8f32aa80dca
child 50082 a66926099c0f
equal deleted inserted replaced
50070:c8f32aa80dca 50071:d91fc026071c
    40     changegroup,
    40     changegroup,
    41     color,
    41     color,
    42     commit,
    42     commit,
    43     context,
    43     context,
    44     dirstate,
    44     dirstate,
    45     dirstateguard,
       
    46     discovery,
    45     discovery,
    47     encoding,
    46     encoding,
    48     error,
    47     error,
    49     exchange,
    48     exchange,
    50     extensions,
    49     extensions,
  2693             else:
  2692             else:
  2694                 self.ui.warn(_(b"no interrupted transaction available\n"))
  2693                 self.ui.warn(_(b"no interrupted transaction available\n"))
  2695                 return False
  2694                 return False
  2696 
  2695 
  2697     def rollback(self, dryrun=False, force=False):
  2696     def rollback(self, dryrun=False, force=False):
  2698         wlock = lock = dsguard = None
  2697         wlock = lock = None
  2699         try:
  2698         try:
  2700             wlock = self.wlock()
  2699             wlock = self.wlock()
  2701             lock = self.lock()
  2700             lock = self.lock()
  2702             if self.svfs.exists(b"undo"):
  2701             if self.svfs.exists(b"undo"):
  2703                 dsguard = dirstateguard.dirstateguard(self, b'rollback')
  2702                 return self._rollback(dryrun, force)
  2704 
       
  2705                 return self._rollback(dryrun, force, dsguard)
       
  2706             else:
  2703             else:
  2707                 self.ui.warn(_(b"no rollback information available\n"))
  2704                 self.ui.warn(_(b"no rollback information available\n"))
  2708                 return 1
  2705                 return 1
  2709         finally:
  2706         finally:
  2710             release(dsguard, lock, wlock)
  2707             release(lock, wlock)
  2711 
  2708 
  2712     @unfilteredmethod  # Until we get smarter cache management
  2709     @unfilteredmethod  # Until we get smarter cache management
  2713     def _rollback(self, dryrun, force, dsguard):
  2710     def _rollback(self, dryrun, force):
  2714         ui = self.ui
  2711         ui = self.ui
  2715 
  2712 
  2716         parents = self.dirstate.parents()
  2713         parents = self.dirstate.parents()
  2717         try:
  2714         try:
  2718             args = self.vfs.read(b'undo.desc').splitlines()
  2715             args = self.vfs.read(b'undo.desc').splitlines()
  2770         if self.svfs.exists(b'undo.phaseroots'):
  2767         if self.svfs.exists(b'undo.phaseroots'):
  2771             self.svfs.rename(b'undo.phaseroots', b'phaseroots', checkambig=True)
  2768             self.svfs.rename(b'undo.phaseroots', b'phaseroots', checkambig=True)
  2772         self.invalidate()
  2769         self.invalidate()
  2773 
  2770 
  2774         if parentgone:
  2771         if parentgone:
  2775             # prevent dirstateguard from overwriting already restored one
       
  2776             dsguard.close()
       
  2777 
       
  2778             narrowspec.restorebackup(self, b'undo.narrowspec')
  2772             narrowspec.restorebackup(self, b'undo.narrowspec')
  2779             narrowspec.restorewcbackup(self, b'undo.narrowspec.dirstate')
  2773             narrowspec.restorewcbackup(self, b'undo.narrowspec.dirstate')
  2780             self.dirstate.restorebackup(None, b'undo.dirstate')
  2774             self.dirstate.restorebackup(None, b'undo.dirstate')
  2781             try:
  2775             try:
  2782                 branch = self.vfs.read(b'undo.branch')
  2776                 branch = self.vfs.read(b'undo.branch')