equal
deleted
inserted
replaced
42 if inst.errno != errno.ENOENT: |
42 if inst.errno != errno.ENOENT: |
43 raise |
43 raise |
44 |
44 |
45 backupfiles = [] |
45 backupfiles = [] |
46 for f, b in backupentries: |
46 for f, b in backupentries: |
47 filepath = opener.join(f) |
47 if b: |
48 backuppath = opener.join(b) |
48 filepath = opener.join(f) |
49 try: |
49 backuppath = opener.join(b) |
50 util.copyfile(backuppath, filepath) |
50 try: |
51 backupfiles.append(b) |
51 util.copyfile(backuppath, filepath) |
52 except IOError: |
52 backupfiles.append(b) |
53 report(_("failed to recover %s\n") % f) |
53 except IOError: |
54 raise |
54 report(_("failed to recover %s\n") % f) |
|
55 raise |
|
56 else: |
|
57 try: |
|
58 opener.unlink(f) |
|
59 except (IOError, OSError), inst: |
|
60 if inst.errno != errno.ENOENT: |
|
61 raise |
55 |
62 |
56 opener.unlink(journal) |
63 opener.unlink(journal) |
57 backuppath = "%s.backupfiles" % journal |
64 backuppath = "%s.backupfiles" % journal |
58 if opener.exists(backuppath): |
65 if opener.exists(backuppath): |
59 opener.unlink(backuppath) |
66 opener.unlink(backuppath) |
83 self.onclose = onclose |
90 self.onclose = onclose |
84 self.onabort = onabort |
91 self.onabort = onabort |
85 self.entries = [] |
92 self.entries = [] |
86 self.map = {} |
93 self.map = {} |
87 # a list of ('path', 'backuppath') entries. |
94 # a list of ('path', 'backuppath') entries. |
|
95 # if 'backuppath' is empty, no file existed at backup time |
88 self._backupentries = [] |
96 self._backupentries = [] |
89 self._backupmap = {} |
97 self._backupmap = {} |
90 self.journal = journal |
98 self.journal = journal |
91 self._queue = [] |
99 self._queue = [] |
92 # a dict of arguments to be passed to hooks |
100 # a dict of arguments to be passed to hooks |
177 if vfs.exists(file): |
185 if vfs.exists(file): |
178 filepath = vfs.join(file) |
186 filepath = vfs.join(file) |
179 backuppath = self.opener.join(backupfile) |
187 backuppath = self.opener.join(backupfile) |
180 util.copyfiles(filepath, backuppath, hardlink=hardlink) |
188 util.copyfiles(filepath, backuppath, hardlink=hardlink) |
181 else: |
189 else: |
182 self.add(file, 0) |
190 backupfile = '' |
183 return |
|
184 |
191 |
185 self._backupentries.append((file, backupfile)) |
192 self._backupentries.append((file, backupfile)) |
186 self._backupmap[file] = len(self._backupentries) - 1 |
193 self._backupmap[file] = len(self._backupentries) - 1 |
187 self._backupsfile.write("%s\0%s\n" % (file, backupfile)) |
194 self._backupsfile.write("%s\0%s\n" % (file, backupfile)) |
188 self._backupsfile.flush() |
195 self._backupsfile.flush() |
329 if self.opener.isfile(self.journal): |
336 if self.opener.isfile(self.journal): |
330 self.opener.unlink(self.journal) |
337 self.opener.unlink(self.journal) |
331 if self.opener.isfile(self._backupjournal): |
338 if self.opener.isfile(self._backupjournal): |
332 self.opener.unlink(self._backupjournal) |
339 self.opener.unlink(self._backupjournal) |
333 for _f, b in self._backupentries: |
340 for _f, b in self._backupentries: |
334 self.opener.unlink(b) |
341 if b: |
|
342 self.opener.unlink(b) |
335 self._backupentries = [] |
343 self._backupentries = [] |
336 self.journal = None |
344 self.journal = None |
337 # run post close action |
345 # run post close action |
338 categories = sorted(self._postclosecallback) |
346 categories = sorted(self._postclosecallback) |
339 for cat in categories: |
347 for cat in categories: |