From 89b944951a1032108eb6dd4ac823d54f23cd8e96 Mon Sep 17 00:00:00 2001 From: Gitlab CI <noreply@cern.ch> Date: Wed, 4 Oct 2023 16:07:15 +0000 Subject: [PATCH] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb-datapkg/PRConfig/-/jobs/32928186 --- python/PRConfig/FilesFromDirac.py | 7 +- python/PRConfig/lb-format | 224 +++++++++++++----------------- 2 files changed, 98 insertions(+), 133 deletions(-) diff --git a/python/PRConfig/FilesFromDirac.py b/python/PRConfig/FilesFromDirac.py index e65a8a42..36c91d0f 100644 --- a/python/PRConfig/FilesFromDirac.py +++ b/python/PRConfig/FilesFromDirac.py @@ -111,9 +111,9 @@ def get_access_urls_data(bkkpath, sites_to_remove=[], max_files=500): # ensure files are always in same order file_list.sort() -# if any(file.endswith("raw") for file in file_list): -# raise NotImplementedError( -# "File ending with 'raw' found, please write a script manually") + # if any(file.endswith("raw") for file in file_list): + # raise NotImplementedError( + # "File ending with 'raw' found, please write a script manually") print( "#### Checking output of . /cvmfs/lhcb.cern.ch/lib/LbEnv --quiet; lb-dirac dirac-dms-lfn-accessURL --Terminal" @@ -159,6 +159,7 @@ def get_access_urls_data(bkkpath, sites_to_remove=[], max_files=500): # TODO warn if some of the first N files was not resolved to a URL # since then one would get numerically different results. + if __name__ == "__main__": # bkk_path = ("/MC/Upgrade/Beam7000GeV-Upgrade-MagDown-Nu7.6-25ns-Pythia8" # "/Sim10-Up08/Digi15-Up04") diff --git a/python/PRConfig/lb-format b/python/PRConfig/lb-format index 3567998a..42bab2e1 100644 --- a/python/PRConfig/lb-format +++ b/python/PRConfig/lb-format @@ -25,8 +25,7 @@ from datetime import date COPYRIGHT_SIGNATURE = re.compile(r"\bcopyright\b", re.I) CHECKED_FILES = re.compile( r".*(\.(i?[ch](pp|xx|c)?|cc|hh|py|cuh?|C|cmake|[yx]ml|qm[ts]|dtd|xsd|ent|bat|[cz]?sh|js|jsx|css|html?)|" - r"CMakeLists.txt|Jenkinsfile)$" -) + r"CMakeLists.txt|Jenkinsfile)$") COPYRIGHT_STATEMENT = """ (c) Copyright {} CERN for the benefit of the LHCb Collaboration @@ -54,8 +53,7 @@ licenses = {"GPL-3.0-only": GPL3_STATEMENT, "Apache-2.0": APACHE2_STATEMENT} # see https://www.python.org/dev/peps/pep-0263 for the regex ENCODING_DECLARATION = re.compile( - r"^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)".encode() -) + r"^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)".encode()) CLANG_FORMAT_VERSION = "8" YAPF_VERSION = "0.24.0" @@ -74,7 +72,8 @@ def to_check(path): """ Check if path is meant to contain a copyright statement. """ - return os.path.isfile(path) and (bool(CHECKED_FILES.match(path)) or is_script(path)) + return os.path.isfile(path) and (bool(CHECKED_FILES.match(path)) + or is_script(path)) def is_empty(path): @@ -108,31 +107,21 @@ def get_files(reference=None): from subprocess import check_output if reference is None: - all = ( - path.decode() - for path in check_output(["git", "ls-files", "-z"]) - .rstrip(b"\x00") - .split(b"\x00") - ) + all = (path.decode() for path in check_output( + ["git", "ls-files", "-z"]).rstrip(b"\x00").split(b"\x00")) else: - prefix_len = len(check_output(["git", "rev-parse", "--show-prefix"]).strip()) - all = ( - path[prefix_len:].decode() - for path in check_output( - [ - "git", - "diff", - "--name-only", - "--no-renames", - "--diff-filter=MA", - "-z", - reference + "...", - ".", - ] - ) - .rstrip(b"\x00") - .split(b"\x00") - ) + prefix_len = len( + check_output(["git", "rev-parse", "--show-prefix"]).strip()) + all = (path[prefix_len:].decode() for path in check_output([ + "git", + "diff", + "--name-only", + "--no-renames", + "--diff-filter=MA", + "-z", + reference + "...", + ".", + ]).rstrip(b"\x00").split(b"\x00")) return (path for path in all if to_check(path)) @@ -144,29 +133,21 @@ def report(filenames, inverted=False, target=None, license="GPL-3.0-only"): """ print( ("The following {} files {}contain a copyright statement:\n- ").format( - len(filenames), "" if inverted else "do not " - ), + len(filenames), "" if inverted else "do not "), end="", ) print("\n- ".join(filenames)) if not inverted: - license_arg = ( - " --license={}".format(license) if license != "GPL-3.0-only" else "" - ) + license_arg = (" --license={}".format(license) + if license != "GPL-3.0-only" else "") if target: - print( - "\nYou can fix the {0} files without copyright statement " - "with:\n\n $ lb-check-copyright --porcelain {1}{2} " - "| xargs -r lb-add-copyright{2}\n".format( - len(filenames), target, license_arg - ) - ) + print("\nYou can fix the {0} files without copyright statement " + "with:\n\n $ lb-check-copyright --porcelain {1}{2} " + "| xargs -r lb-add-copyright{2}\n".format( + len(filenames), target, license_arg)) else: - print( - "\nyou can fix them with the command lb-add-copyright{}\n".format( - license_arg - ) - ) + print("\nyou can fix them with the command lb-add-copyright{}\n". + format(license_arg)) def to_comment(text, lang_family="#", width=80): @@ -227,12 +208,11 @@ def lang_family(path): if re.match(r".*\.(xml|xsd|dtd|html?|qm[ts]|ent)$", path): return "xml" elif re.match( - r"(.*\.(i?[ch](pp|xx|c)?|cuh?|cc|hh|C|opts|js|jsx|css)|" r"Jenkinsfile)$", path - ): + r"(.*\.(i?[ch](pp|xx|c)?|cuh?|cc|hh|C|opts|js|jsx|css)|" + r"Jenkinsfile)$", path): return "c" - elif re.match(r".*\.py$", path) or re.match( - r"^#!.*python", open(path).readline(120) - ): + elif re.match(r".*\.py$", path) or re.match(r"^#!.*python", + open(path).readline(120)): return "py" else: return "#" @@ -248,7 +228,10 @@ def find_encoding_declaration_line(lines, limit=2): return i -def add_copyright_to_file(path, year=None, license_fn=None, add_license="GPL-3.0-only"): +def add_copyright_to_file(path, + year=None, + license_fn=None, + add_license="GPL-3.0-only"): """ Add copyright statement to the given file for the specified year (or range of years). If the year argument is not specified, the current year is @@ -302,9 +285,10 @@ def get_git_root(path): if not os.path.isdir(path): path = os.path.dirname(path) - p = Popen( - ["git", "rev-parse", "--show-toplevel"], cwd=path, stdout=PIPE, stderr=PIPE - ) + p = Popen(["git", "rev-parse", "--show-toplevel"], + cwd=path, + stdout=PIPE, + stderr=PIPE) out, _ = p.communicate() if p.returncode == 0: return out.strip() @@ -333,7 +317,8 @@ def ensure_clang_format_style(path): path = os.path.abspath(path) global _found_clang_format_dirs - if not any(os.path.commonprefix([d, path]) for d in _found_clang_format_dirs): + if not any( + os.path.commonprefix([d, path]) for d in _found_clang_format_dirs): base = find_clang_format(path) if base: debug("found .clang-format in %s", base) @@ -364,14 +349,12 @@ class CommandNotFound(RuntimeError): def get_clang_format_cmd(version=CLANG_FORMAT_VERSION): cmd = find_command( - cmd.format(version) - for cmd in [ + cmd.format(version) for cmd in [ "clang-format-{}", "lcg-clang-format-{}", "lcg-clang-format-{}.0", "lcg-clang-format-{}.0.0", - ] - ) + ]) if not cmd: raise CommandNotFound("clang-format-%s not found" % version) return cmd @@ -386,8 +369,7 @@ def get_yapf_format_cmd(version=YAPF_VERSION): found_version = check_output([cmd, "--version"]).split()[-1].decode() if found_version != version: raise CommandNotFound( - "wrong yapf version %s (%s required)" % (found_version, version) - ) + "wrong yapf version %s (%s required)" % (found_version, version)) return cmd @@ -402,9 +384,8 @@ class Formatter: 'lang'. """ if lang == "c": - assert self.clang_format_cmd, ( - "tried to format C/C++ file but " "clang-format is not available" - ) + assert self.clang_format_cmd, ("tried to format C/C++ file but " + "clang-format is not available") ensure_clang_format_style(path) return [ self.clang_format_cmd, @@ -413,9 +394,8 @@ class Formatter: "-assume-filename=" + path, ] elif lang == "py": - assert self.yapf_cmd, ( - "tried to format Python file but " "yapf is not available" - ) + assert self.yapf_cmd, ("tried to format Python file but " + "yapf is not available") return [self.yapf_cmd] else: assert False, "invalid language %r" % lang @@ -459,12 +439,10 @@ class Formatter: def check_copyright(): from argparse import ArgumentParser - parser = ArgumentParser( - description=""" + parser = ArgumentParser(description=""" Check that each git tracked source file in the current directory contains a copyright statement. - """ - ) + """) parser.add_argument( "reference", nargs="?", @@ -506,14 +484,12 @@ def check_copyright(): args = parser.parse_args() missing = [ - path - for path in get_files(args.reference) + path for path in get_files(args.reference) # we only deal with non-empty files and we report as "missing" # those without copyright, unless `args.inverted` is True, in which # case we invert the answer of has_copyright, to report the file _with_ # copyright notice - if not is_empty(path) - and not (args.inverted ^ has_copyright(path)) + if not is_empty(path) and not (args.inverted ^ has_copyright(path)) and not any(pattern.search(path) for pattern in args.exclude) ] if missing: @@ -529,15 +505,12 @@ def add_copyright(): from argparse import ArgumentParser parser = ArgumentParser( - description="Add standard LHCb copyright statement to files." - ) + description="Add standard LHCb copyright statement to files.") parser.add_argument("files", nargs="+", help="files to modify") parser.add_argument( - "--year", help="copyright year specification (default: current year)" - ) + "--year", help="copyright year specification (default: current year)") parser.add_argument( - "--license-fn", help="Name of the license file (default: COPYING)" - ) + "--license-fn", help="Name of the license file (default: COPYING)") parser.add_argument( "--license", default="GPL-3.0-only", @@ -552,7 +525,8 @@ def add_copyright(): parser.add_argument( "--pre-commit", action="store_true", - help="Print modified files but don't print warnings (for pre-commit hook)", + help= + "Print modified files but don't print warnings (for pre-commit hook)", ) args = parser.parse_args() @@ -560,17 +534,17 @@ def add_copyright(): for path in args.files: if not args.force and not to_check(path): if not args.pre_commit: - print( - "warning: cannot add copyright to {} (file type not " - "supported)".format(path) - ) + print("warning: cannot add copyright to {} (file type not " + "supported)".format(path)) elif has_copyright(path): if not args.pre_commit: - print("warning: {} already has a copyright statement".format(path)) + print("warning: {} already has a copyright statement".format( + path)) else: if args.pre_commit: print("Adding copyright notice to", path) - add_copyright_to_file(path, args.year, args.license_fn, args.license) + add_copyright_to_file(path, args.year, args.license_fn, + args.license) def format(): @@ -586,11 +560,11 @@ def format(): ) parser.add_argument( "--clang-format-version", - help="version of clang-format to use " "(default: %(default)s)", + help="version of clang-format to use " + "(default: %(default)s)", ) parser.add_argument( - "--yapf-version", help="version of yapf to use (default: %(default)s)" - ) + "--yapf-version", help="version of yapf to use (default: %(default)s)") parser.add_argument( "--verbose", action="store_const", @@ -606,8 +580,7 @@ def format(): help="print debug messages", ) parser.add_argument( - "-n", "--dry-run", action="store_true", help="do not modify the files" - ) + "-n", "--dry-run", action="store_true", help="do not modify the files") parser.add_argument( "--reference", help="check/format only the files select the files that have changed " @@ -624,7 +597,8 @@ def format(): "--pipe", metavar="LANGUAGE", choices=FORMATTABLE_LANGUAGES, - help="format from stdin to stdout (allowed values: %s)" % FORMATTABLE_LANGUAGES, + help="format from stdin to stdout (allowed values: %s)" % + FORMATTABLE_LANGUAGES, ) parser.set_defaults( files=[], @@ -649,10 +623,8 @@ def format(): if args.format_patch: if len(args.files) > 1: - parser.error( - "wrong number of arguments: at most one argument " - "must be provided when using --format-patch" - ) + parser.error("wrong number of arguments: at most one argument " + "must be provided when using --format-patch") elif args.files: args.reference = args.files.pop() @@ -667,27 +639,27 @@ def format(): info("using clang-format: %s", clang_format_cmd) except CommandNotFound as err: (parser.error if args.pipe == "c" else warning)( - "%s: C/C++ formatting not available" % err - ) + "%s: C/C++ formatting not available" % err) try: yapf_cmd = get_yapf_format_cmd(args.yapf_version) info("using yapf: %s", yapf_cmd) except CommandNotFound as err: (parser.error if args.pipe == "py" else warning)( - "%s: Python formatting not available" % err - ) + "%s: Python formatting not available" % err) def can_format(path): if to_check(path): lang = lang_family(path) - if (clang_format_cmd and lang == "c") or (yapf_cmd and lang == "py"): + if (clang_format_cmd and lang == "c") or (yapf_cmd + and lang == "py"): return lang return None if not args.pipe: if not args.files: - args.files = (f for f in get_files(args.reference) if can_format(f)) + args.files = (f for f in get_files(args.reference) + if can_format(f)) if args.pipe: import sys @@ -715,16 +687,14 @@ def format(): output = formatter(input, path, lang) if args.format_patch: patch.extend( - l - if l.endswith("\n") - else (l + "\n\\ No newline at end of file\n") + l if l.endswith("\n") else ( + l + "\n\\ No newline at end of file\n") for l in unified_diff( input.decode("utf-8").splitlines(True), output.decode("utf-8").splitlines(True), os.path.join("a", path), os.path.join("b", path), - ) - ) + )) elif output != input: if args.dry_run: print(path, "should be changed") @@ -733,7 +703,8 @@ def format(): with open(path, "wb") as f: f.write(output) except CalledProcessError as err: - warning("could not format %r: %s\n%s", path, err, err.output.rstrip()) + warning("could not format %r: %s\n%s", path, err, + err.output.rstrip()) except UnicodeDecodeError as err: error("invalid encoding in %r: %s", path, err) encoding_errors.append(path) @@ -760,18 +731,14 @@ def format(): msg.add_header("From", "Gitlab CI <noreply@cern.ch>") msg.add_header("Date", formatdate()) msg.add_header("Subject", "[PATCH] Fixed formatting") - payload = "\n".join( - [ - "patch generated by {}".format( - "{CI_PROJECT_URL}/-/jobs/{CI_JOB_ID}".format(**os.environ) - if "CI" in os.environ - else "standalone job" - ), - "", - "", - "".join(patch), - ] - ) + payload = "\n".join([ + "patch generated by {}".format( + "{CI_PROJECT_URL}/-/jobs/{CI_JOB_ID}".format( + **os.environ) if "CI" in os.environ else "standalone job"), + "", + "", + "".join(patch), + ]) try: payload.encode("ascii") except UnicodeEncodeError: @@ -784,8 +751,7 @@ def format(): print(msg) else: if os.path.dirname(args.format_patch) and not os.path.isdir( - os.path.dirname(args.format_patch) - ): + os.path.dirname(args.format_patch)): os.makedirs(os.path.dirname(args.format_patch)) with open(args.format_patch, "wb") as patchfile: patchfile.write(bytes(msg)) @@ -796,11 +762,9 @@ def format(): sep="\n", ) if "CI" in os.environ: - print( - " curl {CI_PROJECT_URL}/-/jobs/{CI_JOB_ID}/" - "artifacts/raw/{0} | " - "git am".format(args.format_patch, **os.environ) - ) + print(" curl {CI_PROJECT_URL}/-/jobs/{CI_JOB_ID}/" + "artifacts/raw/{0} | " + "git am".format(args.format_patch, **os.environ)) else: print(" git am {}".format(args.format_patch)) print("", "=======================================", sep="\n") -- GitLab