#!@PYTHON@
# mass-link.py
-# USAGE: mass-link.py symbolic | hard SOURCEDIR DESTDIR FILES
+# USAGE: mass-link.py [--prepend-suffix SUFFIX] symbolic | hard SOURCEDIR DESTDIR FILES
#
# create hard or symbolic links to SOURCEDIR/FILES in DESTDIR
#
-# shell-wildcard expansion is performed on FILES.
-
-print "mass_link.py"
+# If --prepend-suffix is specified, link to foo.bar will be called fooSUFFIX.bar.
+# Shell wildcards expansion is performed on FILES.
import sys
import os
import glob
+import getopt
+
+print "mass-link.py"
+
+optlist, args = getopt.getopt (sys.argv[1:], '', ['prepend-suffix='])
+link_type, source_dir, dest_dir = args[0:3]
+files = args[3:]
+
+source_dir = os.path.normpath (source_dir)
+dest_dir = os.path.normpath (dest_dir)
-link_type, source_dir, dest_dir = sys.argv[1:4]
-files = sys.argv[4:]
+prepended_suffix = ''
+for x in optlist:
+ if x[0] == '--prepend-suffix':
+ prepended_suffix = x[1]
+
+if prepended_suffix:
+ def insert_suffix (p):
+ l = p.split ('.')
+ if len (l) >= 2:
+ l[-2] += prepended_suffix
+ return '.'.join (l)
+ return p + prepended_suffix
+else:
+ insert_suffix = lambda p: p
if link_type == 'symbolic':
link = os.symlink
for pattern in files:
sourcefiles += (glob.glob (os.path.join (source_dir, pattern)))
-destfiles = map (lambda f: os.path.join (dest_dir, os.path.basename (f)), sourcefiles)
+def relative_path (f):
+ if source_dir == '.':
+ return f
+ return f[len (source_dir) + 1:]
+
+destfiles = [os.path.join (dest_dir, insert_suffix (relative_path (f))) for f in sourcefiles]
+
+destdirs = set ([os.path.dirname (dest) for dest in destfiles])
+[os.makedirs (d) for d in destdirs if not os.path.exists (d)]
def force_link (src,dest):
if os.path.exists (dest):
- os.system ('rm -rf ' + dest)
+ os.system ('rm -f ' + dest)
link (src, dest)
map (force_link, sourcefiles, destfiles)