1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2024-12-26 17:57:59 +00:00

Merge pull request #1742 from ThomasWaldmann/migrate-previous-location

avoid previous_location mismatch, fixes #1741
This commit is contained in:
TW 2016-10-25 19:25:17 +02:00 committed by GitHub
commit d4072bfad0

View file

@ -10,7 +10,7 @@
from .logger import create_logger from .logger import create_logger
logger = create_logger() logger = create_logger()
from .helpers import Error, get_cache_dir, decode_dict, int_to_bigint, \ from .helpers import Error, get_cache_dir, decode_dict, int_to_bigint, \
bigint_to_int, format_file_size, yes, bin_to_hex bigint_to_int, format_file_size, yes, bin_to_hex, Location
from .locking import Lock from .locking import Lock
from .hashindex import ChunkIndex from .hashindex import ChunkIndex
@ -140,10 +140,7 @@ def create(self):
with open(os.path.join(self.path, 'files'), 'wb') as fd: with open(os.path.join(self.path, 'files'), 'wb') as fd:
pass # empty file pass # empty file
def _do_open(self): def _check_upgrade(self, config_path):
self.config = configparser.ConfigParser(interpolation=None)
config_path = os.path.join(self.path, 'config')
self.config.read(config_path)
try: try:
cache_version = self.config.getint('cache', 'version') cache_version = self.config.getint('cache', 'version')
wanted_version = 1 wanted_version = 1
@ -154,6 +151,25 @@ def _do_open(self):
except configparser.NoSectionError: except configparser.NoSectionError:
self.close() self.close()
raise Exception('%s does not look like a Borg cache.' % config_path) from None raise Exception('%s does not look like a Borg cache.' % config_path) from None
# borg < 1.0.8rc1 had different canonicalization for the repo location (see #1655 and #1741).
cache_loc = self.config.get('cache', 'previous_location', fallback=None)
if cache_loc:
repo_loc = self.repository._location.canonical_path()
rl = Location(repo_loc)
cl = Location(cache_loc)
if cl.proto == rl.proto and cl.user == rl.user and cl.host == rl.host and cl.port == rl.port \
and \
cl.path and rl.path and \
cl.path.startswith('/~/') and rl.path.startswith('/./') and cl.path[3:] == rl.path[3:]:
# everything is same except the expected change in relative path canonicalization,
# update previous_location to avoid warning / user query about changed location:
self.config.set('cache', 'previous_location', repo_loc)
def _do_open(self):
self.config = configparser.ConfigParser(interpolation=None)
config_path = os.path.join(self.path, 'config')
self.config.read(config_path)
self._check_upgrade(config_path)
self.id = self.config.get('cache', 'repository') self.id = self.config.get('cache', 'repository')
self.manifest_id = unhexlify(self.config.get('cache', 'manifest')) self.manifest_id = unhexlify(self.config.get('cache', 'manifest'))
self.timestamp = self.config.get('cache', 'timestamp', fallback=None) self.timestamp = self.config.get('cache', 'timestamp', fallback=None)