1233 # ensure that pending file written above is unlinked at |
1233 # ensure that pending file written above is unlinked at |
1234 # failure, even if tr.writepending isn't invoked until the |
1234 # failure, even if tr.writepending isn't invoked until the |
1235 # end of this transaction |
1235 # end of this transaction |
1236 tr.registertmp(filename, location='plain') |
1236 tr.registertmp(filename, location='plain') |
1237 |
1237 |
1238 self._opener.write(prefix + self._filename + suffix, |
1238 backupname = prefix + self._filename + suffix |
1239 self._opener.tryread(filename)) |
1239 assert backupname != filename |
|
1240 if self._opener.exists(backupname): |
|
1241 self._opener.unlink(backupname) |
|
1242 # hardlink backup is okay because _writedirstate is always called |
|
1243 # with an "atomictemp=True" file. |
|
1244 util.copyfile(self._opener.join(filename), |
|
1245 self._opener.join(backupname), hardlink=True) |
1240 |
1246 |
1241 def restorebackup(self, tr, suffix='', prefix=''): |
1247 def restorebackup(self, tr, suffix='', prefix=''): |
1242 '''Restore dirstate by backup file with suffix''' |
1248 '''Restore dirstate by backup file with suffix''' |
1243 assert len(suffix) > 0 or len(prefix) > 0 |
1249 assert len(suffix) > 0 or len(prefix) > 0 |
1244 # this "invalidate()" prevents "wlock.release()" from writing |
1250 # this "invalidate()" prevents "wlock.release()" from writing |