diff options
-rw-r--r-- | dotfiles/cli.py | 10 | ||||
-rw-r--r-- | dotfiles/core.py | 15 |
2 files changed, 18 insertions, 7 deletions
diff --git a/dotfiles/cli.py b/dotfiles/cli.py index fadca25..2ce55bb 100644 --- a/dotfiles/cli.py +++ b/dotfiles/cli.py @@ -20,12 +20,15 @@ def parse_args(): parser.set_defaults(ignore=[]) parser.set_defaults(externals={}) - parser.add_option("-C", "--config", type="string", dest="config", - help="set configuration file location (default is ~/.dotfilesrc)") + parser.add_option("-f", "--force", action="store_true", dest="force", + default=False, help="ignore unmanaged dotfiles (use with --sync)") parser.add_option("-R", "--repo", type="string", dest="repo", help="set repository location (default is ~/Dotfiles)") + parser.add_option("-C", "--config", type="string", dest="config", + help="set configuration file location (default is ~/.dotfilesrc)") + action_group = OptionGroup(parser, "Actions") action_group.add_option("-a", "--add", action="store_const", dest="action", @@ -86,4 +89,5 @@ def main(): getattr(core.Dotfiles(location=opts.repo, prefix=opts.prefix, ignore=opts.ignore, - externals=opts.externals), opts.action)(files=args) + externals=opts.externals, + force=opts.force), opts.action)(files=args) diff --git a/dotfiles/core.py b/dotfiles/core.py index b04892f..3a13fd3 100644 --- a/dotfiles/core.py +++ b/dotfiles/core.py @@ -17,11 +17,17 @@ class Dotfile(object): if not os.path.lexists(self.name): self.status = 'missing' elif os.path.realpath(self.name) != self.target: - self.status = 'unmanged' + self.status = 'unmanaged' - def sync(self): + def sync(self, force): if self.status == 'missing': os.symlink(self.target, self.name) + elif self.status == 'unmanaged': + if not force: + print "Skipping \"%s\", use --force to override" % self.basename + return + os.remove(self.name) + os.symlink(self.target, self.name) def add(self): if self.status == 'missing': @@ -47,8 +53,9 @@ class Dotfile(object): class Dotfiles(object): - def __init__(self, location, prefix, ignore, externals): + def __init__(self, location, prefix, ignore, externals, force): self.location = location + self.force = force self.dotfiles = [] contents = [x for x in os.listdir(self.location) if x not in ignore] @@ -69,7 +76,7 @@ class Dotfiles(object): def sync(self, **kwargs): for dotfile in self.dotfiles: - dotfile.sync() + dotfile.sync(self.force) def add(self, **kwargs): for file in kwargs.get('files', None): |