From da31120b5ad361b9dda28e0a97bf066499f805e6 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 24 Aug 2020 16:23:13 +0200 Subject: [PATCH 1/2] build: refactor missing srclibs error reporting for only .yml --- fdroidserver/build.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index ecf466c2..31ef0d0c 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -203,15 +203,12 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): send_dir(lib) # Copy the metadata file too... ftp.chdir(posixpath.join(homedir, 'srclibs')) - if os.path.isfile(os.path.join('srclibs', name + '.yml')): - ftp.put(os.path.join('srclibs', name + '.yml'), - name + '.yml') + srclibsfile = os.path.join('srclibs', name + '.yml') + if os.path.isfile(srclibsfile): + ftp.put(srclibsfile, os.path.basename(srclibsfile)) else: - raise BuildException("can not find metadata file for " - "'{name}', please make sure it is " - "present in your 'srclibs' folder." - "(supported format: yml)" - .format(name=name)) + raise BuildException(_('cannot find required srclibs: "{path}"') + .format(path=srclibsfile)) # Copy the main app source code # (no need if it's a srclib) if (not basesrclib) and os.path.exists(build_dir): From 0b92e60266bda6d9aab2c96a0beedc927fc43a13 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 24 Aug 2020 16:52:16 +0200 Subject: [PATCH 2/2] handle file type detection using Pythonic methods This ditches the custom common.get_extension() for straight core Python methods. This should make the code closer to Python conventions. For example, pathlib also includes the "." in the extension it returns. --- fdroidserver/lint.py | 6 +++--- fdroidserver/metadata.py | 12 ++++-------- fdroidserver/rewritemeta.py | 12 +++++------- fdroidserver/scanner.py | 26 +++++++++++++------------- 4 files changed, 25 insertions(+), 31 deletions(-) diff --git a/fdroidserver/lint.py b/fdroidserver/lint.py index 8fafc7a0..f94d0e28 100644 --- a/fdroidserver/lint.py +++ b/fdroidserver/lint.py @@ -520,15 +520,15 @@ def check_for_unsupported_metadata_files(basedir=""): if not os.path.exists(f + '.yml'): print(_('"%s/" has no matching metadata file!') % f) return_value = True - elif os.path.splitext(f)[1][1:] == "yml": + elif f.endswith('.yml'): packageName = os.path.splitext(os.path.basename(f))[0] if not common.is_valid_package_name(packageName): print('"' + packageName + '" is an invalid package name!\n' + 'https://developer.android.com/studio/build/application-id') return_value = True else: - print('"' + f.replace(basedir, '') - + '" is not a supported file format (use: .yml)') + print(_('"{path}" is not a supported file format (use: metadata/*.yml)') + .format(path=f.replace(basedir, ''))) return_value = True return return_value diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 60762076..eb771646 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -927,8 +927,6 @@ def _decode_bool(s): def parse_metadata(metadatapath, check_vcs=False, refresh=True): '''parse metadata file, optionally checking the git repo for metadata first''' - _ignored, ext = fdroidserver.common.get_extension(metadatapath) - app = App() app.metadatapath = metadatapath name, _ignored = fdroidserver.common.get_extension(os.path.basename(metadatapath)) @@ -937,11 +935,11 @@ def parse_metadata(metadatapath, check_vcs=False, refresh=True): else: app.id = name - if ext == 'yml': + if metadatapath.endswith('.yml'): with open(metadatapath, 'r') as mf: parse_yaml_metadata(mf, app) else: - warn_or_exception(_('Unknown metadata format: {path} (use: .yml)') + warn_or_exception(_('Unknown metadata format: {path} (use: *.yml)') .format(path=metadatapath)) if check_vcs and app.Repo: @@ -1167,14 +1165,12 @@ build_cont = re.compile(r'^[ \t]') def write_metadata(metadatapath, app): - _ignored, ext = fdroidserver.common.get_extension(metadatapath) - - if ext == 'yml': + if metadatapath.endswith('.yml'): if importlib.util.find_spec('ruamel.yaml'): with open(metadatapath, 'w') as mf: return write_yaml(mf, app) else: - raise FDroidException('ruamel.yaml not installed, can not write metadata.') + raise FDroidException(_('ruamel.yaml not installed, can not write metadata.')) warn_or_exception(_('Unknown metadata format: %s') % metadatapath) diff --git a/fdroidserver/rewritemeta.py b/fdroidserver/rewritemeta.py index 72c10607..5b1c1927 100644 --- a/fdroidserver/rewritemeta.py +++ b/fdroidserver/rewritemeta.py @@ -38,8 +38,7 @@ def proper_format(app): # read in metadata.py with open(app.metadatapath, 'r') as f: cur_content = f.read() - _ignored, extension = common.get_extension(app.metadatapath) - if extension == 'yml': + if app.metadatapath.endswith('.yml'): metadata.write_yaml(s, app) content = s.getvalue() s.close() @@ -68,12 +67,11 @@ def main(): for appid, app in apps.items(): path = app.metadatapath - base, ext = common.get_extension(path) - if ext != "yml": - logging.info(_("Ignoring {ext} file at '{path}'").format(ext=ext, path=path)) - continue - else: + if path.endswith('.yml'): logging.info(_("Rewriting '{appid}'").format(appid=appid)) + else: + logging.warning(_('Cannot rewrite "{path}"').format(path=path)) + continue if options.list: if not proper_format(app): diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index 47526105..7e589e45 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -265,33 +265,33 @@ def scan_source(build_dir, build=metadata.Build()): continue path_in_build_dir = os.path.relpath(filepath, build_dir) - _ignored, ext = common.get_extension(path_in_build_dir) + extension = os.path.splitext(path_in_build_dir)[1] if curfile in ('gradle-wrapper.jar', 'gradlew', 'gradlew.bat'): removeproblem(curfile, path_in_build_dir, filepath) - elif ext == 'apk': + elif extension == '.apk': removeproblem(_('Android APK file'), path_in_build_dir, filepath) - elif ext == 'a': + elif extension == '.a': count += handleproblem(_('static library'), path_in_build_dir, filepath) - elif ext == 'aar': + elif extension == '.aar': count += handleproblem(_('Android AAR library'), path_in_build_dir, filepath) - elif ext == 'class': + elif extension == '.class': count += handleproblem(_('Java compiled class'), path_in_build_dir, filepath) - elif ext == 'dex': + elif extension == '.dex': count += handleproblem(_('Android DEX code'), path_in_build_dir, filepath) - elif ext == 'gz': + elif extension == '.gz': count += handleproblem(_('gzip file archive'), path_in_build_dir, filepath) - elif ext == 'so': + elif extension == '.so': count += handleproblem(_('shared library'), path_in_build_dir, filepath) - elif ext == 'zip': + elif extension == '.zip': count += handleproblem(_('ZIP file archive'), path_in_build_dir, filepath) - elif ext == 'jar': + elif extension == '.jar': for name in suspects_found(curfile): count += handleproblem('usual suspect \'%s\'' % name, path_in_build_dir, filepath) count += handleproblem(_('Java JAR file'), path_in_build_dir, filepath) - elif ext == 'java': + elif extension == '.java': if not os.path.isfile(filepath): continue with open(filepath, 'r', errors='replace') as f: @@ -300,7 +300,7 @@ def scan_source(build_dir, build=metadata.Build()): count += handleproblem('DexClassLoader', path_in_build_dir, filepath) break - elif ext == 'gradle': + elif extension == '.gradle': if not os.path.isfile(filepath): continue with open(filepath, 'r', errors='replace') as f: @@ -316,7 +316,7 @@ def scan_source(build_dir, build=metadata.Build()): if not any(r.match(url) for r in allowed_repos): count += handleproblem('unknown maven repo \'%s\'' % url, path_in_build_dir, filepath) - elif ext in ['', 'bin', 'out', 'exe']: + elif extension in ['', '.bin', '.out', '.exe']: if is_binary(filepath): count += handleproblem('binary', path_in_build_dir, filepath)