-
-
Notifications
You must be signed in to change notification settings - Fork 60
Support version retrieval from custom branches #253
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
fb8b84c
115d616
f53858d
ff86b9f
3209061
1bac4b7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -90,3 +90,6 @@ ENV/ | |
|
||
# CPython checkout for cherry_picker. | ||
cherry_picker/cpython | ||
|
||
# pytest | ||
.pytest_cache/ |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,7 @@ | |
import pathlib | ||
import subprocess | ||
import webbrowser | ||
import re | ||
import sys | ||
import requests | ||
import toml | ||
|
@@ -72,10 +73,16 @@ def upstream(self): | |
|
||
@property | ||
def sorted_branches(self): | ||
def version_from_branch(branch): | ||
try: | ||
return tuple(map(int, re.match(r'^.*(?P<version>\d+(\.\d+)+).*$', branch).groupdict()['version'].split('.'))) | ||
except AttributeError as attr_err: | ||
raise ValueError(f'Branch {branch} seems to not have a version in its name.') from attr_err | ||
|
||
return sorted( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @Mariatta optionally we could try/except this as well and fall back to returning branches list in their original order. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @Mariatta what do you think about falling back to unordered branch list? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since there is no need to support unordered branch list yet, I'm thinking to keep things as is and not change the behavior. |
||
self.branches, | ||
reverse=True, | ||
key=lambda v: tuple(map(int, v.split('.')))) | ||
key=version_from_branch) | ||
|
||
@property | ||
def username(self): | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -64,13 +64,29 @@ def test_get_author_info_from_short_sha(subprocess_check_output): | |
assert get_author_info_from_short_sha('22a594a') == 'Armin Rigo <[email protected]>' | ||
|
||
|
||
@pytest.mark.parametrize('input_branches,sorted_branches', [ | ||
(['3.1', '2.7', '3.10', '3.6'], ['3.10', '3.6', '3.1', '2.7']), | ||
(['stable-3.1', 'lts-2.7', '3.10-other', 'smth3.6else'], ['3.10-other', 'smth3.6else', 'stable-3.1', 'lts-2.7']), | ||
]) | ||
@mock.patch('os.path.exists') | ||
def test_sorted_branch(os_path_exists, config): | ||
def test_sorted_branch(os_path_exists, config, input_branches, sorted_branches): | ||
os_path_exists.return_value = True | ||
branches = ["3.1", "2.7", "3.10", "3.6"] | ||
cp = CherryPicker('origin', '22a594a0047d7706537ff2ac676cdc0f1dcb329c', | ||
branches, config=config) | ||
assert cp.sorted_branches == ["3.10", "3.6", "3.1", "2.7"] | ||
input_branches, config=config) | ||
assert cp.sorted_branches == sorted_branches | ||
|
||
|
||
@pytest.mark.parametrize('input_branches', [ | ||
(['3.1', '2.7', '3.x10', '3.6', '']), | ||
(['stable-3.1', 'lts-2.7', '3.10-other', 'smth3.6else', 'invalid']), | ||
]) | ||
@mock.patch('os.path.exists') | ||
def test_invalid_branches(os_path_exists, config, input_branches): | ||
os_path_exists.return_value = True | ||
cp = CherryPicker('origin', '22a594a0047d7706537ff2ac676cdc0f1dcb329c', | ||
input_branches, config=config) | ||
with pytest.raises(ValueError): | ||
cp.sorted_branches | ||
|
||
|
||
@mock.patch('os.path.exists') | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe reading regex template from config is even better?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see how it's more flexible. I was thinking about this, but IRL regex is easy to screw up: they'll be exposed to the internals and helpless, and it would require them to actually scan through the code to figure out how it's being used, why and how to fix that.
It also looks like mixing up higher-level public API with implementation details, which IMHO should be separated.
So I'd be cautious when providing the end-users with such tooling.
What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe invite a syntax like
stable-*
where the star is version?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems to be more complex than needed