/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

Share more code between local and remote classes, support opening remote branches.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
from bzrlib.plugins.git import git
27
27
from bzrlib.plugins.git.branch import GitBranch
28
 
from bzrlib.plugins.git.dir import GitDir
29
28
from bzrlib.plugins.git.foreign import ForeignBranch
30
29
from bzrlib.plugins.git.repository import GitFormat, GitRepository
31
30
 
32
31
import urllib
33
32
import urlparse
34
33
 
35
 
from dulwich.pack import PackData
36
 
 
37
34
 
38
35
class GitSmartTransport(Transport):
39
36
 
55
52
        self._client.fetch_pack(self._path, determine_wants, graph_walker, 
56
53
                pack_data, progress)
57
54
 
58
 
    def fetch_objects(self, determine_wants, graph_walker, progress=None):
59
 
        fd, path = tempfile.mkstemp(dir=self.pack_dir(), suffix=".pack")
60
 
        self.fetch_pack(determine_wants, graph_walker, lambda x: os.write(fd, x), progress)
61
 
        os.close(fd)
62
 
        try:
63
 
            p = PackData(path)
64
 
            for o in p.iterobjects():
65
 
                yield o
66
 
        finally:
67
 
            os.remove(path)
68
 
 
69
55
    def get(self, path):
70
56
        raise NoSuchFile(path)
71
57
 
79
65
        return GitSmartTransport(newurl, self._client)
80
66
 
81
67
 
82
 
class RemoteGitDir(GitDir):
 
68
class RemoteGitDir(BzrDir):
83
69
 
84
70
    def __init__(self, transport, lockfiles, format):
85
71
        self._format = format
87
73
        self.transport = transport
88
74
        self._lockfiles = lockfiles
89
75
 
 
76
    def is_supported(self):
 
77
        return True
 
78
 
90
79
    def open_repository(self):
91
80
        return RemoteGitRepository(self, self._lockfiles)
92
81
 
98
87
    def open_workingtree(self):
99
88
        raise NotLocalUrl(self.transport.base)
100
89
 
 
90
    def cloning_metadir(self, stacked=False):
 
91
        """Produce a metadir suitable for cloning with."""
 
92
        if stacked:
 
93
            return bzrlib.bzrdir.format_registry.make_bzrdir("1.6.1-rich-root")
 
94
        else:
 
95
            return bzrlib.bzrdir.format_registry.make_bzrdir("rich-root-pack")
 
96
 
101
97
 
102
98
class RemoteGitRepository(GitRepository):
103
99
 
104
100
    def __init__(self, gitdir, lockfiles):
105
101
        GitRepository.__init__(self, gitdir, lockfiles)
106
102
 
107
 
    def fetch_pack(self, determine_wants, graph_walker, pack_data, 
108
 
                   progress=None):
109
 
        self._transport.fetch_pack(determine_wants, graph_walker, pack_data, 
110
 
            progress)
 
103
    def fetch_pack(self, determine_wants, graph_walker, pack_data):
 
104
        self._transport.fetch_pack(determine_wants, graph_walker, pack_data)
111
105
 
112
106
 
113
107
class RemoteGitBranch(GitBranch):
120
114
        super(RemoteGitBranch, self).__init__(bzrdir, repository, name, self._ref, lockfiles)
121
115
 
122
116
    def last_revision(self):
123
 
        return self.mapping.revision_id_foreign_to_bzr(self._ref)
124
 
 
 
117
        return self._ref