/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6622.7.1 by Colin Watson
Remove `bzr register-branch`, since it has not worked for a long time.
1
# Copyright (C) 2006-2017 Canonical Ltd
0.4.1 by Martin Pool
Start lp-register command
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.4.1 by Martin Pool
Start lp-register command
16
5459.3.1 by Neil Martinsen-Burrell
add more detailed help for Launchpad plugin
17
"""Launchpad.net integration plugin for Bazaar.
18
19
This plugin provides facilities for working with Bazaar branches that are
7195.5.1 by Martin
Fix remaining whitespace lint in codebase
20
hosted on Launchpad (http://launchpad.net).  It provides a directory service
5459.3.2 by Neil Martinsen-Burrell
address James Westbys review comments
21
for referring to Launchpad branches using the "lp:" prefix.  For example,
22
lp:bzr refers to the Bazaar's main development branch and
23
lp:~username/project/branch-name can be used to refer to a specific branch.
24
25
This plugin provides a bug tracker so that "bzr commit --fixes lp:1234" will
26
record that revision as fixing Launchpad's bug 1234.
27
28
The plugin also provides the following commands:
29
30
    launchpad-login: Show or set the Launchpad user ID
31
    launchpad-open: Open a Launchpad branch page in your web browser
7211.13.4 by Jelmer Vernooij
Remove references to lp-propose.
32
    launchpad-mirror: Ask Launchpad to mirror a branch now
33
34
As well as the following deprecated command:
35
5459.3.2 by Neil Martinsen-Burrell
address James Westbys review comments
36
    lp-propose-merge: Propose merging a branch on Launchpad
7211.13.4 by Jelmer Vernooij
Remove references to lp-propose.
37
         (deprecated in favour of the more generic 'brz propose-merge')
5459.3.1 by Neil Martinsen-Burrell
add more detailed help for Launchpad plugin
38
39
"""
0.4.1 by Martin Pool
Start lp-register command
40
6379.6.1 by Jelmer Vernooij
Import absolute_import in a few places.
41
from __future__ import absolute_import
42
0.4.17 by Martin Pool
Allow xmlrpc service url to be overridden by $BZR_LP_XMLRPC_URL
43
# The XMLRPC server address can be overridden by setting the environment
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
44
# variable $BRZ_LP_XMLRPC_URL
0.4.17 by Martin Pool
Allow xmlrpc service url to be overridden by $BZR_LP_XMLRPC_URL
45
5560.2.1 by Vincent Ladeuil
Fix the remaining references to http://bazaar-vcs.org (except the explicitly historical ones).
46
# see http://wiki.bazaar.canonical.com/Specs/BranchRegistrationTool
0.4.9 by Martin Pool
Don't transmit non-standard xmlrpc <nil> value.
47
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
48
from ... import (
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
49
    branch as _mod_branch,
6464.1.1 by Jelmer Vernooij
Merge launchpad configuration to config stacks.
50
    config as _mod_config,
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
51
    lazy_regex,
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
52
    # Since we are a built-in plugin we share the breezy version
6491.2.1 by Jelmer Vernooij
lazily load launchpad plugin commands.
53
    trace,
7143.11.1 by Jelmer Vernooij
Remove some unused imports.
54
    version_info,  # noqa: F401
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
55
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
56
from ...commands import (
6491.2.1 by Jelmer Vernooij
lazily load launchpad plugin commands.
57
    plugin_cmds,
5753.2.2 by Jelmer Vernooij
Remove some unnecessary imports, clean up lazy imports.
58
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
59
from ...directory_service import directories
60
from ...help_topics import topic_registry
6491.2.1 by Jelmer Vernooij
lazily load launchpad plugin commands.
61
62
for klsname, aliases in [
63
    ("cmd_launchpad_open", ["lp-open"]),
64
    ("cmd_launchpad_login", ["lp-login"]),
6852.1.1 by Jelmer Vernooij
Add lp-logout command.
65
    ("cmd_launchpad_logout", ["lp-logout"]),
6491.2.1 by Jelmer Vernooij
lazily load launchpad plugin commands.
66
    ("cmd_lp_propose_merge", ["lp-submit", "lp-propose"]),
7143.15.2 by Jelmer Vernooij
Run autopep8.
67
        ("cmd_lp_find_proposal", [])]:
6491.2.1 by Jelmer Vernooij
lazily load launchpad plugin commands.
68
    plugin_cmds.register_lazy(klsname, aliases,
7143.15.2 by Jelmer Vernooij
Run autopep8.
69
                              "breezy.plugins.launchpad.cmds")
5546.2.1 by Aaron Bentley
Add lp-find-proposal.
70
71
3251.4.2 by Aaron Bentley
Clean up Launchpad directory service code
72
def _register_directory():
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
73
    directories.register_lazy('lp:', 'breezy.plugins.launchpad.lp_directory',
3251.4.2 by Aaron Bentley
Clean up Launchpad directory service code
74
                              'LaunchpadDirectory',
75
                              'Launchpad-based directory service',)
5462.4.1 by Barry Warsaw
Added support for ubuntu: and debianlp: schemes, accessing the relevant
76
    directories.register_lazy(
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
77
        'debianlp:', 'breezy.plugins.launchpad.lp_directory',
5462.4.1 by Barry Warsaw
Added support for ubuntu: and debianlp: schemes, accessing the relevant
78
        'LaunchpadDirectory',
79
        'debianlp: shortcut')
80
    directories.register_lazy(
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
81
        'ubuntu:', 'breezy.plugins.launchpad.lp_directory',
5462.4.1 by Barry Warsaw
Added support for ubuntu: and debianlp: schemes, accessing the relevant
82
        'LaunchpadDirectory',
83
        'ubuntu: shortcut')
84
7143.15.2 by Jelmer Vernooij
Run autopep8.
85
3251.4.2 by Aaron Bentley
Clean up Launchpad directory service code
86
_register_directory()
2245.8.5 by Martin Pool
Add short-form lp:PRODUCT url form
87
6024.3.5 by John Arbash Meinel
Pull out code into helper functions, which allows us to test it.
88
# This is kept in __init__ so that we don't load lp_api_lite unless the branch
89
# actually matches. That way we can avoid importing extra dependencies like
90
# json.
91
_package_branch = lazy_regex.lazy_compile(
6024.3.4 by John Arbash Meinel
More tests, and a small fix for the regex.
92
    r'bazaar.launchpad.net.*?/'
6024.3.3 by John Arbash Meinel
Start at least testing the package_branch regex.
93
    r'(?P<user>~[^/]+/)?(?P<archive>ubuntu|debian)/(?P<series>[^/]+/)?'
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
94
    r'(?P<project>[^/]+)(?P<branch>/[^/]+)?'
95
    )
6024.3.5 by John Arbash Meinel
Pull out code into helper functions, which allows us to test it.
96
7143.15.2 by Jelmer Vernooij
Run autopep8.
97
6024.3.5 by John Arbash Meinel
Pull out code into helper functions, which allows us to test it.
98
def _get_package_branch_info(url):
99
    """Determine the packaging information for this URL.
100
101
    :return: If this isn't a packaging branch, return None. If it is, return
102
        (archive, series, project)
103
    """
6015.10.2 by John Arbash Meinel
Fix bug #816417, it seems older foreign branch implementations did not set Branch.base.
104
    if url is None:
105
        return None
6024.3.5 by John Arbash Meinel
Pull out code into helper functions, which allows us to test it.
106
    m = _package_branch.search(url)
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
107
    if m is None:
6015.10.2 by John Arbash Meinel
Fix bug #816417, it seems older foreign branch implementations did not set Branch.base.
108
        return None
6024.3.3 by John Arbash Meinel
Start at least testing the package_branch regex.
109
    archive, series, project, user = m.group('archive', 'series',
110
                                             'project', 'user')
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
111
    if series is not None:
5050.79.7 by John Arbash Meinel
clarify a comment.
112
        # series is optional, so the regex includes the extra '/', we don't
113
        # want to send that on (it causes Internal Server Errors.)
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
114
        series = series.strip('/')
6024.3.5 by John Arbash Meinel
Pull out code into helper functions, which allows us to test it.
115
    if user is not None:
116
        user = user.strip('~/')
117
        if user != 'ubuntu-branches':
118
            return None
119
    return archive, series, project
120
121
122
def _check_is_up_to_date(the_branch):
123
    info = _get_package_branch_info(the_branch.base)
124
    if info is None:
125
        return
6464.1.2 by Jelmer Vernooij
Use bool_from_store, fix tests.
126
    c = the_branch.get_config_stack()
6464.1.1 by Jelmer Vernooij
Merge launchpad configuration to config stacks.
127
    verbosity = c.get('launchpad.packaging_verbosity')
128
    if not verbosity:
6024.3.8 by John Arbash Meinel
Move 'place' logic onto LatestPublication.
129
        trace.mutter('not checking %s because verbosity is turned off'
130
                     % (the_branch.base,))
131
        return
6024.3.5 by John Arbash Meinel
Pull out code into helper functions, which allows us to test it.
132
    archive, series, project = info
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
133
    from . import lp_api_lite
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
134
    latest_pub = lp_api_lite.LatestPublication(archive, series, project)
6024.3.8 by John Arbash Meinel
Move 'place' logic onto LatestPublication.
135
    lp_api_lite.report_freshness(the_branch, verbosity, latest_pub)
136
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
137
138
def _register_hooks():
139
    _mod_branch.Branch.hooks.install_named_hook('open',
7143.15.2 by Jelmer Vernooij
Run autopep8.
140
                                                _check_is_up_to_date, 'package-branch-up-to-date')
5050.79.5 by John Arbash Meinel
Add a Branch.open hook.
141
142
143
_register_hooks()
144
7143.15.2 by Jelmer Vernooij
Run autopep8.
145
6625.1.5 by Martin
Drop custom load_tests implementation and use unittest signature
146
def load_tests(loader, basic_tests, pattern):
4776.2.2 by Vincent Ladeuil
Start testing the XMLRPC transport re-implemented on top of _urllib2_wrappers.
147
    testmod_names = [
148
        'test_account',
149
        'test_register',
4505.6.25 by Jonathan Lange
Add a test to check what happens if launchpadlib not available.
150
        'test_lp_api',
5050.79.2 by John Arbash Meinel
Start refactoring lp_api_lite and making it testable.
151
        'test_lp_api_lite',
4776.2.2 by Vincent Ladeuil
Start testing the XMLRPC transport re-implemented on top of _urllib2_wrappers.
152
        'test_lp_directory',
153
        'test_lp_login',
154
        'test_lp_open',
155
        'test_lp_service',
156
        ]
157
    basic_tests.addTest(loader.loadTestsFromModuleNames(
7143.15.2 by Jelmer Vernooij
Run autopep8.
158
        ["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
4776.2.2 by Vincent Ladeuil
Start testing the XMLRPC transport re-implemented on top of _urllib2_wrappers.
159
    return basic_tests
2245.8.1 by Martin Pool
Start adding tests for launchpad indirection
160
2245.8.6 by Martin Pool
Documentation under 'help launchpad'
161
162
_launchpad_help = """Integration with Launchpad.net
163
164
Launchpad.net provides free Bazaar branch hosting with integrated bug and
165
specification tracking.
166
3031.1.1 by jml at canonical
Expand the documentation on lp:// URLs and mention the launchpad-login command.
167
The bzr client (through the plugin called 'launchpad') has special
2245.8.6 by Martin Pool
Documentation under 'help launchpad'
168
features to communicate with Launchpad:
169
3031.1.1 by jml at canonical
Expand the documentation on lp:// URLs and mention the launchpad-login command.
170
    * The launchpad-login command tells Bazaar your Launchpad user name. This
171
      is then used by the 'lp:' transport to download your branches using
172
      bzr+ssh://.
173
4258.1.1 by James Westby
Add "--fixes lp:" to the launchpad plugin documentation.
174
    * The 'lp:' transport uses Launchpad as a directory service: for example
175
      'lp:bzr' and 'lp:python' refer to the main branches of the relevant
176
      projects and may be branched, logged, etc. You can also use the 'lp:'
177
      transport to refer to specific branches, e.g. lp:~bzr/bzr/trunk.
178
179
    * The 'lp:' bug tracker alias can expand launchpad bug numbers to their
180
      URLs for use with 'bzr commit --fixes', e.g. 'bzr commit --fixes lp:12345'
181
      will record a revision property that marks that revision as fixing
4258.1.2 by Matt Nordhoff
Fix a typo in the launchpad plugin's help
182
      Launchpad bug 12345. When you push that branch to Launchpad it will
183
      automatically be linked to the bug report.
4258.1.1 by James Westby
Add "--fixes lp:" to the launchpad plugin documentation.
184
2245.8.6 by Martin Pool
Documentation under 'help launchpad'
185
For more information see http://help.launchpad.net/
186
"""
187
topic_registry.register('launchpad',
7143.15.2 by Jelmer Vernooij
Run autopep8.
188
                        _launchpad_help,
189
                        'Using Bazaar with Launchpad.net')
6464.1.1 by Jelmer Vernooij
Merge launchpad configuration to config stacks.
190
191
_mod_config.option_registry.register(
6464.1.2 by Jelmer Vernooij
Use bool_from_store, fix tests.
192
    _mod_config.Option('launchpad.packaging_verbosity', default=True,
7143.15.2 by Jelmer Vernooij
Run autopep8.
193
                       from_unicode=_mod_config.bool_from_store,
194
                       help="""\
6464.1.1 by Jelmer Vernooij
Merge launchpad configuration to config stacks.
195
Whether to warn if a UDD package import branch is accessed that is out of date.
196
197
Setting this option to 'off' will disable verbosity.
198
"""))
199
_mod_config.option_registry.register(
6464.1.2 by Jelmer Vernooij
Use bool_from_store, fix tests.
200
    _mod_config.Option('launchpad_username', default=None,
7143.15.2 by Jelmer Vernooij
Run autopep8.
201
                       help="The username to login with when conneting to Launchpad."))