mercurial/localrepo.py
changeset 18952 8086b530e2ac
parent 18951 d13916a00b7e
child 19053 f74f2a4e3327
equal deleted inserted replaced
18951:d13916a00b7e 18952:8086b530e2ac
   809         if self.svfs.exists("journal"):
   809         if self.svfs.exists("journal"):
   810             raise error.RepoError(
   810             raise error.RepoError(
   811                 _("abandoned transaction found - run hg recover"))
   811                 _("abandoned transaction found - run hg recover"))
   812 
   812 
   813         self._writejournal(desc)
   813         self._writejournal(desc)
   814         renames = [(x, undoname(x)) for x in self._journalfiles()]
   814         renames = [(vfs, x, undoname(x)) for vfs, x in self._journalfiles()]
   815 
   815 
   816         tr = transaction.transaction(self.ui.warn, self.sopener,
   816         tr = transaction.transaction(self.ui.warn, self.sopener,
   817                                      self.sjoin("journal"),
   817                                      self.sjoin("journal"),
   818                                      aftertrans(renames),
   818                                      aftertrans(renames),
   819                                      self.store.createmode)
   819                                      self.store.createmode)
   820         self._transref = weakref.ref(tr)
   820         self._transref = weakref.ref(tr)
   821         return tr
   821         return tr
   822 
   822 
   823     def _journalfiles(self):
   823     def _journalfiles(self):
   824         return (self.sjoin('journal'), self.join('journal.dirstate'),
   824         return ((self.svfs, 'journal'),
   825                 self.join('journal.branch'), self.join('journal.desc'),
   825                 (self.vfs, 'journal.dirstate'),
   826                 self.join('journal.bookmarks'),
   826                 (self.vfs, 'journal.branch'),
   827                 self.sjoin('journal.phaseroots'))
   827                 (self.vfs, 'journal.desc'),
       
   828                 (self.vfs, 'journal.bookmarks'),
       
   829                 (self.svfs, 'journal.phaseroots'))
   828 
   830 
   829     def undofiles(self):
   831     def undofiles(self):
   830         return [undoname(x) for x in self._journalfiles()]
   832         return [vfs.join(undoname(x)) for vfs, x in self._journalfiles()]
   831 
   833 
   832     def _writejournal(self, desc):
   834     def _writejournal(self, desc):
   833         self.opener.write("journal.dirstate",
   835         self.opener.write("journal.dirstate",
   834                           self.opener.tryread("dirstate"))
   836                           self.opener.tryread("dirstate"))
   835         self.opener.write("journal.branch",
   837         self.opener.write("journal.branch",
  2573 
  2575 
  2574 # used to avoid circular references so destructors work
  2576 # used to avoid circular references so destructors work
  2575 def aftertrans(files):
  2577 def aftertrans(files):
  2576     renamefiles = [tuple(t) for t in files]
  2578     renamefiles = [tuple(t) for t in files]
  2577     def a():
  2579     def a():
  2578         for src, dest in renamefiles:
  2580         for vfs, src, dest in renamefiles:
  2579             try:
  2581             try:
  2580                 util.rename(src, dest)
  2582                 vfs.rename(src, dest)
  2581             except OSError: # journal file does not yet exist
  2583             except OSError: # journal file does not yet exist
  2582                 pass
  2584                 pass
  2583     return a
  2585     return a
  2584 
  2586 
  2585 def undoname(fn):
  2587 def undoname(fn):