mercurial/dirstate.py
changeset 33440 ec306bc6915b
parent 33373 fb320398a21c
child 33647 377e8ddaebef
child 33733 36d216dcae6a
equal deleted inserted replaced
33439:0e114b992e02 33440:ec306bc6915b
  1298         if tr:
  1298         if tr:
  1299             return self._pendingfilename
  1299             return self._pendingfilename
  1300         else:
  1300         else:
  1301             return self._filename
  1301             return self._filename
  1302 
  1302 
  1303     def savebackup(self, tr, suffix='', prefix=''):
  1303     def savebackup(self, tr, backupname):
  1304         '''Save current dirstate into backup file with suffix'''
  1304         '''Save current dirstate into backup file'''
  1305         assert len(suffix) > 0 or len(prefix) > 0
       
  1306         filename = self._actualfilename(tr)
  1305         filename = self._actualfilename(tr)
       
  1306         assert backupname != filename
  1307 
  1307 
  1308         # use '_writedirstate' instead of 'write' to write changes certainly,
  1308         # use '_writedirstate' instead of 'write' to write changes certainly,
  1309         # because the latter omits writing out if transaction is running.
  1309         # because the latter omits writing out if transaction is running.
  1310         # output file will be used to create backup of dirstate at this point.
  1310         # output file will be used to create backup of dirstate at this point.
  1311         if self._dirty or not self._opener.exists(filename):
  1311         if self._dirty or not self._opener.exists(filename):
  1322             # ensure that pending file written above is unlinked at
  1322             # ensure that pending file written above is unlinked at
  1323             # failure, even if tr.writepending isn't invoked until the
  1323             # failure, even if tr.writepending isn't invoked until the
  1324             # end of this transaction
  1324             # end of this transaction
  1325             tr.registertmp(filename, location='plain')
  1325             tr.registertmp(filename, location='plain')
  1326 
  1326 
  1327         backupname = prefix + self._filename + suffix
       
  1328         assert backupname != filename
       
  1329         self._opener.tryunlink(backupname)
  1327         self._opener.tryunlink(backupname)
  1330         # hardlink backup is okay because _writedirstate is always called
  1328         # hardlink backup is okay because _writedirstate is always called
  1331         # with an "atomictemp=True" file.
  1329         # with an "atomictemp=True" file.
  1332         util.copyfile(self._opener.join(filename),
  1330         util.copyfile(self._opener.join(filename),
  1333                       self._opener.join(backupname), hardlink=True)
  1331                       self._opener.join(backupname), hardlink=True)
  1334 
  1332 
  1335     def restorebackup(self, tr, suffix='', prefix=''):
  1333     def restorebackup(self, tr, backupname):
  1336         '''Restore dirstate by backup file with suffix'''
  1334         '''Restore dirstate by backup file'''
  1337         assert len(suffix) > 0 or len(prefix) > 0
       
  1338         # this "invalidate()" prevents "wlock.release()" from writing
  1335         # this "invalidate()" prevents "wlock.release()" from writing
  1339         # changes of dirstate out after restoring from backup file
  1336         # changes of dirstate out after restoring from backup file
  1340         self.invalidate()
  1337         self.invalidate()
  1341         filename = self._actualfilename(tr)
  1338         filename = self._actualfilename(tr)
  1342         # using self._filename to avoid having "pending" in the backup filename
  1339         self._opener.rename(backupname, filename, checkambig=True)
  1343         self._opener.rename(prefix + self._filename + suffix, filename,
  1340 
  1344                             checkambig=True)
  1341     def clearbackup(self, tr, backupname):
  1345 
  1342         '''Clear backup file'''
  1346     def clearbackup(self, tr, suffix='', prefix=''):
  1343         self._opener.unlink(backupname)
  1347         '''Clear backup file with suffix'''
       
  1348         assert len(suffix) > 0 or len(prefix) > 0
       
  1349         # using self._filename to avoid having "pending" in the backup filename
       
  1350         self._opener.unlink(prefix + self._filename + suffix)