From cd405cc93e904f91b614313791a0d9802cbe8d3c Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Sat, 12 Jun 2021 15:02:58 +0200 Subject: [PATCH] Use hash of tag when adding new version Also extend getref with a refname parameter and implement it for vcs_git. --- fdroidserver/checkupdates.py | 6 ++++++ fdroidserver/common.py | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 330746ca..5f1035a0 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -217,6 +217,12 @@ def check_tags(app, pattern): hver = version if hver: + try: + commit = vcs.getref(htag) + if commit: + return (hver, hcode, commit) + except VCSException: + pass return (hver, hcode, htag) return (None, "Couldn't find any version information", None) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index dad4c16d..09b66c44 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -1026,7 +1026,7 @@ class vcs: """Get a list of all the known tags, sorted from newest to oldest""" raise VCSException('latesttags not supported for this vcs type') - def getref(self): + def getref(self, revname=None): """Get current commit reference (hash, revision, etc)""" raise VCSException('getref not supported for this vcs type') @@ -1205,6 +1205,15 @@ class vcs_git(vcs): tags.append(tag) return tags + def getref(self, revname='HEAD'): + self.checkrepo() + p = FDroidPopen(['git', 'rev-parse', '--verify', + '{revname}^{{commit}}'.format(revname=revname)], cwd=self.local, + output=False) + if p.returncode != 0: + return None + return p.output.strip() + class vcs_gitsvn(vcs): @@ -1366,9 +1375,9 @@ class vcs_gitsvn(vcs): if os.path.isdir(d): return os.listdir(d) - def getref(self): + def getref(self, revname='HEAD'): self.checkrepo() - p = FDroidPopen(['git', 'svn', 'find-rev', 'HEAD'], cwd=self.local, output=False) + p = FDroidPopen(['git', 'svn', 'find-rev', revname], cwd=self.local, output=False) if p.returncode != 0: return None return p.output.strip()