1442 |
1442 |
1443 def _new_backup_data_filename(self, backupname): |
1443 def _new_backup_data_filename(self, backupname): |
1444 """return a filename to backup a data-file or None""" |
1444 """return a filename to backup a data-file or None""" |
1445 if not self._use_dirstate_v2: |
1445 if not self._use_dirstate_v2: |
1446 return None |
1446 return None |
|
1447 if self._map.docket.uuid is None: |
|
1448 # not created yet, nothing to backup |
|
1449 return None |
1447 data_filename = self._map.docket.data_filename() |
1450 data_filename = self._map.docket.data_filename() |
1448 return data_filename, self.data_backup_filename(backupname) |
1451 return data_filename, self.data_backup_filename(backupname) |
1449 |
1452 |
1450 def backup_data_file(self, backupname): |
1453 def backup_data_file(self, backupname): |
1451 if not self._use_dirstate_v2: |
1454 if not self._use_dirstate_v2: |
1512 def restorebackup(self, tr, backupname): |
1515 def restorebackup(self, tr, backupname): |
1513 '''Restore dirstate by backup file''' |
1516 '''Restore dirstate by backup file''' |
1514 # this "invalidate()" prevents "wlock.release()" from writing |
1517 # this "invalidate()" prevents "wlock.release()" from writing |
1515 # changes of dirstate out after restoring from backup file |
1518 # changes of dirstate out after restoring from backup file |
1516 self.invalidate() |
1519 self.invalidate() |
|
1520 o = self._opener |
|
1521 if not o.exists(backupname): |
|
1522 # there was no file backup, delete existing files |
|
1523 filename = self._actualfilename(tr) |
|
1524 data_file = None |
|
1525 if self._use_dirstate_v2 and self._map.docket.uuid is not None: |
|
1526 data_file = self._map.docket.data_filename() |
|
1527 if o.exists(filename): |
|
1528 o.unlink(filename) |
|
1529 if data_file is not None and o.exists(data_file): |
|
1530 o.unlink(data_file) |
|
1531 return |
1517 filename = self._actualfilename(tr) |
1532 filename = self._actualfilename(tr) |
1518 o = self._opener |
|
1519 data_pair = self.backup_data_file(backupname) |
1533 data_pair = self.backup_data_file(backupname) |
1520 if util.samefile(o.join(backupname), o.join(filename)): |
1534 if o.exists(filename) and util.samefile( |
|
1535 o.join(backupname), o.join(filename) |
|
1536 ): |
1521 o.unlink(backupname) |
1537 o.unlink(backupname) |
1522 else: |
1538 else: |
1523 o.rename(backupname, filename, checkambig=True) |
1539 o.rename(backupname, filename, checkambig=True) |
1524 |
1540 |
1525 if data_pair is not None: |
1541 if data_pair is not None: |
1532 o.rename(data_backup, target, checkambig=True) |
1548 o.rename(data_backup, target, checkambig=True) |
1533 |
1549 |
1534 def clearbackup(self, tr, backupname): |
1550 def clearbackup(self, tr, backupname): |
1535 '''Clear backup file''' |
1551 '''Clear backup file''' |
1536 o = self._opener |
1552 o = self._opener |
1537 data_backup = self.backup_data_file(backupname) |
1553 if o.exists(backupname): |
1538 o.unlink(backupname) |
1554 data_backup = self.backup_data_file(backupname) |
1539 |
1555 o.unlink(backupname) |
1540 if data_backup is not None: |
1556 if data_backup is not None: |
1541 o.unlink(data_backup[0]) |
1557 o.unlink(data_backup[0]) |
1542 |
1558 |
1543 def verify(self, m1, m2): |
1559 def verify(self, m1, m2): |
1544 """check the dirstate content again the parent manifest and yield errors""" |
1560 """check the dirstate content again the parent manifest and yield errors""" |
1545 missing_from_p1 = b"%s in state %s, but not in manifest1\n" |
1561 missing_from_p1 = b"%s in state %s, but not in manifest1\n" |
1546 unexpected_in_p1 = b"%s in state %s, but also in manifest1\n" |
1562 unexpected_in_p1 = b"%s in state %s, but also in manifest1\n" |