comparison mercurial/transaction.py @ 23316:fc3670f41d3e

transaction: use 'location' instead of 'vfs' in the addbackup method This unlock the backup of file outside of store (eg: bookmarks).
author Pierre-Yves David <pierre-yves.david@fb.com>
date Wed, 05 Nov 2014 01:59:32 +0000
parents 66275ecc73c1
children 197e17be5407
comparison
equal deleted inserted replaced
23315:66275ecc73c1 23316:fc3670f41d3e
186 # add enough data to the journal to do the truncate 186 # add enough data to the journal to do the truncate
187 self.file.write("%s\0%d\n" % (file, offset)) 187 self.file.write("%s\0%d\n" % (file, offset))
188 self.file.flush() 188 self.file.flush()
189 189
190 @active 190 @active
191 def addbackup(self, file, hardlink=True, vfs=None): 191 def addbackup(self, file, hardlink=True, location=''):
192 """Adds a backup of the file to the transaction 192 """Adds a backup of the file to the transaction
193 193
194 Calling addbackup() creates a hardlink backup of the specified file 194 Calling addbackup() creates a hardlink backup of the specified file
195 that is used to recover the file in the event of the transaction 195 that is used to recover the file in the event of the transaction
196 aborting. 196 aborting.
203 raise RuntimeError(msg) 203 raise RuntimeError(msg)
204 204
205 if file in self.map or file in self._backupmap: 205 if file in self.map or file in self._backupmap:
206 return 206 return
207 dirname, filename = os.path.split(file) 207 dirname, filename = os.path.split(file)
208
209 backupfilename = "%s.backup.%s" % (self.journal, filename) 208 backupfilename = "%s.backup.%s" % (self.journal, filename)
210 backupfile = os.path.join(dirname, backupfilename) 209 backupfile = os.path.join(dirname, backupfilename)
211 if vfs is None: 210 vfs = self._vfsmap[location]
212 vfs = self.opener
213 if vfs.exists(file): 211 if vfs.exists(file):
214 filepath = vfs.join(file) 212 filepath = vfs.join(file)
215 backuppath = vfs.join(backupfile) 213 backuppath = vfs.join(backupfile)
216 util.copyfiles(filepath, backuppath, hardlink=hardlink) 214 util.copyfiles(filepath, backuppath, hardlink=hardlink)
217 else: 215 else:
218 backupfile = '' 216 backupfile = ''
219 217
220 self._addbackupentry(('', file, backupfile, False)) 218 self._addbackupentry((location, file, backupfile, False))
221 219
222 def _addbackupentry(self, entry): 220 def _addbackupentry(self, entry):
223 """register a new backup entry and write it to disk""" 221 """register a new backup entry and write it to disk"""
224 self._backupentries.append(entry) 222 self._backupentries.append(entry)
225 self._backupmap[file] = len(self._backupentries) - 1 223 self._backupmap[file] = len(self._backupentries) - 1