mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-10-06 11:00:13 +02:00
latesttags revert to git log and fix comma handling
2de34312
tried to fix the comma handling by relying on git tag --sort.
This did not work out so this reverts to the method used before.
This commit is contained in:
parent
09987f1fc7
commit
4e97b58d8c
@ -1171,11 +1171,33 @@ class vcs_git(vcs):
|
|||||||
p = FDroidPopen(['git', 'tag'], cwd=self.local, output=False)
|
p = FDroidPopen(['git', 'tag'], cwd=self.local, output=False)
|
||||||
return p.output.splitlines()
|
return p.output.splitlines()
|
||||||
|
|
||||||
|
tag_format = re.compile(r'tag: ([^) ]*)')
|
||||||
|
|
||||||
def latesttags(self):
|
def latesttags(self):
|
||||||
|
"""Returns 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.
|
||||||
|
"""
|
||||||
self.checkrepo()
|
self.checkrepo()
|
||||||
p = FDroidPopen(['git', 'tag', '--sort=-authordate'],
|
p = FDroidPopen(['git', 'log', '--tags',
|
||||||
|
'--simplify-by-decoration', '--pretty=format:%d'],
|
||||||
cwd=self.local, output=False)
|
cwd=self.local, output=False)
|
||||||
return p.output.splitlines()
|
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
|
||||||
|
|
||||||
|
|
||||||
class vcs_gitsvn(vcs):
|
class vcs_gitsvn(vcs):
|
||||||
|
@ -2062,7 +2062,15 @@ class CommonTest(unittest.TestCase):
|
|||||||
def test_vcs_git_latesttags(self):
|
def test_vcs_git_latesttags(self):
|
||||||
vcs = fdroidserver.common.vcs_git(None, None)
|
vcs = fdroidserver.common.vcs_git(None, None)
|
||||||
popenmock = mock.Mock()
|
popenmock = mock.Mock()
|
||||||
popenmock.output = "8.9.5\n8.9.4\n8.6.3\n8,9,3"
|
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(
|
with mock.patch(
|
||||||
'fdroidserver.common.FDroidPopen', lambda a, **b: popenmock
|
'fdroidserver.common.FDroidPopen', lambda a, **b: popenmock
|
||||||
) as _ignored, mock.patch(
|
) as _ignored, mock.patch(
|
||||||
@ -2070,7 +2078,8 @@ class CommonTest(unittest.TestCase):
|
|||||||
) as _ignored:
|
) as _ignored:
|
||||||
_ignored # silence the linters
|
_ignored # silence the linters
|
||||||
tags = vcs.latesttags()
|
tags = vcs.latesttags()
|
||||||
self.assertEqual(tags, ['8.9.5', '8.9.4', '8.6.3', '8,9,3'])
|
self.assertEqual(tags, ['8.9.5', '8.9.4', '8.9.3', '8,9,3',
|
||||||
|
'8.9.3b', 'awesome_release', '8.6.3'])
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
Loading…
Reference in New Issue
Block a user