/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to dir.py

Refactor repository initialization.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
    BareLocalGitControlDirFormat,
31
31
    LocalGitControlDirFormat,
32
32
    )
33
 
try:
34
 
    from bzrlib.controldir import (
35
 
        ControlDir,
36
 
        format_registry,
37
 
        )
38
 
except ImportError:
39
 
    # bzr < 2.3
40
 
    from bzrlib.bzrdir import (
41
 
        BzrDir,
42
 
        format_registry,
43
 
        )
44
 
    ControlDir = BzrDir
 
33
 
 
34
from bzrlib.controldir import (
 
35
    ControlDir,
 
36
    format_registry,
 
37
    )
45
38
 
46
39
 
47
40
class GitLock(object):
121
114
    def get_config(self):
122
115
        return GitDirConfig()
123
116
 
 
117
    def clone_on_transport(self, transport, revision_id=None,
 
118
        force_new_repo=False, preserve_stacking=False, stacked_on=None,
 
119
        create_prefix=False, use_existing_dir=True, no_tree=False):
 
120
        """See ControlDir.clone_on_transport."""
 
121
        if no_tree:
 
122
            format = BareLocalGitControlDirFormat()
 
123
        else:
 
124
            format = LocalGitControlDirFormat()
 
125
        (target_repo, target_controldir, stacking, repo_policy) = format.initialize_on_transport_ex(transport, use_existing_dir=use_existing_dir, create_prefix=create_prefix, force_new_repo=force_new_repo)
 
126
        target_git_repo = target_repo._git
 
127
        source_repo = self.open_repository()
 
128
        source_git_repo = source_repo._git
 
129
        if revision_id is not None:
 
130
            git_sha, mapping = source_repo.lookup_bzr_revision_id(revision_id)
 
131
            determine_wants = lambda heads: [git_sha]
 
132
        else:
 
133
            determine_wants = target_git_repo.object_store.determine_wants_all
 
134
        refs = source_git_repo.fetch(target_git_repo, determine_wants)
 
135
        for name, val in refs.iteritems():
 
136
            target_git_repo.refs[name] = val
 
137
        lockfiles = GitLockableFiles(transport, GitLock())
 
138
        return self.__class__(transport, lockfiles, target_git_repo, format)
 
139
 
124
140
 
125
141
class LocalGitDir(GitDir):
126
142
    """An adapter to the '.git' dir used by git."""
215
231
                ret.append(self.open_branch(name=name))
216
232
        return ret
217
233
 
218
 
    def open_repository(self, shared=False):
 
234
    def open_repository(self):
219
235
        """'open' a repository for this dir."""
220
236
        return self._gitrepository_class(self, self._lockfiles)
221
237
 
239
255
        raise bzr_errors.NoWorkingTree(loc)
240
256
 
241
257
    def create_repository(self, shared=False):
 
258
        from bzrlib.plugins.git.repository import GitRepositoryFormat
 
259
        if shared:
 
260
            raise bzr_errors.IncompatibleFormat(GitRepositoryFormat(), self._format)
242
261
        return self.open_repository()
243
262
 
244
263
    def create_branch(self, name=None):
258
277
    def create_workingtree(self, revision_id=None, from_branch=None,
259
278
        accelerator_tree=None, hardlink=False):
260
279
        if self._git.bare:
261
 
            raise bzr_errors.BzrError("Can't create working tree in a bare repo")
 
280
            raise bzr_errors.UnsupportedOperation(self.create_workingtree, self)
262
281
        from dulwich.index import write_index
263
282
        from dulwich.pack import SHA1Writer
264
283
        f = open(self.transport.local_abspath("index"), 'w+')
278
297
        """
279
298
        return self.open_repository()
280
299
 
 
300
    def _find_or_create_repository(self, force_new_repo=None):
 
301
        return self.create_repository(shared=False)
 
302
 
281
303
    def _find_creation_modes(self):
282
304
        """Determine the appropriate modes for files and directories.
283
305
 
291
313
        self._mode_check_done = True
292
314
        try:
293
315
            st = self.transport.stat('.')
294
 
        except TransportNotPossible:
 
316
        except bzr_errors.TransportNotPossible:
295
317
            self._dir_mode = None
296
318
            self._file_mode = None
297
319
        else:
322
344
            self._find_creation_modes()
323
345
        return self._dir_mode
324
346
 
325