# 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.
# 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:
""")
-dry_run = False
+apply_fixes = False
def strip_header_link(link: str) -> str:
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:
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:
# 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)
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))
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()