mkrcs.py 1.51 KB
Newer Older
1
#! /usr/bin/env python
Guido van Rossum's avatar
Guido van Rossum committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

# 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()