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