From: MichaƂ Bartoszkiewicz Date: Wed, 5 Oct 2011 18:06:58 +0000 (+0200) Subject: Pierwsza wersja. X-Git-Tag: v1.0~9 X-Git-Url: https://git.bzium.org/embe/man-symlinker.git/commitdiff_plain/e2de5e37a380f25a2af186d1d398d318621fa837?ds=sidebyside Pierwsza wersja. --- e2de5e37a380f25a2af186d1d398d318621fa837 diff --git a/man-symlinker.py b/man-symlinker.py new file mode 100755 index 0000000..91a31ed --- /dev/null +++ b/man-symlinker.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# encoding: UTF-8 + +from __future__ import absolute_import, division + +import os +import re +import sys + +MAN_NAME_RE = re.compile(r'/man/(?:[^/]+/)?man([^/]+)/[^/]+.\1$') +MAX_LEN = 1024 +SO_RE = re.compile(r'^\.so\s+(.*)$') + +def process_file(name): + m = MAN_NAME_RE.search(name) + if not m: + return False + category = m.group(1) + dir_name = 'man' + category + f = open(name, 'r') + s = f.read(MAX_LEN+1) + if len(s) > MAX_LEN: + return False + s = s.strip() + if '\n' in s: + return False + m = SO_RE.search(s) + if not m: + return False + link = m.group(1) + if link.startswith('/') or link.count('/') > 1: + return False + if link.startswith(dir_name+'/'): + link = link[len(dir_name)+1:] + else: + link = '../' + link + os.unlink(name) + os.symlink(link, name) + print 'Converted {} into a symlink to {}'.format(name, link) + return True + +def main(args=[]): + try: + dashes = args.index('--') + except ValueError: + compressor = [] + all_files = args + else: + compressor = args[:dashes] + all_files = args[dashes+1:] + files = [] + for name in all_files: + if not process_file(name): + files.append(name) + if not compressor or not files: + return 0 + os.execvp(compressor[0], compressor + files) + return 1 + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:]))