From db0a97e8e785197ad0a2a2e90d613d080bf27743 Mon Sep 17 00:00:00 2001 From: Marcus Hoffmann Date: Mon, 4 Dec 2017 15:10:21 +0100 Subject: [PATCH] checkupdates: don't fail when we can't init submodules Later revisions might have removed the submodules so we want to keep going when there are no submodules present. We still abort when there is an error initializing submodules. Fixes fdroid/fdroidserver#231 --- fdroidserver/checkupdates.py | 21 ++++++++++++++++----- fdroidserver/common.py | 5 +++-- fdroidserver/exception.py | 4 ++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 02baa061..a303f7fe 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -33,7 +33,7 @@ import copy from . import _ from . import common from . import metadata -from .exception import VCSException, FDroidException, MetaDataException +from .exception import VCSException, NoSubmodulesException, FDroidException, MetaDataException # Check for a new version by looking at a document retrieved via HTTP. @@ -110,8 +110,7 @@ def check_tags(app, pattern): last_build = app.get_last_build() - if last_build.submodules: - vcs.initsubmodules() + try_init_submodules(app, last_build, vcs) hpak = None htag = None @@ -207,8 +206,7 @@ def check_repomanifest(app, branch=None): if len(app.builds) > 0: last_build = app.builds[-1] - if last_build.submodules: - vcs.initsubmodules() + try_init_submodules(app, last_build, vcs) hpak = None hver = None @@ -300,6 +298,19 @@ def check_gplay(app): return (version.strip(), None) +def try_init_submodules(app, last_build, vcs): + """Try to init submodules if the last build entry used them. + They might have been removed from the app's repo in the meantime, + so if we can't find any submodules we continue with the updates check. + If there is any other error in initializing them then we stop the check. + """ + if last_build.submodules: + try: + vcs.initsubmodules() + except NoSubmodulesException: + logging.info("No submodules present for {}".format(app.Name)) + + # Return all directories under startdir that contain any of the manifest # files, and thus are probably an Android project. def dirs_with_manifest(startdir): diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 74e96ce8..a6dc54f0 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -53,7 +53,8 @@ from distutils.util import strtobool import fdroidserver.metadata from fdroidserver import _ -from fdroidserver.exception import FDroidException, VCSException, BuildException, VerificationException +from fdroidserver.exception import FDroidException, VCSException, NoSubmodulesException,\ + BuildException, VerificationException from .asynchronousfilereader import AsynchronousFileReader @@ -883,7 +884,7 @@ class vcs_git(vcs): self.checkrepo() submfile = os.path.join(self.local, '.gitmodules') if not os.path.isfile(submfile): - raise VCSException(_("No git submodules available")) + raise NoSubmodulesException(_("No git submodules available")) # fix submodules not accessible without an account and public key auth with open(submfile, 'r') as f: diff --git a/fdroidserver/exception.py b/fdroidserver/exception.py index 51481c56..f9f876ce 100644 --- a/fdroidserver/exception.py +++ b/fdroidserver/exception.py @@ -39,6 +39,10 @@ class VCSException(FDroidException): pass +class NoSubmodulesException(VCSException): + pass + + class BuildException(FDroidException): pass -- 2.30.2