aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dotfiles/cli.py47
-rw-r--r--dotfiles/repository.py30
2 files changed, 37 insertions, 40 deletions
diff --git a/dotfiles/cli.py b/dotfiles/cli.py
index b2b68a7..d124c0b 100644
--- a/dotfiles/cli.py
+++ b/dotfiles/cli.py
@@ -6,10 +6,7 @@ from .repository import Repository
from .exceptions import DotfileException
-DEFAULT_HOMEDIR = os.path.expanduser('~/')
DEFAULT_REPO_PATH = os.path.expanduser('~/Dotfiles')
-DEFAULT_REPO_IGNORE = ['.git']
-
pass_repo = click.make_pass_decorator(Repository)
@@ -33,9 +30,7 @@ def cli(ctx, repository):
"""Dotfiles is a tool to make managing your dotfile symlinks in $HOME easy,
allowing you to keep all your dotfiles in a single directory.
"""
- ctx.obj = Repository(py.path.local(repository),
- py.path.local(DEFAULT_HOMEDIR),
- DEFAULT_REPO_IGNORE)
+ ctx.obj = Repository(py.path.local(repository))
@cli.command()
@@ -59,6 +54,26 @@ def remove(repo, debug, files):
@cli.command()
+@click.option('-v', '--verbose', is_flag=True, help='Show executed commands.')
+@click.argument('files', nargs=-1, type=click.Path())
+@pass_repo
+def link(repo, verbose, files):
+ """Create missing symlinks."""
+ # TODO: no files should be interpreted as all files
+ raise RuntimeError('Not implemented yet')
+
+
+@cli.command()
+@click.option('-v', '--verbose', is_flag=True, help='Show executed commands.')
+@click.argument('files', nargs=-1, type=click.Path(exists=True))
+@pass_repo
+def unlink(repo, verbose, files):
+ """Remove existing symlinks."""
+ # TODO: no files should be interpreted as all files with confirmation
+ raise RuntimeError('Not implemented yet')
+
+
+@cli.command()
@click.option('-a', '--all', is_flag=True, help='Show all dotfiles.')
@click.option('-c', '--color', is_flag=True, help='Enable color output.')
@pass_repo
@@ -86,23 +101,3 @@ def status(repo, all, color):
click.secho('%c %s' % (char, name), fg=color)
except KeyError:
continue
-
-
-@cli.command()
-@click.option('-v', '--verbose', is_flag=True, help='Show executed commands.')
-@click.argument('files', nargs=-1, type=click.Path())
-@pass_repo
-def link(repo, verbose, files):
- """Create missing symlinks."""
- # TODO: no files should be interpreted as all files
- raise RuntimeError('Not implemented yet')
-
-
-@cli.command()
-@click.option('-v', '--verbose', is_flag=True, help='Show executed commands.')
-@click.argument('files', nargs=-1, type=click.Path(exists=True))
-@pass_repo
-def unlink(repo, verbose, files):
- """Remove existing symlinks."""
- # TODO: no files should be interpreted as all files with confirmation
- raise RuntimeError('Not implemented yet')
diff --git a/dotfiles/repository.py b/dotfiles/repository.py
index 3444388..a672a52 100644
--- a/dotfiles/repository.py
+++ b/dotfiles/repository.py
@@ -15,16 +15,18 @@ class Repository(object):
:param ignore: a list of targets to ignore
"""
- def __init__(self, repodir, homedir, ignore=[]):
- self.ignore = ignore
- self.homedir = homedir
+ homedir = py.path.local('~/', expanduser=True)
+ ignore = ['.git', '.hg']
- # create repository if needed
+ def __init__(self, repodir, homedir=homedir, ignore=ignore):
self.repodir = repodir.ensure(dir=1)
+ self.homedir = homedir
+ self.ignore = ignore
def __str__(self):
"""Return human-readable repository contents."""
- return ''.join('%s\n' % item for item in self.contents()).rstrip()
+ return ''.join('%s\n' % item.short_name(self.homedir)
+ for item in self.contents()).rstrip()
def __repr__(self):
return '<Repository %r>' % self.repodir
@@ -37,7 +39,7 @@ class Repository(object):
"""Return the expected repository target for the given symlink."""
return self.repodir.join(self.homedir.bestrelpath(name))
- def dotfile(self, name):
+ def _dotfile(self, name):
"""Return a valid dotfile for the given path."""
# XXX: it must be below the home directory
@@ -45,6 +47,13 @@ class Repository(object):
# it cannot be ignored
# it must be a file
+ # if not self.homedir.samefile(name.dirname):
+ # raise NotRootedInHome(name)
+ # if name.dirname != self.homedir:
+ # raise IsNested(name)
+ # if name.basename[0] != '.':
+ # raise NotADotfile(name)
+
target = self._name_to_target(name)
if target.basename in self.ignore:
raise TargetIgnored(name)
@@ -59,13 +68,6 @@ class Repository(object):
# this occurs when the symlink does not yet exist
continue
- # if not self.homedir.samefile(name.dirname):
- # raise NotRootedInHome(name)
- # if name.dirname != self.homedir:
- # raise IsNested(name)
- # if name.basename[0] != '.':
- # raise NotADotfile(name)
-
return Dotfile(name, target)
def dotfiles(self, paths):
@@ -74,7 +76,7 @@ class Repository(object):
paths = map(py.path.local, paths)
for path in paths:
try:
- dotfiles.append(self.dotfile(path))
+ dotfiles.append(self._dotfile(path))
except DotfileException as err:
echo(err)
return dotfiles