30
30
BareLocalGitControlDirFormat,
31
31
LocalGitControlDirFormat,
34
from bzrlib.controldir import (
40
from bzrlib.bzrdir import (
34
from bzrlib.controldir import (
47
40
class GitLock(object):
121
114
def get_config(self):
122
115
return GitDirConfig()
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."""
122
format = BareLocalGitControlDirFormat()
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]
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)
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))
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)
239
255
raise bzr_errors.NoWorkingTree(loc)
241
257
def create_repository(self, shared=False):
258
from bzrlib.plugins.git.repository import GitRepositoryFormat
260
raise bzr_errors.IncompatibleFormat(GitRepositoryFormat(), self._format)
242
261
return self.open_repository()
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+')
279
298
return self.open_repository()
300
def _find_or_create_repository(self, force_new_repo=None):
301
return self.create_repository(shared=False)
281
303
def _find_creation_modes(self):
282
304
"""Determine the appropriate modes for files and directories.