~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/plugins/launchpad/__init__.py

  • Committer: Martin Pool
  • Date: 2009-03-24 05:21:02 UTC
  • mfrom: (4192 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4202.
  • Revision ID: mbp@sourcefrog.net-20090324052102-8kk087b32tep3d9h
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
# see http://bazaar-vcs.org/Specs/BranchRegistrationTool
23
23
 
24
 
from bzrlib.branch import Branch
 
24
from bzrlib.lazy_import import lazy_import
 
25
lazy_import(globals(), """
 
26
import webbrowser
 
27
 
 
28
from bzrlib import (
 
29
    branch as _mod_branch,
 
30
    trace,
 
31
    )
 
32
""")
 
33
 
25
34
from bzrlib.commands import Command, Option, register_command
26
35
from bzrlib.directory_service import directories
27
 
from bzrlib.errors import BzrCommandError, NoPublicBranch, NotBranchError
 
36
from bzrlib.errors import (
 
37
    BzrCommandError,
 
38
    InvalidURL,
 
39
    NoPublicBranch,
 
40
    NotBranchError,
 
41
    )
28
42
from bzrlib.help_topics import topic_registry
 
43
from bzrlib.plugins.launchpad.lp_registration import (
 
44
    LaunchpadService,
 
45
    NotLaunchpadBranch,
 
46
    )
29
47
 
30
48
 
31
49
class cmd_register_branch(Command):
34
52
    This command lists a bzr branch in the directory of branches on
35
53
    launchpad.net.  Registration allows the branch to be associated with
36
54
    bugs or specifications.
37
 
    
 
55
 
38
56
    Before using this command you must register the product to which the
39
57
    branch belongs, and create an account for yourself on launchpad.net.
40
58
 
91
109
            DryRunLaunchpadService)
92
110
        if public_url is None:
93
111
            try:
94
 
                b = Branch.open_containing('.')[0]
 
112
                b = _mod_branch.Branch.open_containing('.')[0]
95
113
            except NotBranchError:
96
114
                raise BzrCommandError('register-branch requires a public '
97
115
                    'branch url - see bzr help register-branch.')
127
145
register_command(cmd_register_branch)
128
146
 
129
147
 
 
148
class cmd_launchpad_open(Command):
 
149
    """Open a Launchpad branch page in your web browser."""
 
150
 
 
151
    aliases = ['lp-open']
 
152
    takes_options = [
 
153
        Option('dry-run',
 
154
               'Do not actually open the browser. Just say the URL we would '
 
155
               'use.'),
 
156
        ]
 
157
    takes_args = ['location?']
 
158
 
 
159
    def _possible_locations(self, location):
 
160
        """Yield possible external locations for the branch at 'location'."""
 
161
        yield location
 
162
        try:
 
163
            branch = _mod_branch.Branch.open(location)
 
164
        except NotBranchError:
 
165
            return
 
166
        branch_url = branch.get_public_branch()
 
167
        if branch_url is not None:
 
168
            yield branch_url
 
169
        branch_url = branch.get_push_location()
 
170
        if branch_url is not None:
 
171
            yield branch_url
 
172
 
 
173
    def _get_web_url(self, service, location):
 
174
        for branch_url in self._possible_locations(location):
 
175
            try:
 
176
                return service.get_web_url_from_branch_url(branch_url)
 
177
            except (NotLaunchpadBranch, InvalidURL):
 
178
                pass
 
179
        raise NotLaunchpadBranch(branch_url)
 
180
 
 
181
    def run(self, location=None, dry_run=False):
 
182
        if location is None:
 
183
            location = u'.'
 
184
        web_url = self._get_web_url(LaunchpadService(), location)
 
185
        trace.note('Opening %s in web browser' % web_url)
 
186
        if not dry_run:
 
187
            webbrowser.open(web_url)
 
188
 
 
189
register_command(cmd_launchpad_open)
 
190
 
 
191
 
130
192
class cmd_launchpad_login(Command):
131
193
    """Show or set the Launchpad user ID.
132
194
 
182
244
    """Called by bzrlib to fetch tests for this plugin"""
183
245
    from unittest import TestSuite, TestLoader
184
246
    from bzrlib.plugins.launchpad import (
185
 
         test_account, test_lp_directory, test_lp_service, test_register,
186
 
         )
 
247
        test_account,
 
248
        test_lp_directory,
 
249
        test_lp_open,
 
250
        test_lp_service,
 
251
        test_register,
 
252
        )
187
253
 
188
254
    loader = TestLoader()
189
255
    suite = TestSuite()
191
257
        test_account,
192
258
        test_register,
193
259
        test_lp_directory,
 
260
        test_lp_open,
194
261
        test_lp_service,
195
262
        ]:
196
263
        suite.addTests(loader.loadTestsFromModule(module))