1
0
mirror of https://github.com/deadc0de6/dotdrop.git synced 2026-02-05 12:03:49 +00:00

first attempt to update dotfiles

This commit is contained in:
deadc0de6
2018-01-13 15:47:57 +01:00
parent a4c13eb37c
commit 8add242882
3 changed files with 48 additions and 4 deletions

View File

@@ -142,7 +142,7 @@ class Cfg:
# make sure we have an absolute dotpath
self.curdotpath = self.configs[self.key_dotpath]
self.configs[self.key_dotpath] = self._get_abs_dotpath(self.curdotpath)
self.configs[self.key_dotpath] = self.get_abs_dotpath(self.curdotpath)
return True
def _get_included_dotfiles(self, profile):
@@ -158,7 +158,7 @@ class Cfg:
included.extend(self.prodots[other])
return included
def _get_abs_dotpath(self, dotpath):
def get_abs_dotpath(self, dotpath):
""" transform dotpath to an absolute path """
if not dotpath.startswith(os.sep):
absconf = os.path.join(os.path.dirname(

View File

@@ -44,6 +44,7 @@ from .utils import *
CUR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG = Logger()
HOSTNAME = os.uname()[1]
TILD = '~'
BANNER = """ _ _ _
__| | ___ | |_ __| |_ __ ___ _ __
@@ -59,6 +60,7 @@ Usage:
dotdrop import [-ldV] [-c <path>] [-p <profile>] <paths>...
dotdrop compare [-V] [-c <path>] [-p <profile>]
[-o <opts>] [--files=<files>]
dotdrop update [-dV] [-c <path>] <path>
dotdrop listfiles [-V] [-c <path>] [-p <profile>]
dotdrop list [-V] [-c <path>]
dotdrop --help
@@ -147,8 +149,43 @@ def compare(opts, conf, tmp, focus=None):
return len(selected) > 0
def update(opts, conf, path):
if not os.path.exists(path):
LOG.err('\"%s\" does not exist!' % (path))
return False
home = os.path.expanduser(TILD)
path = os.path.expanduser(path)
path = os.path.expandvars(path)
# normalize the path
if path.startswith(home):
path = path.lstrip(home)
path = os.path.join(TILD, path)
dotfiles = conf.get_dotfiles(opts['profile'])
l = [d for d in dotfiles if d.dst == path]
if not l:
LOG.err('\"%s\" is not managed!' % (path))
return False
if len(l) > 1:
found = ','.join([d.src for d in dotfiles])
LOG.err('multiple dotfiles found: %s' % (found))
return False
dotfile = l[0]
src = os.path.join(conf.get_abs_dotpath(opts['dotpath']), dotfile.src)
if Templategen.get_marker() in open(src, 'r').read():
LOG.warn('\"%s\" uses template, please update manually' % (src))
return False
cmd = ['cp', '-R', '-L', os.path.expanduser(path), src]
if opts['dry']:
LOG.dry('would run: %s' % (' '.join(cmd)))
else:
if LOG.ask('Overwrite \"%s\" with \"%s\"?' % (src, path)):
run(cmd, raw=False, log=False)
LOG.log('\"%s\" updated from \"%s\".' % (src, path))
return True
def importer(opts, conf, paths):
home = os.path.expanduser('~')
home = os.path.expanduser(TILD)
cnt = 0
for path in paths:
if not os.path.exists(path):
@@ -220,7 +257,7 @@ def list_files(opts, conf):
def header():
LOG.log(BANNER)
LOG.log("")
LOG.log('')
def main():
@@ -269,6 +306,10 @@ def main():
# import dotfile(s)
importer(opts, conf, args['<paths>'])
elif args['update']:
# update a dotfile
update(opts, conf, args['<path>'])
except KeyboardInterrupt:
LOG.err('interrupted')
ret = False

View File

@@ -70,3 +70,6 @@ class Templategen:
with open(path, 'rb') as f:
data = f.read()
return data.decode('utf-8', 'replace')
def get_marker():
return BLOCK_START