/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 remote.py

  • Committer: Jelmer Vernooij
  • Date: 2009-03-16 13:52:49 UTC
  • mto: (0.200.259 trunk)
  • mto: This revision was merged to the branch mainline in revision 6960.
  • Revision ID: jelmer@samba.org-20090316135249-cydv9byud8s9d0pq
Fix tags when fetching from remotes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
import bzrlib
18
 
from bzrlib import urlutils
 
18
from bzrlib import branch, tag, urlutils
19
19
from bzrlib.bzrdir import BzrDir, BzrDirFormat
20
20
from bzrlib.errors import BzrError, NoSuchFile, NotLocalUrl
21
21
from bzrlib.lockable_files import TransportLock
142
142
 
143
143
    def __init__(self, gitdir, lockfiles):
144
144
        GitRepository.__init__(self, gitdir, lockfiles)
 
145
        self._refs = None
 
146
 
 
147
    def get_refs(self):
 
148
        if self._refs is not None:
 
149
            return self._refs
 
150
        def determine_wants(heads):
 
151
            self._refs = heads
 
152
            return []
 
153
        self.bzrdir.root_transport.fetch_pack(determine_wants, None, 
 
154
            lambda x: None, lambda x: mutter("git: %s" % x))
 
155
        return self._refs
145
156
 
146
157
    def fetch_pack(self, determine_wants, graph_walker, pack_data, 
147
158
                   progress=None):
157
168
        return TemporaryPackIterator(path[:-len(".pack")], resolve_ext_ref)
158
169
 
159
170
 
 
171
class RemoteGitTagDict(tag.BasicTags):
 
172
 
 
173
    def __init__(self, branch):
 
174
        self.branch = branch
 
175
        self.repository = branch.repository
 
176
 
 
177
    def get_tag_dict(self):
 
178
        ret = {}
 
179
        refs = self.repository.get_refs()
 
180
        for k,v in refs.iteritems():
 
181
            if k.startswith("refs/tags/") and not k.endswith("^{}"):
 
182
                v = refs.get(k+"^{}", v)
 
183
                ret[k] = self.branch.mapping.revision_id_foreign_to_bzr(v)
 
184
        return ret
 
185
 
 
186
    def set_tag(self, name, revid):
 
187
        # FIXME: Not supported yet, should do a push of a new ref
 
188
        raise NotImplementedError(self.set_tag)
 
189
 
 
190
 
160
191
class RemoteGitBranch(GitBranch):
161
192
 
162
193
    def __init__(self, bzrdir, repository, name, lockfiles):
163
 
        def determine_wants(heads):
164
 
            if not name in heads:
165
 
                raise NoSuchRef(name)
166
 
            self._ref = heads[name]
167
 
        bzrdir.root_transport.fetch_pack(determine_wants, None, lambda x: None, 
168
 
                             lambda x: mutter("git: %s" % x))
 
194
        heads = repository.get_refs()
 
195
        if not name in heads:
 
196
            raise NoSuchRef(name)
 
197
        self._ref = heads[name]
169
198
        super(RemoteGitBranch, self).__init__(bzrdir, repository, name, self._ref, lockfiles)
170
199
 
171
200
    def last_revision(self):