From e2de5e37a380f25a2af186d1d398d318621fa837 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20Bartoszkiewicz?= Date: Wed, 5 Oct 2011 20:06:58 +0200 Subject: [PATCH 1/1] Pierwsza wersja. --- man-symlinker.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 man-symlinker.py 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:])) -- 2.43.2