1
0
Эх сурвалжийг харах

add support for directories

without symlinking the whole directory like '~/.vim'
raylu 13 жил өмнө
parent
commit
a8b76a90f8
1 өөрчлөгдсөн 29 нэмэгдсэн , 12 устгасан
  1. 29 12
      setup.py

+ 29 - 12
setup.py

@@ -1,39 +1,56 @@
 #!/usr/bin/env python
 
-import os, sys
+import os, sys, errno
 
 if os.path.dirname(__file__) != '.':
 	print "This script must be run from the dotfiles directory."
 	sys.exit(1)
 script = os.path.basename(__file__)
 
-for f in os.listdir('.'):
-	if f in [script, '.git']:
-		continue
-
-	name = '../.' + f
-	target = 'dotfiles/' + f
+def link_file(target, name):
 	try:
 		os.symlink(target, name)
 		print "\033[36;1m" + name + "\033[0m ->", target
 	except OSError as e:
-		if e.errno == 17:
+		if e.errno == errno.EEXIST:
 			try:
 				if os.readlink(name) == target:
 					print name, "is already linked"
 				else:
 					print name, "\033[31;1mexists\033[0m (symlink)"
 			except OSError as e:
-				if e.errno == 22:
+				if e.errno == errno.EINVAL:
 					print name, "\033[31;1mexists\033[0m"
 				else:
-					print e
+					raise
 		else:
-			print e
+			raise
+
+for f in os.listdir('.'):
+	if f in [script, '.git']:
+		continue
+
+	name = '../.' + f
+	target = 'dotfiles/' + f
+	# ~.vim is a special case since we symlink the whole directory
+	# everywhere else, we create the directory and symlink the contents
+	if f == 'vim' or not os.path.isdir(f):
+		link_file(target, name)
+	else:
+		try:
+			os.mkdir(name)
+			print "Created \033[34;1m" + name + "\033[0m"
+		except OSError as e:
+			if e.errno == errno.EEXIST:
+				print 'No need to create', name
+			else:
+				raise
+		for f in os.listdir(f):
+			link_file('../' + target + '/' + f, name + '/' + f)
 
 vim_swap = '../.vim_swap'
 if os.path.exists(vim_swap):
 	print "No need to create", vim_swap
 else:
 	os.mkdir(vim_swap, 0700)
-	print "Created \033[32;1m" + vim_swap + "\033[0m"
+	print "Created \033[34;1m" + vim_swap + "\033[0m"