mercurial/bookmarks.py
changeset 42311 ec5bd3ab26bf
parent 41533 0f64091cc851
child 42312 2b77183ac477
equal deleted inserted replaced
42310:21eda240be07 42311:ec5bd3ab26bf
   202         if rbm.active not in self._refmap:
   202         if rbm.active not in self._refmap:
   203             rbm.active = None
   203             rbm.active = None
   204             rbm._writeactive()
   204             rbm._writeactive()
   205 
   205 
   206         with repo.wlock():
   206         with repo.wlock():
   207             file_ = repo.vfs('bookmarks', 'w', atomictemp=True,
   207             with repo.vfs('bookmarks', 'w', atomictemp=True,
   208                              checkambig=True)
   208                           checkambig=True) as f:
   209             try:
   209                 self._write(f)
   210                 self._write(file_)
       
   211             except: # re-raises
       
   212                 file_.discard()
       
   213                 raise
       
   214             finally:
       
   215                 file_.close()
       
   216 
   210 
   217     def _writeactive(self):
   211     def _writeactive(self):
   218         if self._aclean:
   212         if self._aclean:
   219             return
   213             return
   220         with self._repo.wlock():
   214         with self._repo.wlock():
   221             if self._active is not None:
   215             if self._active is not None:
   222                 f = self._repo.vfs('bookmarks.current', 'w', atomictemp=True,
   216                 with self._repo.vfs('bookmarks.current', 'w', atomictemp=True,
   223                                    checkambig=True)
   217                                    checkambig=True) as f:
   224                 try:
       
   225                     f.write(encoding.fromlocal(self._active))
   218                     f.write(encoding.fromlocal(self._active))
   226                 finally:
       
   227                     f.close()
       
   228             else:
   219             else:
   229                 self._repo.vfs.tryunlink('bookmarks.current')
   220                 self._repo.vfs.tryunlink('bookmarks.current')
   230         self._aclean = True
   221         self._aclean = True
   231 
   222 
   232     def _write(self, fp):
   223     def _write(self, fp):