summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2012-11-08 19:56:41 -0800
committerJesse Morgan <jesse@jesterpm.net>2012-11-08 19:56:41 -0800
commitfeb97bb91f1c9c596f8e776d9ac42ab5ad17b9f0 (patch)
tree63878fd812c81019ed46c43ecce54dc6bcd6e35a /setup.py
parenta188bfa6312dc9bc8ce275060f7ec2ad70cb6b2e (diff)
parent3754347bafc787eb6ed35977d0d0821e51e4a9d2 (diff)
Merge branch 'master' into jesterpm
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py60
1 files changed, 58 insertions, 2 deletions
diff --git a/setup.py b/setup.py
index 9c4e9a5..14f4d0e 100644
--- a/setup.py
+++ b/setup.py
@@ -15,6 +15,7 @@ Usage: python setup.py [--nice] [--home=DIRECTORY]
"""
import os, sys, getopt, socket
+import shutil
import string
class Usage(Exception):
@@ -22,7 +23,7 @@ class Usage(Exception):
self.msg = msg
""" Create links to dotfiles """
-def makeDots(home, nice):
+def makeDots(home, nice = False, pretend = False):
# First make a map of dot files to files in the repository.
dotfiles = getMap("base/")
@@ -30,8 +31,63 @@ def makeDots(home, nice):
hostname = socket.getfqdn().split(".")
for i in range(len(hostname)):
name = string.join(hostname[-(i+1):], ".")
- dotfiles = getMap("host-overrides/" + name, dotfiles)
+ dotfiles = dotfiles + getMap("host-overrides/" + name)
+
+ if pretend:
+ print "I would make these links:"
+ else:
+ print "I am making these links:"
+
+ for dst, src in dotfiles:
+ realDest = home + "/." + dst
+ success = True
+ if not pretend:
+ success = makeLink(src, realDest, nice)
+
+ if success:
+ print "%s => %s" % (realDest, dst, src)
+ else:
+ print "Not linking %s to %s because file exists" % (realDest, src)
+
+""" Return a map of dest => source dotfiles """
+def getMap(baseDirectory, directory=""):
+ if baseDirectory[-1] != "/":
+ baseDirectory = baseDirectory + "/"
+
+ if directory != "" and directory[-1] != "/":
+ directory = directory + "/"
+
+ dots = dict()
+ for filename in os.listdir(baseDirectory + directory):
+ if filename == ".nolink":
+ continue
+
+ fullPath = baseDirectory + directory + filename
+
+ if os.path.isdir(fullPath) and os.path.exists(fullPath + "/.nolink"):
+ # We will not make a link but will make sure this directory exists.
+ dots[directory + filename] = ""
+ dots += getMap(baseDirectory, directory + filename)
+
+ else:
+ dots[directory + filename] = fullPath
+
+""" Make a link from src to realDest.
+ If nice is true, don't overwrite realDest.
+ If src is an empty string, just create a directory. """
+def makeLink(src, realDest, nice = False):
+ if os.path.exists(realDest):
+ if nice:
+ return False
+ else:
+ shutil.rmtree(realDest)
+
+ if src == "":
+ os.mkdir(realDest)
+
+ os.symlink(src, realDest)
+ return True
""" Main Method """