[checkupdates] Add more docstrings
This commit is contained in:
parent
d036d5be36
commit
5503a05ef6
@ -40,11 +40,32 @@ from . import net
|
|||||||
from .exception import VCSException, NoSubmodulesException, FDroidException, MetaDataException
|
from .exception import VCSException, NoSubmodulesException, FDroidException, MetaDataException
|
||||||
|
|
||||||
|
|
||||||
# Check for a new version by looking at a document retrieved via HTTP.
|
|
||||||
# The app's Update Check Data field is used to provide the information
|
|
||||||
# required.
|
|
||||||
def check_http(app):
|
def check_http(app):
|
||||||
|
"""Check for a new version by looking at a document retrieved via HTTP.
|
||||||
|
|
||||||
|
The app's UpdateCheckData field is used to provide the information
|
||||||
|
required.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
app : metadata.App
|
||||||
|
The App instance to check for updates for.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
version : str or None
|
||||||
|
The found versionName or None if the versionName should be ignored
|
||||||
|
according to UpdateCheckIgnore.
|
||||||
|
vercode : int or None
|
||||||
|
The found versionCode or None if the versionCode should be ignored
|
||||||
|
according to UpdateCheckIgnore.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
------
|
||||||
|
FDroidException
|
||||||
|
If UpdateCheckData is missing or is an invalid URL or if there is no
|
||||||
|
match for the provided versionName or versionCode regex.
|
||||||
|
"""
|
||||||
if not app.UpdateCheckData:
|
if not app.UpdateCheckData:
|
||||||
raise FDroidException('Missing Update Check Data')
|
raise FDroidException('Missing Update Check Data')
|
||||||
|
|
||||||
@ -91,6 +112,31 @@ def check_tags(app, pattern):
|
|||||||
Whether this can be used reliably or not depends on
|
Whether this can be used reliably or not depends on
|
||||||
the development procedures used by the project's developers. Use it with
|
the development procedures used by the project's developers. Use it with
|
||||||
caution, because it's inappropriate for many projects.
|
caution, because it's inappropriate for many projects.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
app : metadata.App
|
||||||
|
The App instance to check for updates for.
|
||||||
|
pattern : str
|
||||||
|
The pattern a tag needs to match to be considered.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
versionName : str
|
||||||
|
The highest found versionName.
|
||||||
|
versionCode : int
|
||||||
|
The highest found versionCode.
|
||||||
|
ref : str
|
||||||
|
The Git reference, commit hash or tag name, of the highest found
|
||||||
|
versionName, versionCode.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
------
|
||||||
|
MetaDataException
|
||||||
|
If this function is not suitable for the RepoType of the app or
|
||||||
|
information is missing to perform this type of check.
|
||||||
|
FDroidException
|
||||||
|
If no matching tags or no information whatsoever could be found.
|
||||||
"""
|
"""
|
||||||
if app.RepoType == 'srclib':
|
if app.RepoType == 'srclib':
|
||||||
build_dir = Path('build/srclib') / app.Repo
|
build_dir = Path('build/srclib') / app.Repo
|
||||||
@ -230,6 +276,25 @@ def check_repomanifest(app, branch=None):
|
|||||||
Whether this can be used reliably or not depends on
|
Whether this can be used reliably or not depends on
|
||||||
the development procedures used by the project's developers. Use it with
|
the development procedures used by the project's developers. Use it with
|
||||||
caution, because it's inappropriate for many projects.
|
caution, because it's inappropriate for many projects.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
app : metadata.App
|
||||||
|
The App instance to check for updates for.
|
||||||
|
branch : str
|
||||||
|
The VCS branch where to search for versionCode, versionName.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
versionName : str
|
||||||
|
The highest found versionName.
|
||||||
|
versionCode : int
|
||||||
|
The highest found versionCode.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
------
|
||||||
|
FDroidException
|
||||||
|
If no package id or no version information could be found.
|
||||||
"""
|
"""
|
||||||
if app.RepoType == 'srclib':
|
if app.RepoType == 'srclib':
|
||||||
build_dir = Path('build/srclib') / app.Repo
|
build_dir = Path('build/srclib') / app.Repo
|
||||||
@ -328,7 +393,7 @@ def check_gplay(app):
|
|||||||
|
|
||||||
|
|
||||||
def try_init_submodules(app, last_build, vcs):
|
def try_init_submodules(app, last_build, vcs):
|
||||||
"""Try to init submodules if the last build entry used them.
|
"""Try to init submodules if the last build entry uses them.
|
||||||
|
|
||||||
They might have been removed from the app's repo in the meantime,
|
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.
|
so if we can't find any submodules we continue with the updates check.
|
||||||
@ -343,19 +408,44 @@ def try_init_submodules(app, last_build, vcs):
|
|||||||
logging.info("submodule broken for {}".format(_getappname(app)))
|
logging.info("submodule broken for {}".format(_getappname(app)))
|
||||||
|
|
||||||
|
|
||||||
# Return all directories under startdir that contain any of the manifest
|
|
||||||
# files, and thus are probably an Android project.
|
|
||||||
def dirs_with_manifest(startdir):
|
def dirs_with_manifest(startdir):
|
||||||
|
"""Find directories containing a manifest file.
|
||||||
|
|
||||||
|
Yield all directories under startdir that contain any of the manifest
|
||||||
|
files, and thus are probably an Android project.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
startdir : str
|
||||||
|
Directory to be walked down for search
|
||||||
|
|
||||||
|
Yields
|
||||||
|
------
|
||||||
|
path : pathlib.Path or None
|
||||||
|
A directory that contains a manifest file of an Android project, None if
|
||||||
|
no directory could be found
|
||||||
|
"""
|
||||||
for root, _dirs, files in os.walk(startdir):
|
for root, _dirs, files in os.walk(startdir):
|
||||||
if any(m in files for m in [
|
if any(m in files for m in [
|
||||||
'AndroidManifest.xml', 'pom.xml', 'build.gradle', 'build.gradle.kts']):
|
'AndroidManifest.xml', 'pom.xml', 'build.gradle', 'build.gradle.kts']):
|
||||||
yield Path(root)
|
yield Path(root)
|
||||||
|
|
||||||
|
|
||||||
# Tries to find a new subdir starting from the root build_dir. Returns said
|
|
||||||
# subdir relative to the build dir if found, None otherwise.
|
|
||||||
def possible_subdirs(app):
|
def possible_subdirs(app):
|
||||||
|
"""Try to find a new subdir starting from the root build_dir.
|
||||||
|
|
||||||
|
Yields said subdir relative to the build dir if found, None otherwise.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
app : metadata.App
|
||||||
|
The app to check for subdirs
|
||||||
|
|
||||||
|
Yields
|
||||||
|
------
|
||||||
|
subdir : pathlib.Path or None
|
||||||
|
A possible subdir, None if no subdir could be found
|
||||||
|
"""
|
||||||
if app.RepoType == 'srclib':
|
if app.RepoType == 'srclib':
|
||||||
build_dir = Path('build/srclib') / app.Repo
|
build_dir = Path('build/srclib') / app.Repo
|
||||||
else:
|
else:
|
||||||
@ -381,6 +471,24 @@ def _getcvname(app):
|
|||||||
|
|
||||||
|
|
||||||
def fetch_autoname(app, tag):
|
def fetch_autoname(app, tag):
|
||||||
|
"""Fetch AutoName.
|
||||||
|
|
||||||
|
Get the to be displayed name of an app from the source code and adjust the
|
||||||
|
App instance in case it is different name has been found.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
app : metadata.App
|
||||||
|
The App instance to get the AutoName for.
|
||||||
|
tag : str
|
||||||
|
Tag to fetch AutoName at.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
commitmsg : str or None
|
||||||
|
Commit message about the name change. None in case checking for the
|
||||||
|
name is disabled, a VCSException occured or no name could be found.
|
||||||
|
"""
|
||||||
if not app.RepoType or app.UpdateCheckMode in ('None', 'Static') \
|
if not app.RepoType or app.UpdateCheckMode in ('None', 'Static') \
|
||||||
or app.UpdateCheckName == "Ignore":
|
or app.UpdateCheckName == "Ignore":
|
||||||
return None
|
return None
|
||||||
@ -419,6 +527,25 @@ def fetch_autoname(app, tag):
|
|||||||
|
|
||||||
|
|
||||||
def operate_vercode(operation, vercode):
|
def operate_vercode(operation, vercode):
|
||||||
|
"""Calculate a new versionCode from a mathematical operation.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
operation : str
|
||||||
|
The operation to execute to get the new versionCode.
|
||||||
|
vercode : int
|
||||||
|
The versionCode for replacing "%c" in the operation.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
vercode : int
|
||||||
|
The new versionCode obtained by executing the operation.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
------
|
||||||
|
MetaDataException
|
||||||
|
If the operation is invalid.
|
||||||
|
"""
|
||||||
if not common.VERCODE_OPERATION_RE.match(operation):
|
if not common.VERCODE_OPERATION_RE.match(operation):
|
||||||
raise MetaDataException(_('Invalid VercodeOperation: {field}')
|
raise MetaDataException(_('Invalid VercodeOperation: {field}')
|
||||||
.format(field=operation))
|
.format(field=operation))
|
||||||
@ -430,8 +557,27 @@ def operate_vercode(operation, vercode):
|
|||||||
|
|
||||||
|
|
||||||
def checkupdates_app(app):
|
def checkupdates_app(app):
|
||||||
|
"""Check for new versions and updated name of a single app.
|
||||||
|
|
||||||
|
Also write back changes to the metadata file and create a Git commit if
|
||||||
|
requested.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
app : metadata.App
|
||||||
|
The app to check for updates for.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
------
|
||||||
|
MetaDataException
|
||||||
|
If the app has an invalid UpdateCheckMode or AutoUpdateMode.
|
||||||
|
FDroidException
|
||||||
|
If no version information could be found, the current version is newer
|
||||||
|
than the found version, auto-update was requested but an app has no
|
||||||
|
CurrentVersionCode or (Git) commiting the changes failed.
|
||||||
|
"""
|
||||||
# If a change is made, commitmsg should be set to a description of it.
|
# If a change is made, commitmsg should be set to a description of it.
|
||||||
# Only if this is set will changes be written back to the metadata.
|
# Only if this is set, changes will be written back to the metadata.
|
||||||
commitmsg = None
|
commitmsg = None
|
||||||
|
|
||||||
tag = None
|
tag = None
|
||||||
@ -577,6 +723,7 @@ def checkupdates_app(app):
|
|||||||
|
|
||||||
|
|
||||||
def get_last_build_from_app(app):
|
def get_last_build_from_app(app):
|
||||||
|
"""Get the last build entry of an app."""
|
||||||
if app.get('Builds'):
|
if app.get('Builds'):
|
||||||
return app['Builds'][-1]
|
return app['Builds'][-1]
|
||||||
else:
|
else:
|
||||||
@ -600,6 +747,11 @@ start_timestamp = time.gmtime()
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
"""Check for updates for one or more apps.
|
||||||
|
|
||||||
|
The behaviour of this function is influenced by the configuration file as
|
||||||
|
well as command line parameters.
|
||||||
|
"""
|
||||||
global config, options
|
global config, options
|
||||||
|
|
||||||
# Parse command line...
|
# Parse command line...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user