Merge ~bjornt/gitlptools:fix-merge-target into ~ubuntuone-hackers/gitlptools:master

Proposed by Björn Tillenius
Status: Merged
Approved by: Adam Collard
Approved revision: 3ad3b82c05c24794587af7d2a006a1f7cb4cc6dd
Merged at revision: db68ca6ecfe103df187315a6439ad49122c88b28
Proposed branch: ~bjornt/gitlptools:fix-merge-target
Merge into: ~ubuntuone-hackers/gitlptools:master
Diff against target: 83 lines (+18/-9)
2 files modified
src/gitlptools/__init__.py (+12/-4)
tests/test_gitlptools.py (+6/-5)
Reviewer Review Type Date Requested Status
Adam Collard (community) Approve
Review via email: mp+354400@code.launchpad.net

Commit message

Don't require people to use lp: URLs.

The code that found out the merge target in order to generate
the diff assumed that the remote URL started with 'lp:'.

Now it works even if you don't set up that alias, and instead
keep the original git+ssh://git.launchpad.net/ URLs.

To post a comment you must log in.
Revision history for this message
Adam Collard (adam-collard) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/gitlptools/__init__.py b/src/gitlptools/__init__.py
index f9c36d4..8747895 100644
--- a/src/gitlptools/__init__.py
+++ b/src/gitlptools/__init__.py
@@ -204,6 +204,9 @@ def git_lp_propose(argv=sys.argv[1:]):
204 'configs for the branch, if set.'))204 'configs for the branch, if set.'))
205 parser.add_argument(205 parser.add_argument(
206 '-m', '--message', help='Commit message for the merge proposal.')206 '-m', '--message', help='Commit message for the merge proposal.')
207 parser.add_argument(
208 '--dry-run', help="Don't actually create the merge proposal.",
209 action='store_true', default=False)
207 options = parse_args_with_logging(parser, argv)210 options = parse_args_with_logging(parser, argv)
208 logger = logging.getLogger('gitlptools')211 logger = logging.getLogger('gitlptools')
209 merge_target = options.merge_target212 merge_target = options.merge_target
@@ -239,6 +242,10 @@ def git_lp_propose(argv=sys.argv[1:]):
239 if not commit_message:242 if not commit_message:
240 sys.exit("Empty commit message. Aborted!")243 sys.exit("Empty commit message. Aborted!")
241244
245 if options.dry_run:
246 logger.info('Dry run. Aborted!')
247 sys.exit(0)
248
242 try:249 try:
243 mp = lp_target_refs.branch.createMergeProposal(250 mp = lp_target_refs.branch.createMergeProposal(
244 merge_target=lp_target_refs.target, commit_message=commit_message,251 merge_target=lp_target_refs.target, commit_message=commit_message,
@@ -329,10 +336,11 @@ def get_lp_target_refs(lp, lp_git_ref, merge_target):
329 branch=lp_user_repo.getRefByPath(path=lp_git_ref.lp_branch_name))336 branch=lp_user_repo.getRefByPath(path=lp_git_ref.lp_branch_name))
330337
331338
332def get_remote_urls_map(git_repo):339def get_remote_paths_map(git_repo):
333 """Return a dict mapping remote urls to their names."""340 """Return a dict mapping remote paths to their names."""
334 return {341 return {
335 remote.url.lstrip('lp:'): remote.name for remote in git_repo.remotes}342 get_launchpad_path(remote.url): remote.name
343 for remote in git_repo.remotes}
336344
337345
338def prompt_for_commit_message(git_repo, merge_target):346def prompt_for_commit_message(git_repo, merge_target):
@@ -363,7 +371,7 @@ def prompt_for_commit_message(git_repo, merge_target):
363def _get_commit_messages_and_stats(git_repo, merge_target):371def _get_commit_messages_and_stats(git_repo, merge_target):
364 """Return with the"""372 """Return with the"""
365 try:373 try:
366 target = get_remote_urls_map(git_repo)[merge_target.repo]374 target = get_remote_paths_map(git_repo)[merge_target.repo]
367 except KeyError:375 except KeyError:
368 raise UnknownTargetURL(merge_target.repo)376 raise UnknownTargetURL(merge_target.repo)
369377
diff --git a/tests/test_gitlptools.py b/tests/test_gitlptools.py
index 19298fb..6cc0fef 100644
--- a/tests/test_gitlptools.py
+++ b/tests/test_gitlptools.py
@@ -10,7 +10,7 @@ from gitlptools import (
10 InvalidMergeTarget,10 InvalidMergeTarget,
11 LPGitRef,11 LPGitRef,
12 parse_args_with_logging,12 parse_args_with_logging,
13 get_remote_urls_map13 get_remote_paths_map
14)14)
1515
1616
@@ -139,15 +139,16 @@ def test_merge_target_remote_unknown():
139 get_merge_target(git_repo, "unknown/master")139 get_merge_target(git_repo, "unknown/master")
140140
141141
142def test_get_remote_urls_map():142@pytest.mark.parametrize('url_prefix', ['lp:', 'git+ssh://git.launchpad.net/'])
143def test_get_remote_paths_map(url_prefix):
143 git_repo = Mock(144 git_repo = Mock(
144 remotes=[145 remotes=[
145 FakeRemote(name='upstream', url='lp:testrepo'),146 FakeRemote(name='upstream', url=url_prefix + 'testrepo'),
146 FakeRemote(name='origin', url='lp:~user/testrepo')])147 FakeRemote(name='origin', url=url_prefix + '~user/testrepo')])
147 expected = {148 expected = {
148 'testrepo': 'upstream',149 'testrepo': 'upstream',
149 '~user/testrepo': 'origin'}150 '~user/testrepo': 'origin'}
150 assert get_remote_urls_map(git_repo) == expected151 assert get_remote_paths_map(git_repo) == expected
151152
152153
153def test_parse_args_with_logging_no_args():154def test_parse_args_with_logging_no_args():

Subscribers

People subscribed via source and target branches