mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-10-05 18:50:09 +02:00
Merge branch 'checku' into 'master'
Fix tag match See merge request fdroid/fdroidserver!1072
This commit is contained in:
commit
dea188a790
@ -1238,34 +1238,15 @@ class vcs_git(vcs):
|
||||
p = FDroidPopen(['git', 'tag'], cwd=self.local, output=False)
|
||||
return p.output.splitlines()
|
||||
|
||||
tag_format = re.compile(r'tag: ([^) ]*)')
|
||||
|
||||
def latesttags(self):
|
||||
"""Return a list of latest tags.
|
||||
|
||||
The definition is a little blurry here, Android does not care for the
|
||||
version name of an app as normally used as the tag name so versions do
|
||||
not need to follow strverscmp() or similar. Also they can be rather
|
||||
arbitrary so git tag --sort=-version:refname does not work. On the other side
|
||||
sorting them by creation date, i.e. git tag --sort=-authordate does not
|
||||
work either as there are a lot of repos where older tags were created
|
||||
later.
|
||||
|
||||
So git log preserves the graph order and only sorts by date afterwards.
|
||||
This results in tags of beta versions being sorted earlier then the
|
||||
latest tag as long as they are part of the graph below the latest tag
|
||||
or are created earlier.
|
||||
"""
|
||||
"""Return a list of latest tags."""
|
||||
self.checkrepo()
|
||||
p = FDroidPopen(['git', 'log', '--tags',
|
||||
'--simplify-by-decoration', '--pretty=format:%d'],
|
||||
cwd=self.local, output=False)
|
||||
tags = []
|
||||
for line in p.output.splitlines():
|
||||
for entry in line.split(', '):
|
||||
for tag in self.tag_format.findall(entry):
|
||||
tags.append(tag)
|
||||
return tags
|
||||
# TODO: Python3.6: Should accept path-like
|
||||
return [tag.name for tag in sorted(
|
||||
git.Repo(self.local).tags,
|
||||
key=lambda t: t.commit.committed_date,
|
||||
reverse=True
|
||||
)]
|
||||
|
||||
def getref(self, revname='HEAD'):
|
||||
self.checkrepo()
|
||||
|
@ -2357,26 +2357,29 @@ class CommonTest(unittest.TestCase):
|
||||
)
|
||||
|
||||
def test_vcs_git_latesttags(self):
|
||||
vcs = fdroidserver.common.vcs_git(None, None)
|
||||
popenmock = mock.Mock()
|
||||
popenmock.output = """
|
||||
(HEAD, tag: 8.9.5, origin/master, origin/HEAD, master)
|
||||
(tag: 8.9.4)
|
||||
(tag: 8.9.3, tag: 8,9,3)
|
||||
(tag: 8.9.3b)
|
||||
(tag: awesome_release)
|
||||
(origin/feature/cast)
|
||||
(tag: 8.6.3)
|
||||
"""
|
||||
with mock.patch(
|
||||
'fdroidserver.common.FDroidPopen', lambda a, **b: popenmock
|
||||
) as _ignored, mock.patch(
|
||||
'fdroidserver.common.vcs_git.checkrepo'
|
||||
) as _ignored:
|
||||
_ignored # silence the linters
|
||||
tags = vcs.latesttags()
|
||||
self.assertEqual(tags, ['8.9.5', '8.9.4', '8.9.3', '8,9,3',
|
||||
'8.9.3b', 'awesome_release', '8.6.3'])
|
||||
tags = [
|
||||
"1.1.1",
|
||||
"2.2.2",
|
||||
"v3.0",
|
||||
"0.0.4",
|
||||
"0.5.0-beta",
|
||||
"666(6)",
|
||||
"seven",
|
||||
]
|
||||
with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir):
|
||||
# TODO: Python3.6: Should accept path-like
|
||||
repo = git.Repo.init(str(Path.cwd()))
|
||||
f = Path("test")
|
||||
date = 10**9
|
||||
for tag in tags:
|
||||
date += 1
|
||||
f.write_text(tag)
|
||||
repo.index.add([str(f)])
|
||||
repo.index.commit(tag, commit_date=str(date) + " +0000")
|
||||
repo.create_tag(tag)
|
||||
|
||||
vcs = fdroidserver.common.vcs_git(None, Path.cwd())
|
||||
self.assertEqual(vcs.latesttags(), tags[::-1])
|
||||
|
||||
def test_get_release_filename(self):
|
||||
app = fdroidserver.metadata.App()
|
||||
|
Loading…
Reference in New Issue
Block a user