diff --git a/scripts/fixsymlink.py b/scripts/fixsymlink.py new file mode 100644 index 00000000..28c24254 --- /dev/null +++ b/scripts/fixsymlink.py @@ -0,0 +1,47 @@ +# Copyright (C) Ivan Kravets +# See LICENSE for details. + +from os import chdir, getcwd, readlink, remove, symlink, walk +from os.path import exists, islink, join, split +from sys import exit as sys_exit + + +def get_symrelpath(root, sympath, ending=None): + head, tail = split(sympath) + + if ending: + ending = join(tail, ending) + relpath = join("..", ending) + else: + relpath = tail + ending = tail + + if exists(join(root, relpath)): + return relpath + elif head: + return get_symrelpath(root, head, ending) + else: + raise Exception() + + +def fix_symlink(root, fname, brokenlink): + prevcwd = getcwd() + symrelpath = get_symrelpath(root, brokenlink) + + chdir(root) + remove(fname) + symlink(symrelpath, fname) + chdir(prevcwd) + + +def main(): + for root, dirnames, filenames in walk("."): + for f in filenames: + path = join(root, f) + if not islink(path) or exists(path): + continue + fix_symlink(root, f, readlink(path)) + + +if __name__ == "__main__": + sys_exit(main())