| #! /usr/bin/env python |
| |
| # A rather specialized script to make sure that a symbolic link named |
| # RCS exists pointing to a real RCS directory in a parallel tree |
| # referenced as RCStree in an ancestor directory. |
| # (I use this because I like my RCS files to reside on a physically |
| # different machine). |
| |
| import os |
| |
| def main(): |
| rcstree = 'RCStree' |
| rcs = 'RCS' |
| if os.path.islink(rcs): |
| print `rcs`, 'is a symlink to', `os.readlink(rcs)` |
| return |
| if os.path.isdir(rcs): |
| print `rcs`, 'is an ordinary directory' |
| return |
| if os.path.exists(rcs): |
| print `rcs`, 'is a file?!?!' |
| return |
| # |
| p = os.getcwd() |
| up = '' |
| down = '' |
| # Invariants: |
| # (1) join(p, down) is the current directory |
| # (2) up is the same directory as p |
| # Ergo: |
| # (3) join(up, down) is the current directory |
| #print 'p =', `p` |
| while not os.path.isdir(os.path.join(p, rcstree)): |
| head, tail = os.path.split(p) |
| #print 'head =', `head`, '; tail =', `tail` |
| if not tail: |
| print 'Sorry, no ancestor dir contains', `rcstree` |
| return |
| p = head |
| up = os.path.join(os.pardir, up) |
| down = os.path.join(tail, down) |
| #print 'p =', `p`, '; up =', `up`, '; down =', `down` |
| there = os.path.join(up, rcstree) |
| there = os.path.join(there, down) |
| there = os.path.join(there, rcs) |
| if os.path.isdir(there): |
| print `there`, 'already exists' |
| else: |
| print 'making', `there` |
| makedirs(there) |
| print 'making symlink', `rcs`, '->', `there` |
| os.symlink(there, rcs) |
| |
| def makedirs(p): |
| if not os.path.isdir(p): |
| head, tail = os.path.split(p) |
| makedirs(head) |
| os.mkdir(p, 0777) |
| |
| main() |