mirror of
https://github.com/deadc0de6/dotdrop.git
synced 2026-02-04 18:34:48 +00:00
move profiles dotfiles under sub-entry "dotfiles"
This commit is contained in:
18
README.md
18
README.md
@@ -121,10 +121,12 @@ the config files, for example:
|
||||
...
|
||||
profiles:
|
||||
host1:
|
||||
- f_vimrc
|
||||
- f_xinitrc
|
||||
dotfiles:
|
||||
- f_vimrc
|
||||
- f_xinitrc
|
||||
host2:
|
||||
- f_vimrc
|
||||
dotfiles:
|
||||
- f_vimrc
|
||||
...
|
||||
```
|
||||
|
||||
@@ -203,6 +205,7 @@ the following entries:
|
||||
|
||||
```
|
||||
<some-name-usually-the-hostname>:
|
||||
dotfiles:
|
||||
- <some-dotfile-key-name-defined-above>
|
||||
- <some-other-dotfile-key-name>
|
||||
- ...
|
||||
@@ -295,7 +298,8 @@ dotfiles:
|
||||
- vundle
|
||||
profiles:
|
||||
home:
|
||||
- f_vimrc
|
||||
dotfiles:
|
||||
- f_vimrc
|
||||
```
|
||||
|
||||
Thus when `f_vimrc` is installed, the command
|
||||
@@ -379,9 +383,11 @@ dotfiles:
|
||||
src: xinitrc
|
||||
profiles:
|
||||
home:
|
||||
- f_xinitrc
|
||||
dotfiles:
|
||||
- f_xinitrc
|
||||
office:
|
||||
- f_xinitrc
|
||||
dotfiles:
|
||||
- f_xinitrc
|
||||
```
|
||||
|
||||
Installing the dotfiles (the `--profile` switch is not needed if
|
||||
|
||||
@@ -14,10 +14,11 @@ from action import Action
|
||||
class Cfg:
|
||||
key_all = 'ALL'
|
||||
key_config = 'config'
|
||||
key_profiles = 'profiles'
|
||||
key_dotfiles = 'dotfiles'
|
||||
key_actions = 'actions'
|
||||
key_dotpath = 'dotpath'
|
||||
key_profiles = 'profiles'
|
||||
key_profiles_dots = 'dotfiles'
|
||||
key_dotfiles_src = 'src'
|
||||
key_dotfiles_dst = 'dst'
|
||||
key_dotfiles_link = 'link'
|
||||
@@ -53,8 +54,22 @@ class Cfg:
|
||||
if self.key_dotfiles not in self.content:
|
||||
self.log.err('missing \"%s\" in config' % (self.key_dotfiles))
|
||||
return False
|
||||
if self.content[self.key_profiles]:
|
||||
one = list(self.content[self.key_profiles].keys())[0]
|
||||
if self.key_profiles_dots not in \
|
||||
self.content[self.key_profiles][one]:
|
||||
self._migrate_conf()
|
||||
return True
|
||||
|
||||
def _migrate_conf(self):
|
||||
""" make sure dotfiles are in a sub
|
||||
"dotfiles" entry in profiles (#12) """
|
||||
new = {}
|
||||
for k, v in self.content[self.key_profiles].items():
|
||||
new[k] = {self.key_profiles_dots: v}
|
||||
self.content[self.key_profiles] = new
|
||||
self._save(self.content, self.cfgpath)
|
||||
|
||||
def _parse_actions(self, actions, entries):
|
||||
""" parse actions specified for an element """
|
||||
res = []
|
||||
@@ -77,6 +92,7 @@ class Cfg:
|
||||
self.profiles = self.content[self.key_profiles]
|
||||
if self.profiles is None:
|
||||
self.profiles = {}
|
||||
self.content[self.key_profiles] = {}
|
||||
# parse the configs
|
||||
self.configs = self.content[self.key_config]
|
||||
# parse the dotfiles
|
||||
@@ -96,12 +112,15 @@ class Cfg:
|
||||
# attribute dotfiles to each profile
|
||||
for k, v in self.profiles.items():
|
||||
self.prodots[k] = []
|
||||
if v is None:
|
||||
dots = None
|
||||
if self.key_profiles_dots in v:
|
||||
dots = v[self.key_profiles_dots]
|
||||
if dots is None:
|
||||
continue
|
||||
if len(v) == 1 and v == [self.key_all]:
|
||||
if len(dots) == 1 and dots == [self.key_all]:
|
||||
self.prodots[k] = self.dotfiles.values()
|
||||
else:
|
||||
self.prodots[k].extend([self.dotfiles[dot] for dot in v])
|
||||
self.prodots[k].extend([self.dotfiles[d] for d in dots])
|
||||
# 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)
|
||||
@@ -131,17 +150,25 @@ class Cfg:
|
||||
self.key_dotfiles_dst: dotfile.dst,
|
||||
self.key_dotfiles_src: dotfile.src
|
||||
}
|
||||
|
||||
if link:
|
||||
dots[dotfile.key][self.key_dotfiles_link] = True
|
||||
|
||||
profiles = self.profiles
|
||||
if profile in profiles and profiles[profile] != [self.key_all]:
|
||||
if self.content[self.key_profiles][profile] is None:
|
||||
self.content[self.key_profiles][profile] = []
|
||||
self.content[self.key_profiles][profile].append(dotfile.key)
|
||||
if profile in profiles and \
|
||||
profiles[profile][self.key_profiles_dots] != [self.key_all]:
|
||||
# existing profile and not ALL
|
||||
pro = self.content[self.key_profiles][profile]
|
||||
if not pro[self.key_profiles_dots]:
|
||||
pro[self.key_profiles_dots] = []
|
||||
pro[self.key_profiles_dots].append(dotfile.key)
|
||||
elif profile not in profiles:
|
||||
if self.content[self.key_profiles] is None:
|
||||
self.content[self.key_profiles] = {}
|
||||
self.content[self.key_profiles][profile] = [dotfile.key]
|
||||
# new profile
|
||||
if profile not in self.content[self.key_profiles]:
|
||||
self.content[self.key_profiles][profile] = {}
|
||||
pro = self.content[self.key_profiles][profile]
|
||||
pro[self.key_profiles_dots] = [dotfile.key]
|
||||
# assign profiles to the content
|
||||
self.profiles = self.content[self.key_profiles]
|
||||
|
||||
def get_dotfiles(self, profile):
|
||||
@@ -173,9 +200,14 @@ class Cfg:
|
||||
# temporary reset dotpath
|
||||
tmp = self.configs[self.key_dotpath]
|
||||
self.configs[self.key_dotpath] = self.curdotpath
|
||||
with open(self.cfgpath, 'w') as f:
|
||||
ret = yaml.dump(self.content, f,
|
||||
default_flow_style=False, indent=2)
|
||||
ret = self._save(self.content, self.cfgpath)
|
||||
# restore dotpath
|
||||
self.configs[self.key_dotpath] = tmp
|
||||
return ret
|
||||
|
||||
def _save(self, content, path):
|
||||
ret = False
|
||||
with open(path, 'w') as f:
|
||||
ret = yaml.dump(content, f,
|
||||
default_flow_style=False, indent=2)
|
||||
return ret
|
||||
|
||||
Reference in New Issue
Block a user