95
95
return urlutils.escape(osutils.safe_unicode(file_or_path))
97
def __init__(self, _format, a_bzrdir):
97
def __init__(self, _format, a_controldir):
98
98
# we reuse one control files instance.
99
dir_mode = a_bzrdir._get_dir_mode()
100
file_mode = a_bzrdir._get_file_mode()
99
dir_mode = a_controldir._get_dir_mode()
100
file_mode = a_controldir._get_file_mode()
102
102
def get_store(name, compressed=True, prefixed=False):
103
103
# FIXME: This approach of assuming stores are all entirely compressed
149
149
self.inventories.keys()
151
151
def _backup_inventory(self):
152
t = self.bzrdir._control_files._transport
152
t = self.controldir._control_files._transport
153
153
t.copy('inventory.weave', 'inventory.backup.weave')
155
155
def _temp_inventories(self):
156
t = self.bzrdir._control_files._transport
156
t = self.controldir._control_files._transport
157
157
return self._format._get_inventories(t, self, 'inventory.new')
159
159
def get_commit_builder(self, branch, parents, config, timestamp=None,
205
205
class WeaveMetaDirRepository(MetaDirVersionedFileRepository):
206
206
"""A subclass of MetaDirRepository to set weave specific policy."""
208
def __init__(self, _format, a_bzrdir, control_files):
209
super(WeaveMetaDirRepository, self).__init__(_format, a_bzrdir, control_files)
208
def __init__(self, _format, a_controldir, control_files):
209
super(WeaveMetaDirRepository, self).__init__(_format, a_controldir, control_files)
210
210
self._serializer = _format._serializer
289
289
# just claim that checking for this inconsistency is not required.
290
290
revision_graph_can_have_wrong_parents = False
292
def initialize(self, a_bzrdir, shared=False, _internal=False):
292
def initialize(self, a_controldir, shared=False, _internal=False):
293
293
"""Create a weave repository."""
295
raise errors.IncompatibleFormat(self, a_bzrdir._format)
295
raise errors.IncompatibleFormat(self, a_controldir._format)
297
297
if not _internal:
298
298
# always initialized when the bzrdir is.
299
return self.open(a_bzrdir, _found=True)
299
return self.open(a_controldir, _found=True)
301
301
# Create an empty weave
303
303
weavefile.write_weave_v5(weave.Weave(), sio)
304
304
empty_weave = sio.getvalue()
306
trace.mutter('creating repository in %s.', a_bzrdir.transport.base)
306
trace.mutter('creating repository in %s.', a_controldir.transport.base)
308
308
# FIXME: RBC 20060125 don't peek under the covers
309
309
# NB: no need to escape relative paths that are url safe.
310
control_files = lockable_files.LockableFiles(a_bzrdir.transport,
310
control_files = lockable_files.LockableFiles(a_controldir.transport,
311
311
'branch-lock', lockable_files.TransportLock)
312
312
control_files.create_lock()
313
313
control_files.lock_write()
314
transport = a_bzrdir.transport
314
transport = a_controldir.transport
316
316
transport.mkdir_multi(['revision-store', 'weaves'],
317
mode=a_bzrdir._get_dir_mode())
317
mode=a_controldir._get_dir_mode())
318
318
transport.put_bytes_non_atomic('inventory.weave', empty_weave,
319
mode=a_bzrdir._get_file_mode())
319
mode=a_controldir._get_file_mode())
321
321
control_files.unlock()
322
repository = self.open(a_bzrdir, _found=True)
323
self._run_post_repo_init_hooks(repository, a_bzrdir, shared)
322
repository = self.open(a_controldir, _found=True)
323
self._run_post_repo_init_hooks(repository, a_controldir, shared)
324
324
return repository
326
def open(self, a_bzrdir, _found=False):
326
def open(self, a_controldir, _found=False):
327
327
"""See RepositoryFormat.open()."""
329
329
# we are being called directly and must probe.
330
330
raise NotImplementedError
332
repo_transport = a_bzrdir.get_repository_transport(None)
333
result = AllInOneRepository(_format=self, a_bzrdir=a_bzrdir)
332
repo_transport = a_controldir.get_repository_transport(None)
333
result = AllInOneRepository(_format=self, a_controldir=a_controldir)
334
334
result.revisions = self._get_revisions(repo_transport, result)
335
335
result.signatures = self._get_signatures(repo_transport, result)
336
336
result.inventories = self._get_inventories(repo_transport, result)
542
542
return versionedfile.ThunkedVersionedFiles(base_transport,
543
543
weave.WeaveFile, mapper, repo.is_locked)
545
def initialize(self, a_bzrdir, shared=False):
545
def initialize(self, a_controldir, shared=False):
546
546
"""Create a weave repository.
548
548
:param shared: If true the repository will be initialized as a shared
553
553
weavefile.write_weave_v5(weave.Weave(), sio)
554
554
empty_weave = sio.getvalue()
556
trace.mutter('creating repository in %s.', a_bzrdir.transport.base)
556
trace.mutter('creating repository in %s.', a_controldir.transport.base)
557
557
dirs = ['revision-store', 'weaves']
558
558
files = [('inventory.weave', BytesIO(empty_weave)),
560
560
utf8_files = [('format', self.get_format_string())]
562
self._upload_blank_content(a_bzrdir, dirs, files, utf8_files, shared)
563
return self.open(a_bzrdir=a_bzrdir, _found=True)
562
self._upload_blank_content(a_controldir, dirs, files, utf8_files, shared)
563
return self.open(a_controldir=a_controldir, _found=True)
565
def open(self, a_bzrdir, _found=False, _override_transport=None):
565
def open(self, a_controldir, _found=False, _override_transport=None):
566
566
"""See RepositoryFormat.open().
568
568
:param _override_transport: INTERNAL USE ONLY. Allows opening the
570
570
than normal. I.e. during 'upgrade'.
573
format = RepositoryFormatMetaDir.find_format(a_bzrdir)
573
format = RepositoryFormatMetaDir.find_format(a_controldir)
574
574
if _override_transport is not None:
575
575
repo_transport = _override_transport
577
repo_transport = a_bzrdir.get_repository_transport(None)
577
repo_transport = a_controldir.get_repository_transport(None)
578
578
control_files = lockable_files.LockableFiles(repo_transport,
579
579
'lock', lockdir.LockDir)
580
result = WeaveMetaDirRepository(_format=self, a_bzrdir=a_bzrdir,
580
result = WeaveMetaDirRepository(_format=self, a_controldir=a_controldir,
581
581
control_files=control_files)
582
582
result.revisions = self._get_revisions(repo_transport, result)
583
583
result.signatures = self._get_signatures(repo_transport, result)