/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

merge compatibility fixes for bzr 2.4, support for fetching tags.

Show diffs side-by-side

added added

removed removed

Lines of Context:
123
123
    def get_config(self):
124
124
        return GitDirConfig()
125
125
 
 
126
    def sprout(self, url, revision_id=None, force_new_repo=False,
 
127
               recurse='down', possible_transports=None,
 
128
               accelerator_tree=None, hardlink=False, stacked=False,
 
129
               source_branch=None, create_tree_if_local=True):
 
130
        from bzrlib.repository import InterRepository
 
131
        from bzrlib.transport.local import LocalTransport
 
132
        from bzrlib.transport import get_transport
 
133
        target_transport = get_transport(url, possible_transports)
 
134
        target_transport.ensure_base()
 
135
        cloning_format = self.cloning_metadir()
 
136
        # Create/update the result branch
 
137
        result = cloning_format.initialize_on_transport(target_transport)
 
138
        source_branch = self.open_branch()
 
139
        source_repository = self.find_repository()
 
140
        try:
 
141
            result_repo = result.find_repository()
 
142
        except bzr_errors.NoRepositoryPresent:
 
143
            result_repo = result.create_repository()
 
144
            target_is_empty = True
 
145
        else:
 
146
            target_is_empty = None # Unknown
 
147
        if stacked:
 
148
            raise bzr_errors.IncompatibleRepositories(source_repository, result_repo)
 
149
        interrepo = InterRepository.get(source_repository, result_repo)
 
150
 
 
151
        if revision_id is not None:
 
152
            determine_wants = interrepo.get_determine_wants_revids(
 
153
                [revision_id], include_tags=True)
 
154
        else:
 
155
            determine_wants = interrepo.determine_wants_all
 
156
        interrepo.fetch_objects(determine_wants=determine_wants,
 
157
            mapping=source_branch.mapping)
 
158
        result_branch = source_branch.sprout(result,
 
159
            revision_id=revision_id, repository=result_repo)
 
160
        if (create_tree_if_local and isinstance(target_transport, LocalTransport)
 
161
            and (result_repo is None or result_repo.make_working_trees())):
 
162
            wt = result.create_workingtree(accelerator_tree=accelerator_tree,
 
163
                hardlink=hardlink, from_branch=result_branch)
 
164
            wt.lock_write()
 
165
            try:
 
166
                if wt.path2id('') is None:
 
167
                    try:
 
168
                        wt.set_root_id(self.open_workingtree.get_root_id())
 
169
                    except bzr_errors.NoWorkingTree:
 
170
                        pass
 
171
            finally:
 
172
                wt.unlock()
 
173
        return result
 
174
 
126
175
    def clone_on_transport(self, transport, revision_id=None,
127
176
        force_new_repo=False, preserve_stacking=False, stacked_on=None,
128
177
        create_prefix=False, use_existing_dir=True, no_tree=False):
137
186
        source_repo = self.open_repository()
138
187
        source_git_repo = source_repo._git
139
188
        if revision_id is not None:
140
 
            git_sha, mapping = source_repo.lookup_bzr_revision_id(revision_id)
141
 
            if git_sha == ZERO_SHA:
142
 
                wants = []
143
 
            else:
144
 
                wants = [git_sha]
145
 
            determine_wants = lambda heads: wants
 
189
            determine_wants = source_repo.determine_wants_revid_and_tags(revision_id)
146
190
        else:
147
191
            determine_wants = target_git_repo.object_store.determine_wants_all
148
192
        refs = source_git_repo.fetch(target_git_repo, determine_wants)
151
195
        lockfiles = GitLockableFiles(transport, GitLock())
152
196
        return self.__class__(transport, lockfiles, target_git_repo, format)
153
197
 
 
198
    def find_repository(self):
 
199
        """Find the repository that should be used.
 
200
 
 
201
        This does not require a branch as we use it to find the repo for
 
202
        new branches as well as to hook existing branches up to their
 
203
        repository.
 
204
        """
 
205
        return self.open_repository()
 
206
 
154
207
 
155
208
class LocalGitControlDirFormat(GitControlDirFormat):
156
209
    """The .git directory control format."""
375
428
            f.close()
376
429
        return self.open_workingtree()
377
430
 
378
 
    def find_repository(self):
379
 
        """Find the repository that should be used.
380
 
 
381
 
        This does not require a branch as we use it to find the repo for
382
 
        new branches as well as to hook existing branches up to their
383
 
        repository.
384
 
        """
385
 
        return self.open_repository()
386
 
 
387
431
    def _find_or_create_repository(self, force_new_repo=None):
388
432
        return self.create_repository(shared=False)
389
433