1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-10-03 17:50:11 +02:00

fix PEP8 "E302 expected 2 blank lines, found 1"

This commit is contained in:
Hans-Christoph Steiner 2014-05-01 23:39:33 -04:00
parent 2f2618e06c
commit 3f4f7a544b
16 changed files with 84 additions and 0 deletions

2
fdroid
View File

@ -38,6 +38,7 @@ commands = {
"server": "Interact with the repo HTTP server", "server": "Interact with the repo HTTP server",
} }
def print_help(): def print_help():
print "usage: fdroid [-h|--help] <command> [<args>]" print "usage: fdroid [-h|--help] <command> [<args>]"
print print
@ -46,6 +47,7 @@ def print_help():
print " " + cmd + ' '*(15-len(cmd)) + summary print " " + cmd + ' '*(15-len(cmd)) + summary
print print
def main(): def main():
if len(sys.argv) <= 1: if len(sys.argv) <= 1:

View File

@ -40,6 +40,7 @@ try:
except ImportError: except ImportError:
pass pass
def get_builder_vm_id(): def get_builder_vm_id():
vd = os.path.join('builder', '.vagrant') vd = os.path.join('builder', '.vagrant')
if os.path.isdir(vd): if os.path.isdir(vd):

View File

@ -80,6 +80,7 @@ def check_http(app):
msg = "Could not complete http check for app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc()) msg = "Could not complete http check for app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc())
return (None, msg) return (None, msg)
# Check for a new version by looking at the tags in the source repo. # Check for a new version by looking at the tags in the source repo.
# 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
@ -158,6 +159,7 @@ def check_tags(app, pattern):
msg = "Could not scan app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc()) msg = "Could not scan app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc())
return (None, msg, None) return (None, msg, None)
# Check for a new version by looking at the AndroidManifest.xml at the HEAD # Check for a new version by looking at the AndroidManifest.xml at the HEAD
# of the source repo. Whether this can be used reliably or not depends on # of the source repo. 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
@ -233,6 +235,7 @@ def check_repomanifest(app, branch=None):
msg = "Could not scan app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc()) msg = "Could not scan app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc())
return (None, msg) return (None, msg)
def check_repotrunk(app, branch=None): def check_repotrunk(app, branch=None):
try: try:
@ -263,6 +266,7 @@ def check_repotrunk(app, branch=None):
msg = "Could not scan app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc()) msg = "Could not scan app {0} due to unknown error: {1}".format(app['id'], traceback.format_exc())
return (None, msg) return (None, msg)
# Check for a new version by looking at the Google Play Store. # Check for a new version by looking at the Google Play Store.
# Returns (None, "a message") if this didn't work, or (version, None) for # Returns (None, "a message") if this didn't work, or (version, None) for
# the details of the current version. # the details of the current version.
@ -297,6 +301,7 @@ def check_gplay(app):
config = None config = None
options = None options = None
def main(): def main():
global config, options global config, options

View File

@ -36,6 +36,7 @@ import metadata
config = None config = None
options = None options = None
def get_default_config(): def get_default_config():
return { return {
'sdk_path': os.getenv("ANDROID_HOME"), 'sdk_path': os.getenv("ANDROID_HOME"),
@ -58,6 +59,7 @@ def get_default_config():
'keyaliases': {}, 'keyaliases': {},
} }
def read_config(opts, config_file='config.py'): def read_config(opts, config_file='config.py'):
"""Read the repository config """Read the repository config
@ -122,6 +124,7 @@ def read_config(opts, config_file='config.py'):
return config return config
def test_sdk_exists(c): def test_sdk_exists(c):
if c['sdk_path'] is None: if c['sdk_path'] is None:
# c['sdk_path'] is set to the value of ANDROID_HOME by default # c['sdk_path'] is set to the value of ANDROID_HOME by default
@ -140,6 +143,7 @@ def test_sdk_exists(c):
return False return False
return True return True
def write_password_file(pwtype, password=None): def write_password_file(pwtype, password=None):
''' '''
writes out passwords to a protected file instead of passing passwords as writes out passwords to a protected file instead of passing passwords as
@ -154,6 +158,7 @@ def write_password_file(pwtype, password=None):
os.close(fd) os.close(fd)
config[pwtype + 'file'] = filename config[pwtype + 'file'] = filename
# Given the arguments in the form of multiple appid:[vc] strings, this returns # Given the arguments in the form of multiple appid:[vc] strings, this returns
# a dictionary with the set of vercodes specified for each package. # a dictionary with the set of vercodes specified for each package.
def read_pkg_args(args, allow_vercodes=False): def read_pkg_args(args, allow_vercodes=False):
@ -175,6 +180,7 @@ def read_pkg_args(args, allow_vercodes=False):
return vercodes return vercodes
# On top of what read_pkg_args does, this returns the whole app metadata, but # On top of what read_pkg_args does, this returns the whole app metadata, but
# limiting the builds list to the builds matching the vercodes specified. # limiting the builds list to the builds matching the vercodes specified.
def read_app_args(args, allapps, allow_vercodes=False): def read_app_args(args, allapps, allow_vercodes=False):
@ -213,6 +219,7 @@ def read_app_args(args, allapps, allow_vercodes=False):
return apps return apps
def has_extension(filename, extension): def has_extension(filename, extension):
name, ext = os.path.splitext(filename) name, ext = os.path.splitext(filename)
ext = ext.lower()[1:] ext = ext.lower()[1:]
@ -220,6 +227,7 @@ def has_extension(filename, extension):
apk_regex = None apk_regex = None
def apknameinfo(filename): def apknameinfo(filename):
global apk_regex global apk_regex
filename = os.path.basename(filename) filename = os.path.basename(filename)
@ -232,12 +240,15 @@ def apknameinfo(filename):
raise Exception("Invalid apk name: %s" % filename) raise Exception("Invalid apk name: %s" % filename)
return result return result
def getapkname(app, build): def getapkname(app, build):
return "%s_%s.apk" % (app['id'], build['vercode']) return "%s_%s.apk" % (app['id'], build['vercode'])
def getsrcname(app, build): def getsrcname(app, build):
return "%s_%s_src.tar.gz" % (app['id'], build['vercode']) return "%s_%s_src.tar.gz" % (app['id'], build['vercode'])
def getappname(app): def getappname(app):
if app['Name']: if app['Name']:
return app['Name'] return app['Name']
@ -245,9 +256,11 @@ def getappname(app):
return app['Auto Name'] return app['Auto Name']
return app['id'] return app['id']
def getcvname(app): def getcvname(app):
return '%s (%s)' % (app['Current Version'], app['Current Version Code']) return '%s (%s)' % (app['Current Version'], app['Current Version Code'])
def getvcs(vcstype, remote, local): def getvcs(vcstype, remote, local):
if vcstype == 'git': if vcstype == 'git':
return vcs_git(remote, local) return vcs_git(remote, local)
@ -265,12 +278,14 @@ def getvcs(vcstype, remote, local):
return getsrclib(remote, 'build/srclib', raw=True) return getsrclib(remote, 'build/srclib', raw=True)
raise VCSException("Invalid vcs type " + vcstype) raise VCSException("Invalid vcs type " + vcstype)
def getsrclibvcs(name): def getsrclibvcs(name):
srclib_path = os.path.join('srclibs', name + ".txt") srclib_path = os.path.join('srclibs', name + ".txt")
if not os.path.exists(srclib_path): if not os.path.exists(srclib_path):
raise VCSException("Missing srclib " + name) raise VCSException("Missing srclib " + name)
return metadata.parse_srclib(srclib_path)['Repo Type'] return metadata.parse_srclib(srclib_path)['Repo Type']
class vcs: class vcs:
def __init__(self, remote, local): def __init__(self, remote, local):
@ -356,6 +371,7 @@ class vcs:
def getsrclib(self): def getsrclib(self):
return self.srclib return self.srclib
class vcs_git(vcs): class vcs_git(vcs):
def repotype(self): def repotype(self):
@ -564,6 +580,7 @@ class vcs_gitsvn(vcs):
return None return None
return p.stdout.strip() return p.stdout.strip()
class vcs_svn(vcs): class vcs_svn(vcs):
def repotype(self): def repotype(self):
@ -606,6 +623,7 @@ class vcs_svn(vcs):
return line[18:] return line[18:]
return None return None
class vcs_hg(vcs): class vcs_hg(vcs):
def repotype(self): def repotype(self):
@ -678,6 +696,7 @@ class vcs_bzr(vcs):
return [tag.split(' ')[0].strip() for tag in return [tag.split(' ')[0].strip() for tag in
p.stdout.splitlines()] p.stdout.splitlines()]
def retrieve_string(app_dir, string, xmlfiles=None): def retrieve_string(app_dir, string, xmlfiles=None):
res_dirs = [ res_dirs = [
@ -708,6 +727,7 @@ def retrieve_string(app_dir, string, xmlfiles=None):
return string.replace("\\'", "'") return string.replace("\\'", "'")
# Return list of existing files that will be used to find the highest vercode # Return list of existing files that will be used to find the highest vercode
def manifest_paths(app_dir, flavour): def manifest_paths(app_dir, flavour):
@ -722,6 +742,7 @@ def manifest_paths(app_dir, flavour):
return [path for path in possible_manifests if os.path.isfile(path)] return [path for path in possible_manifests if os.path.isfile(path)]
# Retrieve the package name. Returns the name, or None if not found. # Retrieve the package name. Returns the name, or None if not found.
def fetch_real_name(app_dir, flavour): def fetch_real_name(app_dir, flavour):
app_search = re.compile(r'.*<application.*').search app_search = re.compile(r'.*<application.*').search
@ -746,6 +767,7 @@ def fetch_real_name(app_dir, flavour):
return result return result
return None return None
# Retrieve the version name # Retrieve the version name
def version_name(original, app_dir, flavour): def version_name(original, app_dir, flavour):
for f in manifest_paths(app_dir, flavour): for f in manifest_paths(app_dir, flavour):
@ -756,6 +778,7 @@ def version_name(original, app_dir, flavour):
return string return string
return original return original
def get_library_references(root_dir): def get_library_references(root_dir):
libraries = [] libraries = []
proppath = os.path.join(root_dir, 'project.properties') proppath = os.path.join(root_dir, 'project.properties')
@ -773,6 +796,7 @@ def get_library_references(root_dir):
libraries.append(path) libraries.append(path)
return libraries return libraries
def ant_subprojects(root_dir): def ant_subprojects(root_dir):
subprojects = get_library_references(root_dir) subprojects = get_library_references(root_dir)
for subpath in subprojects: for subpath in subprojects:
@ -783,6 +807,7 @@ def ant_subprojects(root_dir):
subprojects.insert(0, relp) subprojects.insert(0, relp)
return subprojects return subprojects
def remove_debuggable_flags(root_dir): def remove_debuggable_flags(root_dir):
# Remove forced debuggable flags # Remove forced debuggable flags
logging.info("Removing debuggable flags") logging.info("Removing debuggable flags")
@ -793,6 +818,7 @@ def remove_debuggable_flags(root_dir):
if p.returncode != 0: if p.returncode != 0:
raise BuildException("Failed to remove debuggable flags of %s" % path) raise BuildException("Failed to remove debuggable flags of %s" % path)
# Extract some information from the AndroidManifest.xml at the given path. # Extract some information from the AndroidManifest.xml at the given path.
# Returns (version, vercode, package), any or all of which might be None. # Returns (version, vercode, package), any or all of which might be None.
# All values returned are strings. # All values returned are strings.
@ -858,6 +884,7 @@ def parse_androidmanifests(paths):
return (max_version, max_vercode, max_package) return (max_version, max_vercode, max_package)
class BuildException(Exception): class BuildException(Exception):
def __init__(self, value, detail=None): def __init__(self, value, detail=None):
self.value = value self.value = value
@ -879,6 +906,7 @@ class BuildException(Exception):
ret += "\n==== detail begin ====\n%s\n==== detail end ====" % self.detail.strip() ret += "\n==== detail begin ====\n%s\n==== detail end ====" % self.detail.strip()
return ret return ret
class VCSException(Exception): class VCSException(Exception):
def __init__(self, value): def __init__(self, value):
self.value = value self.value = value
@ -886,6 +914,7 @@ class VCSException(Exception):
def __str__(self): def __str__(self):
return repr(self.value) return repr(self.value)
# Get the specified source library. # Get the specified source library.
# Returns the path to it. Normally this is the path to be used when referencing # Returns the path to it. Normally this is the path to be used when referencing
# it, which may be a subdirectory of the actual project. If you want the base # it, which may be a subdirectory of the actual project. If you want the base
@ -1212,6 +1241,7 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
return (root_dir, srclibpaths) return (root_dir, srclibpaths)
# Split and extend via globbing the paths from a field # Split and extend via globbing the paths from a field
def getpaths(build_dir, build, field): def getpaths(build_dir, build, field):
paths = [] paths = []
@ -1224,6 +1254,7 @@ def getpaths(build_dir, build, field):
paths += [r[len(build_dir)+1:] for r in glob.glob(full_path)] paths += [r[len(build_dir)+1:] for r in glob.glob(full_path)]
return paths return paths
# Scan the source code in the given directory (and all subdirectories) # Scan the source code in the given directory (and all subdirectories)
# and return the number of fatal problems encountered # and return the number of fatal problems encountered
def scan_source(build_dir, root_dir, thisbuild): def scan_source(build_dir, root_dir, thisbuild):
@ -1423,6 +1454,7 @@ class KnownApks:
lst.reverse() lst.reverse()
return lst return lst
def isApkDebuggable(apkfile, config): def isApkDebuggable(apkfile, config):
"""Returns True if the given apk file is debuggable """Returns True if the given apk file is debuggable
@ -1463,13 +1495,16 @@ class AsynchronousFileReader(threading.Thread):
'''Check whether there is no more content to expect.''' '''Check whether there is no more content to expect.'''
return not self.is_alive() and self._queue.empty() return not self.is_alive() and self._queue.empty()
class PopenResult: class PopenResult:
returncode = None returncode = None
stdout = '' stdout = ''
def SilentPopen(commands, cwd=None, shell=False): def SilentPopen(commands, cwd=None, shell=False):
return FDroidPopen(commands, cwd=cwd, shell=shell, output=False) return FDroidPopen(commands, cwd=cwd, shell=shell, output=False)
def FDroidPopen(commands, cwd=None, shell=False, output=True): def FDroidPopen(commands, cwd=None, shell=False, output=True):
""" """
Run a command and capture the possibly huge output. Run a command and capture the possibly huge output.
@ -1509,6 +1544,7 @@ def FDroidPopen(commands, cwd=None, shell=False, output=True):
result.returncode = p.returncode result.returncode = p.returncode
return result return result
def remove_signing_keys(build_dir): def remove_signing_keys(build_dir):
comment = re.compile(r'[ ]*//') comment = re.compile(r'[ ]*//')
signing_configs = re.compile(r'^[\t ]*signingConfigs[ \t]*{[ \t]*$') signing_configs = re.compile(r'^[\t ]*signingConfigs[ \t]*{[ \t]*$')
@ -1570,12 +1606,14 @@ def remove_signing_keys(build_dir):
logging.info("Cleaned %s of keysigning configs at %s" % (propfile, path)) logging.info("Cleaned %s of keysigning configs at %s" % (propfile, path))
def replace_config_vars(cmd): def replace_config_vars(cmd):
cmd = cmd.replace('$$SDK$$', config['sdk_path']) cmd = cmd.replace('$$SDK$$', config['sdk_path'])
cmd = cmd.replace('$$NDK$$', config['ndk_path']) cmd = cmd.replace('$$NDK$$', config['ndk_path'])
cmd = cmd.replace('$$MVN3$$', config['mvn3']) cmd = cmd.replace('$$MVN3$$', config['mvn3'])
return cmd return cmd
def place_srclib(root_dir, number, libpath): def place_srclib(root_dir, number, libpath):
if not number: if not number:
return return

View File

@ -28,6 +28,7 @@ import logging
import common import common
import metadata import metadata
# Get the repo type and address from the given web page. The page is scanned # Get the repo type and address from the given web page. The page is scanned
# in a rather naive manner for 'git clone xxxx', 'hg clone xxxx', etc, and # in a rather naive manner for 'git clone xxxx', 'hg clone xxxx', etc, and
# when one of these is found it's assumed that's the information we want. # when one of these is found it's assumed that's the information we want.
@ -89,6 +90,7 @@ def getrepofrompage(url):
config = None config = None
options = None options = None
def main(): def main():
global config, options global config, options

View File

@ -35,6 +35,7 @@ from common import FDroidPopen, BuildException
config = {} config = {}
options = None options = None
def write_to_config(key, value): def write_to_config(key, value):
'''write a key/value to the local config.py''' '''write a key/value to the local config.py'''
with open('config.py', 'r') as f: with open('config.py', 'r') as f:
@ -45,6 +46,7 @@ def write_to_config(key, value):
with open('config.py', 'w') as f: with open('config.py', 'w') as f:
f.writelines(data) f.writelines(data)
def disable_in_config(key, value): def disable_in_config(key, value):
'''write a key/value to the local config.py, then comment it out''' '''write a key/value to the local config.py, then comment it out'''
with open('config.py', 'r') as f: with open('config.py', 'r') as f:

View File

@ -30,6 +30,7 @@ from common import FDroidPopen
options = None options = None
config = None config = None
def devices(): def devices():
p = FDroidPopen(["adb", "devices"]) p = FDroidPopen(["adb", "devices"])
if p.returncode != 0: if p.returncode != 0:

View File

@ -119,6 +119,7 @@ regex_pedantic = {
], ],
} }
def main(): def main():
global config, options, appid, app_count, warn_count global config, options, appid, app_count, warn_count

View File

@ -23,6 +23,7 @@ import glob
import cgi import cgi
import logging import logging
class MetaDataException(Exception): class MetaDataException(Exception):
def __init__(self, value): def __init__(self, value):
self.value = value self.value = value
@ -183,6 +184,7 @@ valuetypes = {
[]) [])
} }
# Check an app's metadata information for integrity errors # Check an app's metadata information for integrity errors
def check_metadata(info): def check_metadata(info):
for k, t in valuetypes.iteritems(): for k, t in valuetypes.iteritems():
@ -200,6 +202,7 @@ def check_metadata(info):
elif k == 'bool': elif k == 'bool':
build[attr] = False build[attr] = False
# Formatter for descriptions. Create an instance, and call parseline() with # Formatter for descriptions. Create an instance, and call parseline() with
# each line of the description source from the metadata. At the end, call # each line of the description source from the metadata. At the end, call
# end() and then text_plain, text_wiki and text_html will contain the result. # end() and then text_plain, text_wiki and text_html will contain the result.
@ -344,6 +347,7 @@ class DescriptionFormatter:
def end(self): def end(self):
self.endcur() self.endcur()
# Parse multiple lines of description as written in a metadata file, returning # Parse multiple lines of description as written in a metadata file, returning
# a single string in plain text format. # a single string in plain text format.
def description_plain(lines, linkres): def description_plain(lines, linkres):
@ -353,6 +357,7 @@ def description_plain(lines, linkres):
ps.end() ps.end()
return ps.text_plain return ps.text_plain
# Parse multiple lines of description as written in a metadata file, returning # Parse multiple lines of description as written in a metadata file, returning
# a single string in wiki format. Used for the Maintainer Notes field as well, # a single string in wiki format. Used for the Maintainer Notes field as well,
# because it's the same format. # because it's the same format.
@ -363,6 +368,7 @@ def description_wiki(lines):
ps.end() ps.end()
return ps.text_wiki return ps.text_wiki
# Parse multiple lines of description as written in a metadata file, returning # Parse multiple lines of description as written in a metadata file, returning
# a single string in HTML format. # a single string in HTML format.
def description_html(lines, linkres): def description_html(lines, linkres):
@ -372,6 +378,7 @@ def description_html(lines, linkres):
ps.end() ps.end()
return ps.text_html return ps.text_html
def parse_srclib(metafile, **kw): def parse_srclib(metafile, **kw):
thisinfo = {} thisinfo = {}
@ -407,6 +414,7 @@ def parse_srclib(metafile, **kw):
return thisinfo return thisinfo
# Read all metadata. Returns a list of 'app' objects (which are dictionaries as # Read all metadata. Returns a list of 'app' objects (which are dictionaries as
# returned by the parse_metadata function. # returned by the parse_metadata function.
def read_metadata(xref=True, package=None, store=True): def read_metadata(xref=True, package=None, store=True):
@ -439,6 +447,7 @@ def read_metadata(xref=True, package=None, store=True):
return apps return apps
# Get the type expected for a given metadata field. # Get the type expected for a given metadata field.
def metafieldtype(name): def metafieldtype(name):
if name in ['Description', 'Maintainer Notes']: if name in ['Description', 'Maintainer Notes']:
@ -455,6 +464,7 @@ def metafieldtype(name):
return 'unknown' return 'unknown'
return 'string' return 'string'
def flagtype(name): def flagtype(name):
if name in ['extlibs', 'srclibs', 'patch', 'rm', 'buildjni', if name in ['extlibs', 'srclibs', 'patch', 'rm', 'buildjni',
'update', 'scanignore', 'scandelete']: 'update', 'scanignore', 'scandelete']:
@ -463,6 +473,7 @@ def flagtype(name):
return 'script' return 'script'
return 'string' return 'string'
# Parse metadata for a single application. # Parse metadata for a single application.
# #
# 'metafile' - the filename to read. The package id for the application comes # 'metafile' - the filename to read. The package id for the application comes
@ -689,6 +700,7 @@ def parse_metadata(metafile):
return thisinfo return thisinfo
# Write a metadata file. # Write a metadata file.
# #
# 'dest' - The path to the output file # 'dest' - The path to the output file

View File

@ -33,6 +33,7 @@ from common import FDroidPopen, BuildException
config = None config = None
options = None options = None
def main(): def main():
global config, options global config, options

View File

@ -20,6 +20,7 @@
import os import os
import metadata import metadata
def main(): def main():
if not os.path.isdir('metadata'): if not os.path.isdir('metadata'):

View File

@ -26,6 +26,7 @@ import metadata
config = None config = None
options = None options = None
def main(): def main():
global config, options global config, options

View File

@ -30,6 +30,7 @@ from common import VCSException
config = None config = None
options = None options = None
def main(): def main():
global config, options global config, options

View File

@ -28,6 +28,7 @@ import common
config = None config = None
options = None options = None
def update_awsbucket(repo_section): def update_awsbucket(repo_section):
''' '''
Upload the contents of the directory `repo_section` (including Upload the contents of the directory `repo_section` (including
@ -113,6 +114,7 @@ def update_awsbucket(repo_section):
else: else:
logging.info(' skipping ' + s3url) logging.info(' skipping ' + s3url)
def update_serverwebroot(repo_section): def update_serverwebroot(repo_section):
rsyncargs = ['rsync', '-u', '-r', '--delete'] rsyncargs = ['rsync', '-u', '-r', '--delete']
if options.verbose: if options.verbose:
@ -133,6 +135,7 @@ def update_serverwebroot(repo_section):
[indexjar, config['serverwebroot'] + repo_section]) != 0: [indexjar, config['serverwebroot'] + repo_section]) != 0:
sys.exit(1) sys.exit(1)
def main(): def main():
global config, options global config, options

View File

@ -37,25 +37,31 @@ import metadata
from common import FDroidPopen from common import FDroidPopen
from metadata import MetaDataException from metadata import MetaDataException
def get_densities(): def get_densities():
return ['640', '480', '320', '240', '160', '120'] return ['640', '480', '320', '240', '160', '120']
def dpi_to_px(density): def dpi_to_px(density):
return (int(density) * 48) / 160 return (int(density) * 48) / 160
def px_to_dpi(px): def px_to_dpi(px):
return (int(px) * 160) / 48 return (int(px) * 160) / 48
def get_icon_dir(repodir, density): def get_icon_dir(repodir, density):
if density is None: if density is None:
return os.path.join(repodir, "icons") return os.path.join(repodir, "icons")
return os.path.join(repodir, "icons-%s" % density) return os.path.join(repodir, "icons-%s" % density)
def get_icon_dirs(repodir): def get_icon_dirs(repodir):
for density in get_densities(): for density in get_densities():
yield get_icon_dir(repodir, density) yield get_icon_dir(repodir, density)
yield os.path.join(repodir, "icons") yield os.path.join(repodir, "icons")
def update_wiki(apps, apks): def update_wiki(apps, apks):
"""Update the wiki """Update the wiki
@ -257,6 +263,7 @@ def update_wiki(apps, apks):
# Purge server cache to ensure counts are up to date # Purge server cache to ensure counts are up to date
site.pages['Repository Maintenance'].purge() site.pages['Repository Maintenance'].purge()
def delete_disabled_builds(apps, apkcache, repodirs): def delete_disabled_builds(apps, apkcache, repodirs):
"""Delete disabled build outputs. """Delete disabled build outputs.
@ -278,6 +285,7 @@ def delete_disabled_builds(apps, apkcache, repodirs):
if apkfilename in apkcache: if apkfilename in apkcache:
del apkcache[apkfilename] del apkcache[apkfilename]
def resize_icon(iconpath, density): def resize_icon(iconpath, density):
if not os.path.isfile(iconpath): if not os.path.isfile(iconpath):
@ -300,6 +308,7 @@ def resize_icon(iconpath, density):
except Exception, e: except Exception, e:
logging.error("Failed resizing {0} - {1}".format(iconpath, e)) logging.error("Failed resizing {0} - {1}".format(iconpath, e))
def resize_all_icons(repodirs): def resize_all_icons(repodirs):
"""Resize all icons that exceed the max size """Resize all icons that exceed the max size
@ -312,6 +321,7 @@ def resize_all_icons(repodirs):
for iconpath in glob.glob(icon_glob): for iconpath in glob.glob(icon_glob):
resize_icon(iconpath, density) resize_icon(iconpath, density)
def scan_apks(apps, apkcache, repodir, knownapks): def scan_apks(apps, apkcache, repodir, knownapks):
"""Scan the apks in the given repo directory. """Scan the apks in the given repo directory.
@ -582,6 +592,7 @@ def scan_apks(apps, apkcache, repodir, knownapks):
repo_pubkey_fingerprint = None repo_pubkey_fingerprint = None
def make_index(apps, apks, repodir, archive, categories): def make_index(apps, apks, repodir, archive, categories):
"""Make a repo index. """Make a repo index.
@ -861,6 +872,7 @@ def archive_old_apks(apps, apks, archapks, repodir, archivedir, defaultkeepversi
config = None config = None
options = None options = None
def main(): def main():
global config, options global config, options

View File

@ -31,6 +31,7 @@ from common import FDroidPopen
options = None options = None
config = None config = None
def main(): def main():
global options, config global options, config