X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=assets%2Fcheck-and-fix.py;h=f69d206703ee1b0a6149c9491e240abf35de96e3;hb=335dfe77df817ce3d08cdb3940fd5a5b1d48b8c2;hp=2528d04ef3904daf2b5d3a1f0c70500268fd69b1;hpb=5207e3d876693f1599257f828fe5ffaeebc73f52;p=xonotic%2Fxonotic.wiki.git diff --git a/assets/check-and-fix.py b/assets/check-and-fix.py index 2528d04..f69d206 100755 --- a/assets/check-and-fix.py +++ b/assets/check-and-fix.py @@ -4,10 +4,8 @@ # Well, this wasn't supposed to be so long and complicated. # Anyway, it makes sure the wiki works on both Gitlab and Github by moving -# stuff around and fixing links. Then it reports all remaining broken links -# and unused files. Since the wiki is in git, you can use `git status` -# and `git diff` to see the changes. You can also use the `--dry-run` flag -# to print all changes the script would make without actually making them. +# stuff around and fixing links. Then it reports all broken links +# and unused files that can't be fixed automatically. By default it only prints changes it would make to stdout, if you wish to apply them, use `--fix`. # See Editing.md for more information. @@ -33,7 +31,7 @@ def compile_regex(rgx: str): # regex (unlike re) supports non-constant length look-behinds return regex.compile( "".join( - [line.strip() for line in rgx])) + [line.lstrip() for line in rgx.split('\n')])) # examples: @@ -68,7 +66,7 @@ LINK_REGEX = compile_regex(""" """) -dry_run = False +apply_fixes = False def strip_header_link(link: str) -> str: @@ -126,10 +124,10 @@ def fix_dir_structure(): if os.path.exists(fixed): print("warning: collision: {}".format(path)) - elif dry_run: - print("would rename {} to {}".format(path, fixed)) - else: + elif apply_fixes: os.rename(path, fixed) + else: + print("would rename {} to {}".format(path, fixed)) def is_between_files(link: str) -> bool: @@ -180,15 +178,14 @@ def fix_links(): changes = [] replacer = functools.partial(replace_link, changes) contents_new = LINK_REGEX.sub(replacer, contents) - if dry_run and any(changes): - print("would convert these links in {}:".format(path)) - for change in changes: - print(change) - - if not dry_run and contents != contents_new: + if apply_fixes and contents != contents_new: f.seek(0) f.write(contents_new) f.truncate() + elif not apply_fixes and any(changes): + print("would convert these links in {}:".format(path)) + for change in changes: + print(change) def link_to_path(current_file: str, link: str) -> str: @@ -200,7 +197,7 @@ def link_to_path(current_file: str, link: str) -> str: # when not using subdirs, nothing or "." works for all 3 if link.startswith("..") or link.startswith("/"): - print("file: {} bad link: {}", link) + print("file: {} bad link: {}".format(current_file, link)) # path relative to wiki root, not curent file current_dir = dirname(current_file) @@ -277,7 +274,7 @@ def find_unlinked(all_paths: List[str]): walk_links(canonical_to_real, is_linked, "Home.md") - for path, linked in is_linked.items(): + for path, linked in sorted(is_linked.items()): if not linked: print("not reachable from Home: {}".format(path)) @@ -289,9 +286,9 @@ def check_links(): def main(): - global dry_run - if len(sys.argv) > 1 and sys.argv[1] == "--dry-run": - dry_run = True + global apply_fixes + if len(sys.argv) > 1 and sys.argv[1] == "--fix": + apply_fixes = True # convert file paths - put everything into root fix_dir_structure()