Skip to content

Commit

Permalink
Merge pull request #79 from cloudblue/report_author_boilerplate_tag
Browse files Browse the repository at this point in the history
Cumulative fixes
  • Loading branch information
marcserrat authored Nov 26, 2021
2 parents 84b9031 + b0b51ee commit 4bcb318
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 35 deletions.
13 changes: 11 additions & 2 deletions connect/cli/plugins/project/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from distutils.version import StrictVersion
from collections import OrderedDict

from connect.cli import get_version


class GitException(Exception):
pass
Expand Down Expand Up @@ -46,9 +48,15 @@ def _cmp(self, other):
return super()._cmp(other)


def _sort_tags(tags):
def _sort_and_filter_tags(tags, desired_major):
sorted_tags = OrderedDict()
for tag in sorted(tags.keys(), key=ConnectVersionTag):
match = ConnectVersionTag.version_re.match(tag)
if not match:
continue
major = match.group(1)
if major != desired_major:
continue
sorted_tags[tag] = tags[tag]

return sorted_tags
Expand Down Expand Up @@ -77,5 +85,6 @@ def _list_tags(repo_url):

def get_highest_version(repo_url):
tags = _list_tags(repo_url)
tags = _sort_tags(tags)
desired_major, _ = get_version().split('.', 1)
tags = _sort_and_filter_tags(tags, desired_major)
return tags.popitem() if tags else (None, None)
8 changes: 8 additions & 0 deletions connect/cli/plugins/project/report/wizard.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@
PythonIdentifierValidator(),
),
},
{
'name': 'author',
'label': 'Project: author',
'type': 'input',
'description': 'Please enter the author for this project:',
'default': 'Globex Corporation',
'validators': (RequiredValidator(message='Please, provide an author name.'),),
},
{
'name': 'description',
'label': 'Project: description',
Expand Down
2 changes: 1 addition & 1 deletion resources/ccli.spec
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ datas += collect_data_files('cairosvg')
datas += collect_data_files('connect.reports')
datas += collect_data_files('interrogatio')
datas += collect_data_files('pyphen')
datas += copy_metadata('connect-cli')
datas += copy_metadata('connect-cli', recursive=True)

a = Analysis(
['../connect/cli/ccli.py'],
Expand Down
1 change: 1 addition & 0 deletions tests/plugins/project/test_extension_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ def test_bootstrap_extension_project_vendor(
commit3 refs/tags/21.11
commit4 refs/tags/21.9"""
mock_subprocess_run.return_value = mock_called_process
mocker.patch('connect.cli.plugins.project.git.get_version', return_value='21.2')
cookie_dir = f'{fs.root_path}/.cookiecutters'
if exists_cookiecutter_dir:
os.mkdir(cookie_dir)
Expand Down
73 changes: 42 additions & 31 deletions tests/plugins/project/test_git.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
from typing import OrderedDict
from connect.cli.plugins.project import git

import subprocess
from collections import OrderedDict

import pytest

import subprocess
from connect.cli.plugins.project import git


@pytest.mark.parametrize(
('str', 'result'),
Expand Down Expand Up @@ -65,7 +64,7 @@ def test_list_tags(mocker):
mock_subprocess_run.return_value = mock_subprocess_called_process_error

tags = git._list_tags('dummy.repo')
assert tags == {'21.1': 'commit1', '21.10': 'commit2', '21.11': 'commit3', '21.9': 'commit4'}
assert tags == {'21.1': 'commit1', '21.10': 'commit2', '21.11': 'commit3', '21.9': 'commit4'}


def test_list_tags_error(mocker):
Expand All @@ -79,36 +78,39 @@ def test_list_tags_error(mocker):
with pytest.raises(git.GitException):
git._list_tags('dummy.repo')


@pytest.mark.parametrize(
('tags', 'expected'),
(
(
{'v21.1': 'cmt1', 'v21.10': 'cmt2', 'v21.11': 'cmt3', 'v21.9': 'cmt4'},
OrderedDict({'v21.1': 'cmt1', 'v21.9': 'cmt4','v21.10': 'cmt2', 'v21.11': 'cmt3'})
OrderedDict({'v21.1': 'cmt1', 'v21.9': 'cmt4', 'v21.10': 'cmt2', 'v21.11': 'cmt3'}),
),
(
{'21.1': 'cmt1', '21.10': 'cmt2', '21.11': 'cmt3', '21.9': 'cmt4'},
OrderedDict({'21.1': 'cmt1', '21.9': 'cmt4', '21.10': 'cmt2', '21.11': 'cmt3', })
OrderedDict({'21.1': 'cmt1', '21.9': 'cmt4', '21.10': 'cmt2', '21.11': 'cmt3'}),
),
(
{'21.1': 'cmt1', '21.10': 'cmt2', '21.9': 'cmt4', '23.0.1a2': 'cmt3'},
OrderedDict({ '21.1': 'cmt1', '21.9': 'cmt4', '21.10': 'cmt2', '23.0.1a2': 'cmt3'})
OrderedDict({'21.1': 'cmt1', '21.9': 'cmt4', '21.10': 'cmt2'}),
),
(
{'21.1': 'cmt1', '21.10': 'cmt2', '21.9': 'cmt4', '21.0.1a2': 'cmt3'},
OrderedDict({'21.0.1a2': 'cmt3', '21.1': 'cmt1', '21.9': 'cmt4', '21.10': 'cmt2'}),
),
(
{'01.1': 'cmt1', '21.10': 'cmt2', '21.11': 'cmt3', '21.9': 'cmt4'},
OrderedDict({'01.1': 'cmt1', '21.9': 'cmt4', '21.10': 'cmt2', '21.11': 'cmt3'})
OrderedDict({'21.9': 'cmt4', '21.10': 'cmt2', '21.11': 'cmt3'}),
),
(
{'v21.10not-a-tag': 'cmt5', '01.1': 'cmt1', '21.11': 'cmt3', '21.10': 'cmt2', 'v21.11': 'cmt4'},
OrderedDict(
{
'v21.10not-a-tag': 'cmt5',
'01.1': 'cmt1',
'21.10': 'cmt2',
'21.11': 'cmt3',
'v21.11': 'cmt4',
}
)
},
),
),
(
{
Expand All @@ -124,69 +126,78 @@ def test_list_tags_error(mocker):
},
OrderedDict(
{
'22a2': 'cmt4',
'not-a-version-tag': 'cmt1',
'not-a-version-tag2': 'cmt2',
'not-a-version-tag3': 'cmt3',
'21.1': 'cmt5',
'21.9': 'cmt6',
'21.10a1': 'cmt7alpha',
'21.10': 'cmt7',
'23.0.1a2': 'cmt8',
}
)
},
),
),
({},OrderedDict()),
({}, OrderedDict()),
),
)
def test_sort_tags(tags, expected):
sorted_tags = git._sort_tags(tags)
def test_sort_and_filter_tags(tags, expected):
sorted_tags = git._sort_and_filter_tags(tags, '21')
assert sorted_tags == expected


@pytest.mark.parametrize(
('tags', 'expected'),
('tags', 'cli_version', 'expected'),
(
(
b"""commit1 refs/tags/v21.1
commit2 refs/tags/v21.10
commit3 refs/tags/v21.11
commit4 refs/tags/v21.9""",
('v21.11', 'commit3')
'21.4',
('v21.11', 'commit3'),
),
(
b"""commit1 refs/tags/21.1
commit2 refs/tags/21.10
commit3 refs/tags/21.11
commit4 refs/tags/21.9""",
('21.11', 'commit3')
'21.7',
('21.11', 'commit3'),
),
(
b"""commit4 refs/tags/22.0
commit1 refs/tags/21.3
commit2 refs/tags/21.2
commit3 refs/tags/21.1""",
'22.1',
('22.0', 'commit4'),
),
(
b"""commit4 refs/tags/22.0
commit1 refs/tags/21.3
commit2 refs/tags/21.2
commit3 refs/tags/21.1""",
('22.0', 'commit4')
'21.1',
('21.3', 'commit1'),
),
(
b"""commit4 refs/tags/22.0
commit1 refs/tags/21.3
commit2 refs/tags/21.2""",
('22.0', 'commit4')
'22.4',
('22.0', 'commit4'),
),
(
b"""commit4 refs/tags/01.0
commit1 refs/tags/0.0""",
('01.0', 'commit4')
'22.1',
(None, None),
),
(b"", (None, None)),
(b"", '21.1', (None, None)),
),
)
def test_get_highest_version(mocker, tags, expected):
def test_get_highest_version(mocker, tags, cli_version, expected):
mock_subprocess_run = mocker.patch('connect.cli.plugins.project.git.subprocess.run')
mock_subprocess_called_process_error = mocker.patch(
'connect.cli.plugins.project.git.subprocess.CalledProcessError',
)
mock_subprocess_called_process_error.stdout = tags
mock_subprocess_run.return_value = mock_subprocess_called_process_error
mocker.patch('connect.cli.plugins.project.git.get_version', return_value=cli_version)
assert expected == git.get_highest_version('dummy.repo')
2 changes: 1 addition & 1 deletion tests/plugins/project/test_report_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def test_bootstrap_report_project(fs, mocker, capsys, exists_cookiecutter_dir, i
commit3 refs/tags/21.11
commit4 refs/tags/21.9"""
mock_subprocess_run.return_value = mock_called_process

mocker.patch('connect.cli.plugins.project.git.get_version', return_value='21.2')
cookie_dir = f'{fs.root_path}/.cookiecutters'
if exists_cookiecutter_dir:
os.mkdir(cookie_dir)
Expand Down

0 comments on commit 4bcb318

Please sign in to comment.