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