/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.358.2 by Jelmer Vernooij
Refresh copyright headers, add my email.
1
# Copyright (C) 2009-2018 Jelmer Vernooij <jelmer@jelmer.uk>
0.200.235 by Jelmer Vernooij
Depend on newer dulwich.
2
# Copyright (C) 2006-2009 Canonical Ltd
0.200.201 by Jelmer Vernooij
Try to import nothing other than __init__ when not opening git repositories.
3
0.200.1 by Robert Collins
Commit initial content.
4
# Authors: Robert Collins <robert.collins@canonical.com>
0.358.2 by Jelmer Vernooij
Refresh copyright headers, add my email.
5
#          Jelmer Vernooij <jelmer@jelmer.uk>
0.200.184 by Jelmer Vernooij
Update authors: line.
6
#          John Carr <john.carr@unrouted.co.uk>
0.200.1 by Robert Collins
Commit initial content.
7
#
8
# This program is free software; you can redistribute it and/or modify
9
# it under the terms of the GNU General Public License as published by
10
# the Free Software Foundation; either version 2 of the License, or
11
# (at your option) any later version.
12
#
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
# GNU General Public License for more details.
17
#
18
# You should have received a copy of the GNU General Public License
19
# along with this program; if not, write to the Free Software
0.358.1 by Jelmer Vernooij
Fix FSF address.
20
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.200.1 by Robert Collins
Commit initial content.
21
22
23
"""A GIT branch and repository format implementation for bzr."""
24
0.200.1528 by Jelmer Vernooij
Use absolute_import in __init__.
25
from __future__ import absolute_import
26
0.224.1 by Alexander Belchenko
bzr.exe support: allow import of dulwich from _lib subdirectory
27
import os
28
import sys
29
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
30
import breezy
0.200.519 by Jelmer Vernooij
Move imports down, might not be available in older bzr-git versions.
31
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
32
from .info import (
0.200.583 by Jelmer Vernooij
Add plugin api info.
33
    bzr_compatible_versions,
34
    bzr_plugin_version as version_info,
35
    dulwich_minimum_version,
36
    )
0.200.519 by Jelmer Vernooij
Move imports down, might not be available in older bzr-git versions.
37
38
if version_info[3] == 'final':
39
    version_string = '%d.%d.%d' % version_info[:3]
40
else:
41
    version_string = '%d.%d.%d%s%d' % version_info
42
__version__ = version_string
43
0.200.1647 by Jelmer Vernooij
Drop api support.
44
if breezy.version_info[:3] not in bzr_compatible_versions:
45
    from ...errors import IncompatibleVersion
46
    raise IncompatibleVersion(breezy,
47
            bzr_compatible_versions, breezy.version_info[:3])
0.200.519 by Jelmer Vernooij
Move imports down, might not be available in older bzr-git versions.
48
0.200.1406 by Jelmer Vernooij
Import gettext.
49
try:
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
50
    from ...i18n import load_plugin_translations
0.200.1406 by Jelmer Vernooij
Import gettext.
51
except ImportError: # No translations for bzr < 2.5
52
    gettext = lambda x: x
53
else:
54
    translation = load_plugin_translations("bzr-git")
55
    gettext = translation.gettext
0.200.519 by Jelmer Vernooij
Move imports down, might not be available in older bzr-git versions.
56
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
57
from ... import (
0.340.1 by Jelmer Vernooij
Include git/ in user agent when probing for Git.
58
    __version__ as breezy_version,
0.200.292 by Jelmer Vernooij
Fix formatting.
59
    errors as bzr_errors,
0.200.1384 by Jelmer Vernooij
Skip post commit hook when dulwich is not installed.
60
    trace,
0.200.292 by Jelmer Vernooij
Fix formatting.
61
    )
0.200.1111 by Jelmer Vernooij
Drop support for Bazaar < 2.3.
62
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
63
from ...controldir import (
0.200.1111 by Jelmer Vernooij
Drop support for Bazaar < 2.3.
64
    ControlDirFormat,
65
    Prober,
66
    format_registry,
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
67
    network_format_registry as controldir_network_format_registry,
0.200.1111 by Jelmer Vernooij
Drop support for Bazaar < 2.3.
68
    )
0.200.1012 by Jelmer Vernooij
Rename BzrDir to ControlDir.
69
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
70
from ...transport import (
0.200.292 by Jelmer Vernooij
Fix formatting.
71
    register_lazy_transport,
0.200.308 by Jelmer Vernooij
Register git protocols.
72
    register_transport_proto,
0.276.1 by Jelmer Vernooij
Use register_lazy.
73
    transport_server_registry,
0.200.292 by Jelmer Vernooij
Fix formatting.
74
    )
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
75
from ...commands import (
0.200.292 by Jelmer Vernooij
Fix formatting.
76
    plugin_cmds,
77
    )
0.200.341 by Jelmer Vernooij
Add stanza with git commit info in 'bzr version-info'
78
0.200.192 by Jelmer Vernooij
use system-provided dulwich, remove own copy.
79
0.224.1 by Alexander Belchenko
bzr.exe support: allow import of dulwich from _lib subdirectory
80
if getattr(sys, "frozen", None):
81
    # allow import additional libs from ./_lib for bzr.exe only
0.200.926 by Jelmer Vernooij
Fix formatting, drop support for Bazaar < 2.0.
82
    sys.path.append(os.path.normpath(
83
        os.path.join(os.path.dirname(__file__), '_lib')))
0.224.1 by Alexander Belchenko
bzr.exe support: allow import of dulwich from _lib subdirectory
84
0.200.987 by Jelmer Vernooij
Add DulwichFeature.
85
86
def import_dulwich():
0.200.200 by Jelmer Vernooij
Register lazily where possible.
87
    try:
88
        from dulwich import __version__ as dulwich_version
89
    except ImportError:
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
90
        raise bzr_errors.DependencyNotPresent("dulwich",
0.420.1 by Jelmer Vernooij
Update dulwich URL.
91
            "bzr-git: Please install dulwich, https://www.dulwich.io/")
0.200.200 by Jelmer Vernooij
Register lazily where possible.
92
    else:
0.200.583 by Jelmer Vernooij
Add plugin api info.
93
        if dulwich_version < dulwich_minimum_version:
0.200.926 by Jelmer Vernooij
Fix formatting, drop support for Bazaar < 2.0.
94
            raise bzr_errors.DependencyNotPresent("dulwich",
95
                "bzr-git: Dulwich is too old; at least %d.%d.%d is required" %
96
                    dulwich_minimum_version)
0.200.199 by Jelmer Vernooij
Check for bzrlib API version.
97
0.200.987 by Jelmer Vernooij
Add DulwichFeature.
98
99
_versions_checked = False
100
def lazy_check_versions():
101
    global _versions_checked
102
    if _versions_checked:
103
        return
104
    import_dulwich()
105
    _versions_checked = True
106
0.200.1012 by Jelmer Vernooij
Rename BzrDir to ControlDir.
107
format_registry.register_lazy('git',
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
108
    __name__ + ".dir", "LocalGitControlDirFormat",
0.200.1018 by Jelmer Vernooij
Fix use with new control dir API.
109
    help='GIT repository.', native=False, experimental=False,
0.200.200 by Jelmer Vernooij
Register lazily where possible.
110
    )
0.200.204 by Jelmer Vernooij
Support bzr 1.11.
111
0.200.1032 by Jelmer Vernooij
Support bare repositories.
112
format_registry.register_lazy('git-bare',
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
113
    __name__ + ".dir", "BareLocalGitControlDirFormat",
0.200.1032 by Jelmer Vernooij
Support bare repositories.
114
    help='Bare GIT repository (no working tree).', native=False,
115
    experimental=False,
116
    )
117
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
118
from ...revisionspec import (RevisionSpec_dwim, revspec_registry)
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
119
revspec_registry.register_lazy("git:", __name__ + ".revspec",
0.200.292 by Jelmer Vernooij
Fix formatting.
120
    "RevisionSpec_git")
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
121
RevisionSpec_dwim.append_possible_lazy_revspec(
0.200.1649 by Jelmer Vernooij
Fix imports.
122
    __name__ + ".revspec", "RevisionSpec_git")
0.200.645 by Jelmer Vernooij
Support DWIM git: revspecs.
123
0.200.328 by Jelmer Vernooij
Support stacking, depend on bzr 1.15.
124
0.200.1014 by Jelmer Vernooij
Fix tests.
125
class LocalGitProber(Prober):
126
127
    def probe_transport(self, transport):
0.200.720 by Jelmer Vernooij
Avoid loading bzr-git/dulwich when not necessary.
128
        try:
0.268.1 by Jelmer Vernooij
Fix probing of http repositories when pycurl is used.
129
            external_url = transport.external_url()
130
        except bzr_errors.InProcessTransport:
131
            raise bzr_errors.NotBranchError(path=transport.base)
132
        if (external_url.startswith("http:") or
133
            external_url.startswith("https:")):
134
            # Already handled by RemoteGitProber
135
            raise bzr_errors.NotBranchError(path=transport.base)
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
136
        from ... import urlutils
0.200.730 by Jelmer Vernooij
Don't claim control directories can be accessed directly, always open the
137
        if urlutils.split(transport.base)[1] == ".git":
138
            raise bzr_errors.NotBranchError(path=transport.base)
0.398.1 by Jelmer Vernooij
Support reading .git files.
139
        if not transport.has_any(['objects', '.git/objects', '.git']):
0.200.1387 by Jelmer Vernooij
Avoid using HEAD.
140
            raise bzr_errors.NotBranchError(path=transport.base)
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
141
        lazy_check_versions()
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
142
        from .dir import (
0.200.1387 by Jelmer Vernooij
Avoid using HEAD.
143
            BareLocalGitControlDirFormat,
144
            LocalGitControlDirFormat,
145
            )
0.398.1 by Jelmer Vernooij
Support reading .git files.
146
        if transport.has_any(['.git/objects', '.git']):
0.200.1387 by Jelmer Vernooij
Avoid using HEAD.
147
            return LocalGitControlDirFormat()
148
        if transport.has('info') and transport.has('objects'):
149
            return BareLocalGitControlDirFormat()
0.200.1399 by Jelmer Vernooij
In prober, always return or raise NotBranchError.
150
        raise bzr_errors.NotBranchError(path=transport.base)
0.200.201 by Jelmer Vernooij
Try to import nothing other than __init__ when not opening git repositories.
151
0.200.1139 by Jelmer Vernooij
Prober.known_formats is a class method.
152
    @classmethod
153
    def known_formats(cls):
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
154
        from .dir import (
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
155
            BareLocalGitControlDirFormat,
156
            LocalGitControlDirFormat,
157
            )
158
        return set([BareLocalGitControlDirFormat(), LocalGitControlDirFormat()])
0.200.1032 by Jelmer Vernooij
Support bare repositories.
159
160
0.409.2 by Jelmer Vernooij
call out to HTTP transport rather than creating new connection.
161
def user_agent_for_github():
162
    # GitHub requires we lie. https://github.com/dulwich/dulwich/issues/562
163
    return "git/Breezy/%s" % breezy_version
164
165
0.200.1014 by Jelmer Vernooij
Fix tests.
166
class RemoteGitProber(Prober):
167
0.200.1334 by Jelmer Vernooij
Detect smart servers.
168
    def probe_http_transport(self, transport):
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
169
        from ... import urlutils
0.200.1554 by Jelmer Vernooij
Fix probing over http with colocated branches.
170
        base_url, _ = urlutils.split_segment_parameters(transport.external_url())
171
        url = urlutils.join(base_url, "info/refs") + "?service=git-upload-pack"
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
172
        from ...transport.http._urllib import HttpTransport_urllib, Request
0.340.1 by Jelmer Vernooij
Include git/ in user agent when probing for Git.
173
        headers = {"Content-Type": "application/x-git-upload-pack-request"}
0.368.1 by Jelmer Vernooij
Work around bazaar.launchpad.net incorrectly responding to Git requests.
174
        req = Request('GET', url, accepted_errors=[200, 403, 404, 405],
175
                      headers=headers)
176
        if req.get_host() == "github.com":
0.340.1 by Jelmer Vernooij
Include git/ in user agent when probing for Git.
177
            # GitHub requires we lie. https://github.com/dulwich/dulwich/issues/562
0.409.2 by Jelmer Vernooij
call out to HTTP transport rather than creating new connection.
178
            req.add_header("User-Agent", user_agent_for_github())
0.368.1 by Jelmer Vernooij
Work around bazaar.launchpad.net incorrectly responding to Git requests.
179
        elif req.get_host() == "bazaar.launchpad.net":
180
            # Don't attempt Git probes against bazaar.launchpad.net; pad.lv/1744830
181
            raise bzr_errors.NotBranchError(transport.base)
0.200.1726 by Jelmer Vernooij
Use urllib exclusively.
182
        req.follow_redirections = True
183
        resp = transport._perform(req)
184
        if resp.code in (404, 405):
185
            raise bzr_errors.NotBranchError(transport.base)
186
        headers = resp.headers
0.200.1334 by Jelmer Vernooij
Detect smart servers.
187
        ct = headers.getheader("Content-Type")
0.200.1405 by Jelmer Vernooij
Add i18n support.
188
        if ct is None:
189
            raise bzr_errors.NotBranchError(transport.base)
0.200.1334 by Jelmer Vernooij
Detect smart servers.
190
        if ct.startswith("application/x-git"):
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
191
            from .remote import RemoteGitControlDirFormat
0.200.1334 by Jelmer Vernooij
Detect smart servers.
192
            return RemoteGitControlDirFormat()
193
        else:
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
194
            from .dir import (
0.200.1334 by Jelmer Vernooij
Detect smart servers.
195
                BareLocalGitControlDirFormat,
196
                )
0.200.1485 by Jelmer Vernooij
Keep track of refs text when opening bare repository.
197
            ret = BareLocalGitControlDirFormat()
0.200.1726 by Jelmer Vernooij
Use urllib exclusively.
198
            ret._refs_text = resp.read()
0.200.1485 by Jelmer Vernooij
Keep track of refs text when opening bare repository.
199
            return ret
0.200.1334 by Jelmer Vernooij
Detect smart servers.
200
0.200.1014 by Jelmer Vernooij
Fix tests.
201
    def probe_transport(self, transport):
0.200.1334 by Jelmer Vernooij
Detect smart servers.
202
        try:
203
            external_url = transport.external_url()
204
        except bzr_errors.InProcessTransport:
205
            raise bzr_errors.NotBranchError(path=transport.base)
206
207
        if (external_url.startswith("http:") or
208
            external_url.startswith("https:")):
209
            return self.probe_http_transport(transport)
210
211
        if (not external_url.startswith("git://") and
212
            not external_url.startswith("git+")):
0.200.1014 by Jelmer Vernooij
Fix tests.
213
            raise bzr_errors.NotBranchError(transport.base)
0.200.1334 by Jelmer Vernooij
Detect smart servers.
214
0.200.1014 by Jelmer Vernooij
Fix tests.
215
        # little ugly, but works
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
216
        from .remote import (
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
217
            GitSmartTransport,
218
            RemoteGitControlDirFormat,
219
            )
0.200.1334 by Jelmer Vernooij
Detect smart servers.
220
        if isinstance(transport, GitSmartTransport):
221
            return RemoteGitControlDirFormat()
222
        raise bzr_errors.NotBranchError(path=transport.base)
0.200.1014 by Jelmer Vernooij
Fix tests.
223
0.200.201 by Jelmer Vernooij
Try to import nothing other than __init__ when not opening git repositories.
224
    @classmethod
0.200.1139 by Jelmer Vernooij
Prober.known_formats is a class method.
225
    def known_formats(cls):
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
226
        from .remote import RemoteGitControlDirFormat
0.200.1012 by Jelmer Vernooij
Rename BzrDir to ControlDir.
227
        return set([RemoteGitControlDirFormat()])
0.200.201 by Jelmer Vernooij
Try to import nothing other than __init__ when not opening git repositories.
228
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
229
0.200.1111 by Jelmer Vernooij
Drop support for Bazaar < 2.3.
230
ControlDirFormat.register_prober(LocalGitProber)
0.200.1556 by Jelmer Vernooij
Add 'github:' directory service.
231
ControlDirFormat._server_probers.append(RemoteGitProber)
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
232
0.200.674 by Jelmer Vernooij
Fix formatting.
233
register_transport_proto('git://',
0.200.308 by Jelmer Vernooij
Register git protocols.
234
        help="Access using the Git smart server protocol.")
0.200.674 by Jelmer Vernooij
Fix formatting.
235
register_transport_proto('git+ssh://',
0.200.308 by Jelmer Vernooij
Register git protocols.
236
        help="Access using the Git smart server protocol over SSH.")
237
0.200.1645 by Jelmer Vernooij
Use __name__.
238
register_lazy_transport("git://", __name__ + '.remote',
0.200.307 by Jelmer Vernooij
Support git+ssh.
239
                        'TCPGitSmartTransport')
0.200.1645 by Jelmer Vernooij
Use __name__.
240
register_lazy_transport("git+ssh://", __name__ + '.remote',
0.200.307 by Jelmer Vernooij
Support git+ssh.
241
                        'SSHGitSmartTransport')
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
242
0.208.5 by Jelmer Vernooij
Add log show function for git.
243
0.200.1645 by Jelmer Vernooij
Use __name__.
244
plugin_cmds.register_lazy("cmd_git_import", [], __name__ + ".commands")
0.200.674 by Jelmer Vernooij
Fix formatting.
245
plugin_cmds.register_lazy("cmd_git_object", ["git-objects", "git-cat"],
0.200.1645 by Jelmer Vernooij
Use __name__.
246
    __name__ + ".commands")
247
plugin_cmds.register_lazy("cmd_git_refs", [], __name__ + ".commands")
248
plugin_cmds.register_lazy("cmd_git_apply", [], __name__ + ".commands")
0.277.6 by Jelmer Vernooij
Add 'bzr git-push-pristine-tar' command.
249
plugin_cmds.register_lazy("cmd_git_push_pristine_tar_deltas",
250
        ['git-push-pristine-tar', 'git-push-pristine'],
0.200.1645 by Jelmer Vernooij
Use __name__.
251
    __name__ + ".commands")
0.200.177 by Jelmer Vernooij
Add git-import command.
252
0.200.1262 by Jelmer Vernooij
Add extract git foreign revid.
253
def extract_git_foreign_revid(rev):
254
    try:
255
        foreign_revid = rev.foreign_revid
256
    except AttributeError:
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
257
        from .mapping import mapping_registry
0.200.1262 by Jelmer Vernooij
Add extract git foreign revid.
258
        foreign_revid, mapping = \
259
            mapping_registry.parse_revision_id(rev.revision_id)
260
        return foreign_revid
261
    else:
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
262
        from .mapping import foreign_vcs_git
0.200.1262 by Jelmer Vernooij
Add extract git foreign revid.
263
        if rev.mapping.vcs == foreign_vcs_git:
264
            return foreign_revid
265
        else:
266
            raise bzr_errors.InvalidRevisionId(rev.revision_id, None)
267
268
0.200.341 by Jelmer Vernooij
Add stanza with git commit info in 'bzr version-info'
269
def update_stanza(rev, stanza):
270
    mapping = getattr(rev, "mapping", None)
0.200.1262 by Jelmer Vernooij
Add extract git foreign revid.
271
    try:
272
        git_commit = extract_git_foreign_revid(rev)
273
    except bzr_errors.InvalidRevisionId:
274
        pass
275
    else:
276
        stanza.add("git-commit", git_commit)
0.200.341 by Jelmer Vernooij
Add stanza with git commit info in 'bzr version-info'
277
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
278
from ...hooks import install_lazy_named_hook
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
279
install_lazy_named_hook("breezy.version_info_formats.format_rio",
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
280
    "RioVersionInfoBuilder.hooks", "revision", update_stanza,
281
    "git commits")
0.200.341 by Jelmer Vernooij
Add stanza with git commit info in 'bzr version-info'
282
0.200.531 by Jelmer Vernooij
Support 'bzr serve --git'.
283
0.239.6 by Jelmer Vernooij
Remove pre-1.15 incompatible code.
284
transport_server_registry.register_lazy('git',
0.200.1645 by Jelmer Vernooij
Use __name__.
285
    __name__ + '.server',
0.239.6 by Jelmer Vernooij
Remove pre-1.15 incompatible code.
286
    'serve_git',
287
    'Git Smart server protocol over TCP. (default port: 9418)')
0.200.531 by Jelmer Vernooij
Support 'bzr serve --git'.
288
0.200.1496 by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'.
289
transport_server_registry.register_lazy('git-receive-pack',
0.200.1645 by Jelmer Vernooij
Use __name__.
290
    __name__ + '.server',
0.200.1496 by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'.
291
    'serve_git_receive_pack',
0.200.1595 by Jelmer Vernooij
Fix formatting of option names.
292
    help='Git Smart server receive pack command. (inetd mode only)')
0.200.1496 by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'.
293
transport_server_registry.register_lazy('git-upload-pack',
0.200.1645 by Jelmer Vernooij
Use __name__.
294
    __name__ + 'git.server',
0.200.1496 by Jelmer Vernooij
Provide --git-receive-pack and --git-upload-pack options for 'bzr serve'.
295
    'serve_git_upload_pack',
0.200.1595 by Jelmer Vernooij
Fix formatting of option names.
296
    help='Git Smart server upload pack command. (inetd mode only)')
0.200.531 by Jelmer Vernooij
Support 'bzr serve --git'.
297
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
298
from ...repository import (
0.200.1083 by Jelmer Vernooij
Register repository format.
299
    format_registry as repository_format_registry,
0.200.926 by Jelmer Vernooij
Fix formatting, drop support for Bazaar < 2.0.
300
    network_format_registry as repository_network_format_registry,
301
    )
0.200.674 by Jelmer Vernooij
Fix formatting.
302
repository_network_format_registry.register_lazy('git',
0.200.1645 by Jelmer Vernooij
Use __name__.
303
    __name__ + '.repository', 'GitRepositoryFormat')
0.200.536 by Jelmer Vernooij
Implement network name.
304
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
305
register_extra_lazy_repository_format = getattr(repository_format_registry,
306
    "register_extra_lazy")
0.200.1645 by Jelmer Vernooij
Use __name__.
307
register_extra_lazy_repository_format(__name__ + '.repository',
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
308
    'GitRepositoryFormat')
0.200.1083 by Jelmer Vernooij
Register repository format.
309
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
310
from ...branch import (
0.200.1127 by Jelmer Vernooij
Register branch format network name.
311
    network_format_registry as branch_network_format_registry,
312
    )
313
branch_network_format_registry.register_lazy('git',
0.295.1 by Jelmer Vernooij
Split up branch formats.
314
    __name__ + '.branch', 'LocalGitBranchFormat')
315
0.200.1127 by Jelmer Vernooij
Register branch format network name.
316
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
317
from ...branch import (
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
318
    format_registry as branch_format_registry,
319
    )
320
branch_format_registry.register_extra_lazy(
0.200.1645 by Jelmer Vernooij
Use __name__.
321
    __name__ + '.branch',
0.295.1 by Jelmer Vernooij
Split up branch formats.
322
    'LocalGitBranchFormat',
323
    )
324
branch_format_registry.register_extra_lazy(
325
    __name__ + '.remote',
326
    'RemoteGitBranchFormat',
327
    )
328
0.200.1090 by Jelmer Vernooij
Register branch format for testing.
329
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
330
from ...workingtree import (
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
331
    format_registry as workingtree_format_registry,
332
    )
333
workingtree_format_registry.register_extra_lazy(
0.200.1645 by Jelmer Vernooij
Use __name__.
334
    __name__ + '.workingtree',
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
335
    'GitWorkingTreeFormat',
336
    )
0.200.1093 by Jelmer Vernooij
Register working tree format for testing.
337
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
338
controldir_network_format_registry.register_lazy('git',
0.200.1645 by Jelmer Vernooij
Use __name__.
339
    __name__ + ".dir", "GitControlDirFormat")
0.200.536 by Jelmer Vernooij
Implement network name.
340
0.276.1 by Jelmer Vernooij
Use register_lazy.
341
342
try:
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
343
    from ...registry import register_lazy
0.276.1 by Jelmer Vernooij
Use register_lazy.
344
except ImportError:
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
345
    from ...diff import format_registry as diff_format_registry
0.200.1645 by Jelmer Vernooij
Use __name__.
346
    diff_format_registry.register_lazy('git', __name__ + '.send',
0.276.1 by Jelmer Vernooij
Use register_lazy.
347
        'GitDiffTree', 'Git am-style diff format')
348
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
349
    from ...send import (
0.276.1 by Jelmer Vernooij
Use register_lazy.
350
        format_registry as send_format_registry,
351
        )
0.200.1645 by Jelmer Vernooij
Use __name__.
352
    send_format_registry.register_lazy('git', __name__ + '.send',
0.276.1 by Jelmer Vernooij
Use register_lazy.
353
                                       'send_git', 'Git am-style diff format')
354
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
355
    from ...directory_service import directories
0.200.1645 by Jelmer Vernooij
Use __name__.
356
    directories.register_lazy('github:', __name__ + '.directory',
0.276.1 by Jelmer Vernooij
Use register_lazy.
357
                              'GitHubDirectory',
358
                              'GitHub directory.')
0.200.1645 by Jelmer Vernooij
Use __name__.
359
    directories.register_lazy('git@github.com:', __name__ + '.directory',
0.276.1 by Jelmer Vernooij
Use register_lazy.
360
                              'GitHubDirectory',
361
                              'GitHub directory.')
362
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
363
    from ...help_topics import (
0.276.1 by Jelmer Vernooij
Use register_lazy.
364
        topic_registry,
365
        )
0.200.1645 by Jelmer Vernooij
Use __name__.
366
    topic_registry.register_lazy('git', __name__ + '.help', 'help_git',
0.276.1 by Jelmer Vernooij
Use register_lazy.
367
        'Using Bazaar with Git')
368
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
369
    from ...foreign import (
0.276.1 by Jelmer Vernooij
Use register_lazy.
370
        foreign_vcs_registry,
371
        )
372
    foreign_vcs_registry.register_lazy("git",
0.200.1645 by Jelmer Vernooij
Use __name__.
373
        __name__ + ".mapping", "foreign_vcs_git", "Stupid content tracker")
0.276.1 by Jelmer Vernooij
Use register_lazy.
374
else:
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
375
    register_lazy("breezy.diff", "format_registry",
0.200.1645 by Jelmer Vernooij
Use __name__.
376
        'git', __name__ + '.send', 'GitDiffTree',
0.276.1 by Jelmer Vernooij
Use register_lazy.
377
        'Git am-style diff format')
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
378
    register_lazy("breezy.send", "format_registry",
0.200.1645 by Jelmer Vernooij
Use __name__.
379
        'git', __name__ + '.send', 'send_git',
0.276.1 by Jelmer Vernooij
Use register_lazy.
380
        'Git am-style diff format')
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
381
    register_lazy('breezy.directory_service', 'directories', 'github:',
0.200.1645 by Jelmer Vernooij
Use __name__.
382
            __name__ + '.directory', 'GitHubDirectory',
0.276.1 by Jelmer Vernooij
Use register_lazy.
383
            'GitHub directory.')
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
384
    register_lazy('breezy.directory_service', 'directories',
0.200.1649 by Jelmer Vernooij
Fix imports.
385
            'git@github.com:', __name__ + '.directory',
0.276.1 by Jelmer Vernooij
Use register_lazy.
386
            'GitHubDirectory', 'GitHub directory.')
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
387
    register_lazy('breezy.help_topics', 'topic_registry',
0.200.1645 by Jelmer Vernooij
Use __name__.
388
            'git', __name__ + '.help', 'help_git',
0.276.1 by Jelmer Vernooij
Use register_lazy.
389
            'Using Bazaar with Git')
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
390
    register_lazy('breezy.foreign', 'foreign_vcs_registry', "git",
0.200.1645 by Jelmer Vernooij
Use __name__.
391
        __name__ + ".mapping", "foreign_vcs_git", "Stupid content tracker")
0.200.1291 by Jelmer Vernooij
add hook for updating to local git cache.
392
393
def update_git_cache(repository, revid):
394
    """Update the git cache after a local commit."""
395
    if getattr(repository, "_git", None) is not None:
396
        return # No need to update cache for git repositories
397
398
    if not repository.control_transport.has("git"):
399
        return # No existing cache, don't bother updating
0.200.1384 by Jelmer Vernooij
Skip post commit hook when dulwich is not installed.
400
    try:
401
        lazy_check_versions()
402
    except bzr_errors.DependencyNotPresent, e:
403
        # dulwich is probably missing. silently ignore
404
        trace.mutter("not updating git map for %r: %s",
405
            repository, e)
406
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
407
    from .object_store import BazaarObjectStore
0.200.1291 by Jelmer Vernooij
add hook for updating to local git cache.
408
    store = BazaarObjectStore(repository)
0.200.1788 by Jelmer Vernooij
Use context managers.
409
    with store.lock_write():
0.200.1583 by Jelmer Vernooij
Use config stacks.
410
        try:
411
            parent_revisions = set(repository.get_parent_map([revid])[revid])
412
        except KeyError:
413
            # Isn't this a bit odd - how can a revision that was just committed be missing?
414
            return
0.200.1319 by Jelmer Vernooij
Only update git cache during post-commit if parents are already in the cache.
415
        missing_revisions = store._missing_revisions(parent_revisions)
416
        if not missing_revisions:
417
            # Only update if the cache was up to date previously
418
            store._update_sha_map_revision(revid)
0.200.1291 by Jelmer Vernooij
add hook for updating to local git cache.
419
420
421
def post_commit_update_cache(local_branch, master_branch, old_revno, old_revid,
422
        new_revno, new_revid):
423
    if local_branch is not None:
424
        update_git_cache(local_branch.repository, new_revid)
425
    update_git_cache(master_branch.repository, new_revid)
426
427
0.271.5 by Jelmer Vernooij
Hook into loggerhead.
428
def loggerhead_git_hook(branch_app, environ):
429
    branch = branch_app.branch
0.200.1583 by Jelmer Vernooij
Use config stacks.
430
    config_stack = branch.get_config_stack()
431
    if config_stack.get('http_git'):
0.271.5 by Jelmer Vernooij
Hook into loggerhead.
432
        return None
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
433
    from .server import git_http_hook
0.271.5 by Jelmer Vernooij
Hook into loggerhead.
434
    return git_http_hook(branch, environ['REQUEST_METHOD'],
435
        environ['PATH_INFO'])
436
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
437
install_lazy_named_hook("breezy.branch",
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
438
    "Branch.hooks", "post_commit", post_commit_update_cache,
439
    "git cache")
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
440
install_lazy_named_hook("breezy.plugins.loggerhead.apps.branch",
0.200.1559 by Jelmer Vernooij
Fix compatibility with bzr 2.5.
441
    "BranchWSGIApp.hooks", "controller",
442
    loggerhead_git_hook, "git support")
0.200.1291 by Jelmer Vernooij
add hook for updating to local git cache.
443
444
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
445
from ...config import (
0.200.1583 by Jelmer Vernooij
Use config stacks.
446
    option_registry,
447
    Option,
448
    bool_from_store,
449
    )
450
451
option_registry.register(
452
    Option('git.http',
453
           default=None, from_unicode=bool_from_store, invalid='warning',
454
           help='''\
455
Allow fetching of Git packs over HTTP.
456
457
This enables support for fetching Git packs over HTTP in Loggerhead.
458
'''))
459
0.201.1 by Jelmer Vernooij
Add very small initial testsuite.
460
def test_suite():
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
461
    from . import tests
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
462
    return tests.test_suite()