#!/usr/bin/python

import hashlib
import os
import sys


def file_hash(path):
    hashsum = hashlib.sha256()
    file = open(path, 'rb')
    try:
        hashsum.update(file.read())
    finally:
        file.close()
    return hashsum.digest()


def main():
    data = {}
    if len(sys.argv) != 3:
        print >>sys.stderr, 'Usage: %s <src-dir> <dst-dir>'
        sys.exit(1)
    _, src_dir, dst_dir = sys.argv
    for root, dirs, files in os.walk(src_dir):
        for filename in files:
            path = os.path.join(root, filename)
            path = os.path.normpath(path)
            data[file_hash(path)] = path
    for root, dirs, files in os.walk(dst_dir):
        for filename in files:
            if not '_generic' in filename:
                continue
            path = os.path.join(root, filename)
            path = os.path.normpath(path)
            data[file_hash(path)] = path
    for root, dirs, files in os.walk(dst_dir):
        for filename in files:
            if '_generic' in filename:
                continue
            path = os.path.join(root, filename)
            path = os.path.normpath(path)
            try:
                sympath = data[file_hash(path)]
            except LookupError:
                pass
            else:
                sympath = os.path.join('../' * root.count('/'), sympath)
                sympath = os.path.normpath(sympath)
                print >>sys.stderr, 'symlinking %s -> %s' % (path, sympath)
                os.unlink(path)
                os.symlink(sympath, path)


if __name__ == '__main__':
    main()

# vim:ts=4 sw=4 et
