mirror of
https://github.com/deadc0de6/dotdrop.git
synced 2026-02-10 04:34:16 +00:00
128
CONTRIBUTING.md
128
CONTRIBUTING.md
@@ -1,3 +1,17 @@
|
|||||||
|
Content
|
||||||
|
|
||||||
|
* [code base](#code-base)
|
||||||
|
* [config parsing](#config-parsing)
|
||||||
|
* [lower layer](#lower-layer)
|
||||||
|
* [higher layer](#higher-layer)
|
||||||
|
* [Precedence](#precedence)
|
||||||
|
* [variables resolution](#variables-resolution)
|
||||||
|
* [rules](#rules)
|
||||||
|
* [testing](#testing)
|
||||||
|
* [testing with unittest](#testing-with-unittest)
|
||||||
|
* [testing with bash scripts](#testing-with-bash-scripts)
|
||||||
|
* [documentation](#documentation)
|
||||||
|
|
||||||
Thanks for helping out!
|
Thanks for helping out!
|
||||||
|
|
||||||
Feature requests, bug reports and PRs are always welcome!
|
Feature requests, bug reports and PRs are always welcome!
|
||||||
@@ -6,9 +20,9 @@ This file provides a few pointers on how to contribute to dotdrop
|
|||||||
and where to find information. For any question, feel free to open an issue.
|
and where to find information. For any question, feel free to open an issue.
|
||||||
|
|
||||||
For PR adding new features, I'd be very thankful if you could add either
|
For PR adding new features, I'd be very thankful if you could add either
|
||||||
a unittest testing the added feature or a bash script test, thanks!
|
a unittest testing the added feature or a bash script test ((see [testing](#testing), thanks!
|
||||||
|
|
||||||
# Code base
|
# code base
|
||||||
|
|
||||||
Dotdrop's code base is located in the [dotdrop directory](/dotdrop).
|
Dotdrop's code base is located in the [dotdrop directory](/dotdrop).
|
||||||
|
|
||||||
@@ -32,20 +46,24 @@ Here's an overview of the different files and their role:
|
|||||||
* **updater.py**: the class handling the update of dotfiles for `update`
|
* **updater.py**: the class handling the update of dotfiles for `update`
|
||||||
* **utils.py**: some useful methods
|
* **utils.py**: some useful methods
|
||||||
|
|
||||||
## Config parsing
|
# config parsing
|
||||||
|
|
||||||
The configuration file (yaml) is parsed in two layers:
|
The configuration file (yaml) is parsed using two layers:
|
||||||
|
|
||||||
* the lower layer in `cfg_yaml.py`
|
* first in the lower layer in [cfg_yaml.py](/dotdrop/cfg_yaml.py)
|
||||||
* the higher layer in `cfg_aggregator.py`
|
* then in the higher layer in [cfg_aggregator.py](/dotdrop/cfg_aggregator.py)
|
||||||
|
|
||||||
Only the higher layer is accessible to other classes of dotdrop.
|
Only the higher layer is accessible to other classes of dotdrop.
|
||||||
|
|
||||||
The lower layer part is only taking care of basic types and
|
## lower layer
|
||||||
does the following:
|
|
||||||
|
This is done in [cfg_yaml.py](/dotdrop/cfg_yaml.py)
|
||||||
|
|
||||||
|
The lower layer part is only taking care of basic types
|
||||||
|
and does the following:
|
||||||
* normalize all config entries
|
* normalize all config entries
|
||||||
* resolve paths (dotfiles src, dotpath, etc)
|
* resolve paths (dotfiles src, dotpath, etc)
|
||||||
* refactor actions to a common format
|
* refactor actions/transformations to a common format
|
||||||
* etc
|
* etc
|
||||||
* import any data from external files (configs, variables, etc)
|
* import any data from external files (configs, variables, etc)
|
||||||
* apply variable substitutions
|
* apply variable substitutions
|
||||||
@@ -55,11 +73,14 @@ does the following:
|
|||||||
* fix any deprecated entries (link_by_default, etc)
|
* fix any deprecated entries (link_by_default, etc)
|
||||||
* clear empty entries
|
* clear empty entries
|
||||||
|
|
||||||
In the end it makes sure the dictionary (or parts of it) accessed
|
In the end it builds a cleaned and normalized dictionary to be accessed by the higher layer.
|
||||||
by the higher layer is clean and normalized.
|
|
||||||
|
## higher layer
|
||||||
|
|
||||||
|
This is done in [cfg_aggregator.py](/dotdrop/cfg_aggregator.py)
|
||||||
|
|
||||||
The higher layer will transform the dictionary parsed by the lower layer
|
The higher layer will transform the dictionary parsed by the lower layer
|
||||||
into objects (profiles, dotfiles, actions, etc).
|
into objects (profiles, dotfiles, actions, transformations, etc).
|
||||||
The higher layer has no notion of inclusion (profile included for example) or
|
The higher layer has no notion of inclusion (profile included for example) or
|
||||||
file importing (import actions, etc) or even interpreted variables
|
file importing (import actions, etc) or even interpreted variables
|
||||||
(it only sees variables that have already been interpreted).
|
(it only sees variables that have already been interpreted).
|
||||||
@@ -74,37 +95,70 @@ example) won't be *seen* by the higher layer until the config is reloaded. Consi
|
|||||||
`dirty` flag as a sign the file needs to be written and its representation in higher
|
`dirty` flag as a sign the file needs to be written and its representation in higher
|
||||||
levels in not accurate anymore.
|
levels in not accurate anymore.
|
||||||
|
|
||||||
## Variables resolution
|
## precedence
|
||||||
|
|
||||||
How variables are resolved (pass through jinja2's
|
|
||||||
templating function) in the config file.
|
|
||||||
|
|
||||||
* resolve `include` (the below merge is temporary just to resolve the `includes`)
|
|
||||||
* `variables` and `dynvariables` are first merged and recursively resolved
|
|
||||||
* `dynvariables` are executed
|
|
||||||
* they are all merged and `include` paths are resolved
|
|
||||||
(allows to use something like `include {{@@ os @@}}.variables.yaml`)
|
|
||||||
* `variables` and profile's `variables` are merged
|
|
||||||
* `dynvariables` and profile's `dynvariables` are merged
|
|
||||||
* `dynvariables` are executed
|
|
||||||
* they are all merged into the final *local* `variables`
|
|
||||||
|
|
||||||
These are then used to resolve different elements in the config file:
|
|
||||||
see [this](https://github.com/deadc0de6/dotdrop/wiki/config-variables#config-available-variables)
|
|
||||||
|
|
||||||
Then additional variables (`import_variables` and `import_configs`) are
|
|
||||||
then merged and take precedence over local variables.
|
|
||||||
|
|
||||||
Note:
|
|
||||||
|
|
||||||
* `dynvariables` > `variables`
|
* `dynvariables` > `variables`
|
||||||
* profile `(dyn)variables` > any other `(dyn)variables`
|
* profile `(dyn)variables` > any other `(dyn)variables`
|
||||||
* profile `(dyn)variables` > profile's included `(dyn)variables`
|
* profile `(dyn)variables` > profile's included `(dyn)variables`
|
||||||
* imported `variables`/`dynvariables` > `(dyn)variables`
|
* imported `variables`/`dynvariables` > `(dyn)variables`
|
||||||
* actions/transformations using variables are resolved at runtime
|
|
||||||
|
## variables resolution
|
||||||
|
|
||||||
|
How variables are resolved (through jinja2's
|
||||||
|
templating) in the config file.
|
||||||
|
|
||||||
|
* resolve main config file variables
|
||||||
|
* merge `variables` and `dynvariables` (allowing cycling reference)
|
||||||
|
* recursively template merged `variables` and `dynvariables`
|
||||||
|
* `dynvariables` are executed
|
||||||
|
* profile's `variables` and `dynvariables` are merged
|
||||||
|
* resolve *included* entries (see below)
|
||||||
|
* paths and entries are templated
|
||||||
|
(allows to use something like `include {{@@ os @@}}.variables.yaml`)
|
||||||
|
* *included* entries are processed
|
||||||
|
* dyn-/variables are all resolved in their own file
|
||||||
|
|
||||||
|
potential *included* entries
|
||||||
|
|
||||||
|
* entry *import_actions*
|
||||||
|
* entry *import_configs*
|
||||||
|
* entry *import_variables*
|
||||||
|
* profile's *import*
|
||||||
|
* profile's *include
|
||||||
|
|
||||||
|
Variables are then used to resolve different elements in the config file:
|
||||||
|
see [this](https://github.com/deadc0de6/dotdrop/wiki/config-variables#config-available-variables)
|
||||||
|
|
||||||
|
## rules
|
||||||
|
|
||||||
|
* `dynvariables` are executed in their own config file
|
||||||
|
* since `variables` and `dynvariables` are templated before the `dynvariables`
|
||||||
|
are executed, this means that `dynvariables` can safely reference `variables` however
|
||||||
|
`variables` referencing `dynvariables` will result with the *not-executed* value of the
|
||||||
|
referenced `dynvariables` (see examples below)
|
||||||
|
* profile cannot include profiles defined above in the import tree
|
||||||
|
* config files do not have access to variables defined above in the import tree
|
||||||
|
* actions/transformations using variables are resolved at runtime
|
||||||
(when action/transformation is executed) and not when loading the config
|
(when action/transformation is executed) and not when loading the config
|
||||||
|
|
||||||
# Testing
|
This will result with `dvar0 = "test"` and `var0 = "echo test"` (**not** `var0 = test`)
|
||||||
|
```yaml
|
||||||
|
variables:
|
||||||
|
var0: "{{@@ dvar0 @@}}"
|
||||||
|
dynvariables:
|
||||||
|
dvar0: "echo test"
|
||||||
|
```
|
||||||
|
|
||||||
|
This will result with `dvar0 = "test"` and `var0 = "test"`
|
||||||
|
```yaml
|
||||||
|
variables:
|
||||||
|
var0: "test"
|
||||||
|
dynvariables:
|
||||||
|
dvar0: "echo {{@@ var0 @@}}"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
# testing
|
||||||
|
|
||||||
Dotdrop is tested with the use of the [tests.sh](/tests.sh) script.
|
Dotdrop is tested with the use of the [tests.sh](/tests.sh) script.
|
||||||
|
|
||||||
@@ -129,6 +183,6 @@ for different use-cases (usually described in their filename).
|
|||||||
Each script starts with the same boiler plate code that you can paste at the
|
Each script starts with the same boiler plate code that you can paste at the
|
||||||
start of your new test (see the head of the file down to `# this is the test`).
|
start of your new test (see the head of the file down to `# this is the test`).
|
||||||
|
|
||||||
# Documentation
|
# documentation
|
||||||
|
|
||||||
Most of dotdrop documentation is hosted in [its wiki](https://github.com/deadc0de6/dotdrop/wiki)
|
Most of dotdrop documentation is hosted in [its wiki](https://github.com/deadc0de6/dotdrop/wiki)
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ Features:
|
|||||||
|
|
||||||
Check also the [blog post](https://deadc0de.re/articles/dotfiles.html),
|
Check also the [blog post](https://deadc0de.re/articles/dotfiles.html),
|
||||||
the [example](#getting-started), the [wiki](https://github.com/deadc0de6/dotdrop/wiki) or
|
the [example](#getting-started), the [wiki](https://github.com/deadc0de6/dotdrop/wiki) or
|
||||||
how [people are using dotdrop](https://github.com/deadc0de6/dotdrop/wiki/people-using-dotdrop)
|
how [people are using dotdrop](https://github.com/deadc0de6/dotdrop/wiki/meta-people-using-dotdrop)
|
||||||
for more.
|
for more.
|
||||||
|
|
||||||
Quick start:
|
Quick start:
|
||||||
@@ -261,8 +261,8 @@ That's it, a single repository with all your dotfiles for your different hosts.
|
|||||||
|
|
||||||
You can then
|
You can then
|
||||||
|
|
||||||
* [create actions](https://github.com/deadc0de6/dotdrop/wiki/usage-actions)
|
* [create actions](https://github.com/deadc0de6/dotdrop/wiki/config-actions)
|
||||||
* [use transformations](https://github.com/deadc0de6/dotdrop/wiki/usage-transformations)
|
* [use transformations](https://github.com/deadc0de6/dotdrop/wiki/config-transformations)
|
||||||
* [use variables](https://github.com/deadc0de6/dotdrop/wiki/config-variables)
|
* [use variables](https://github.com/deadc0de6/dotdrop/wiki/config-variables)
|
||||||
* [symlink dotfiles](https://github.com/deadc0de6/dotdrop/wiki/symlinked-dotfiles)
|
* [symlink dotfiles](https://github.com/deadc0de6/dotdrop/wiki/symlinked-dotfiles)
|
||||||
* [and more](https://github.com/deadc0de6/dotdrop/wiki)
|
* [and more](https://github.com/deadc0de6/dotdrop/wiki)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import os
|
|||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from dotdrop.dictparser import DictParser
|
from dotdrop.dictparser import DictParser
|
||||||
|
from dotdrop.exceptions import UndefinedException
|
||||||
|
|
||||||
|
|
||||||
class Cmd(DictParser):
|
class Cmd(DictParser):
|
||||||
@@ -32,7 +33,12 @@ class Cmd(DictParser):
|
|||||||
ret = 1
|
ret = 1
|
||||||
action = self.action
|
action = self.action
|
||||||
if templater:
|
if templater:
|
||||||
action = templater.generate_string(self.action)
|
try:
|
||||||
|
action = templater.generate_string(self.action)
|
||||||
|
except UndefinedException as e:
|
||||||
|
err = 'bad {}: {}'.format(self.descr, e)
|
||||||
|
self.log.warn(err)
|
||||||
|
return False
|
||||||
if debug:
|
if debug:
|
||||||
self.log.dbg('{}:'.format(self.descr))
|
self.log.dbg('{}:'.format(self.descr))
|
||||||
self.log.dbg(' - raw \"{}\"'.format(self.action))
|
self.log.dbg(' - raw \"{}\"'.format(self.action))
|
||||||
@@ -42,7 +48,12 @@ class Cmd(DictParser):
|
|||||||
if self.args:
|
if self.args:
|
||||||
args = self.args
|
args = self.args
|
||||||
if templater:
|
if templater:
|
||||||
args = [templater.generate_string(a) for a in args]
|
try:
|
||||||
|
args = [templater.generate_string(a) for a in args]
|
||||||
|
except UndefinedException as e:
|
||||||
|
err = 'bad arguments for {}: {}'.format(self.descr, e)
|
||||||
|
self.log.warn(err)
|
||||||
|
return False
|
||||||
if debug and args:
|
if debug and args:
|
||||||
self.log.dbg('action args:')
|
self.log.dbg('action args:')
|
||||||
for cnt, arg in enumerate(args):
|
for cnt, arg in enumerate(args):
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from dotdrop.profile import Profile
|
|||||||
from dotdrop.action import Action, Transform
|
from dotdrop.action import Action, Transform
|
||||||
from dotdrop.logger import Logger
|
from dotdrop.logger import Logger
|
||||||
from dotdrop.utils import strip_home
|
from dotdrop.utils import strip_home
|
||||||
|
from dotdrop.exceptions import UndefinedException
|
||||||
|
|
||||||
|
|
||||||
TILD = '~'
|
TILD = '~'
|
||||||
@@ -77,7 +78,7 @@ class CfgAggregator:
|
|||||||
self._debug_list('trans_w', self.trans_w)
|
self._debug_list('trans_w', self.trans_w)
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
self.variables = self.cfgyaml.get_variables()
|
self.variables = self.cfgyaml.variables
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self._debug_dict('variables', self.variables)
|
self._debug_dict('variables', self.variables)
|
||||||
|
|
||||||
@@ -134,8 +135,9 @@ class CfgAggregator:
|
|||||||
objects.append(o)
|
objects.append(o)
|
||||||
if not islist:
|
if not islist:
|
||||||
objects = objects[0]
|
objects = objects[0]
|
||||||
if self.debug:
|
# if self.debug:
|
||||||
self.log.dbg('patching {}.{} with {}'.format(c, keys, objects))
|
# er = 'patching {}.{} with {}'
|
||||||
|
# self.log.dbg(er.format(c, keys, objects))
|
||||||
setattr(c, keys, objects)
|
setattr(c, keys, objects)
|
||||||
|
|
||||||
def del_dotfile(self, dotfile):
|
def del_dotfile(self, dotfile):
|
||||||
@@ -281,7 +283,12 @@ class CfgAggregator:
|
|||||||
@src: dotfile src (in dotpath)
|
@src: dotfile src (in dotpath)
|
||||||
@dst: dotfile dst (on filesystem)
|
@dst: dotfile dst (on filesystem)
|
||||||
"""
|
"""
|
||||||
src = self.cfgyaml.resolve_dotfile_src(src)
|
try:
|
||||||
|
src = self.cfgyaml.resolve_dotfile_src(src)
|
||||||
|
except UndefinedException as e:
|
||||||
|
err = 'unable to resolve {}: {}'
|
||||||
|
self.log.err(err.format(src, e))
|
||||||
|
return None
|
||||||
dotfiles = self.get_dotfile_by_dst(dst)
|
dotfiles = self.get_dotfile_by_dst(dst)
|
||||||
for d in dotfiles:
|
for d in dotfiles:
|
||||||
if d.src == src:
|
if d.src == src:
|
||||||
|
|||||||
1365
dotdrop/cfg_yaml.py
1365
dotdrop/cfg_yaml.py
File diff suppressed because it is too large
Load Diff
@@ -20,7 +20,7 @@ from dotdrop.comparator import Comparator
|
|||||||
from dotdrop.utils import get_tmpdir, remove, strip_home, \
|
from dotdrop.utils import get_tmpdir, remove, strip_home, \
|
||||||
run, uniq_list, patch_ignores, dependencies_met
|
run, uniq_list, patch_ignores, dependencies_met
|
||||||
from dotdrop.linktypes import LinkTypes
|
from dotdrop.linktypes import LinkTypes
|
||||||
from dotdrop.exceptions import YamlException
|
from dotdrop.exceptions import YamlException, UndefinedException
|
||||||
|
|
||||||
LOG = Logger()
|
LOG = Logger()
|
||||||
TRANS_SUFFIX = 'trans'
|
TRANS_SUFFIX = 'trans'
|
||||||
@@ -230,6 +230,7 @@ def cmd_compare(o, tmp):
|
|||||||
newvars = dotfile.get_dotfile_variables()
|
newvars = dotfile.get_dotfile_variables()
|
||||||
t.add_tmp_vars(newvars=newvars)
|
t.add_tmp_vars(newvars=newvars)
|
||||||
|
|
||||||
|
# dotfiles does not exist / not installed
|
||||||
if o.debug:
|
if o.debug:
|
||||||
LOG.dbg('comparing {}'.format(dotfile))
|
LOG.dbg('comparing {}'.format(dotfile))
|
||||||
src = dotfile.src
|
src = dotfile.src
|
||||||
@@ -239,9 +240,9 @@ def cmd_compare(o, tmp):
|
|||||||
same = False
|
same = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# apply transformation
|
||||||
tmpsrc = None
|
tmpsrc = None
|
||||||
if dotfile.trans_r:
|
if dotfile.trans_r:
|
||||||
# apply transformation
|
|
||||||
if o.debug:
|
if o.debug:
|
||||||
LOG.dbg('applying transformation before comparing')
|
LOG.dbg('applying transformation before comparing')
|
||||||
tmpsrc = apply_trans(o.dotpath, dotfile, t, debug=o.debug)
|
tmpsrc = apply_trans(o.dotpath, dotfile, t, debug=o.debug)
|
||||||
@@ -261,20 +262,26 @@ def cmd_compare(o, tmp):
|
|||||||
LOG.dbg('points to itself')
|
LOG.dbg('points to itself')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# install dotfile to temporary dir
|
# install dotfile to temporary dir and compare
|
||||||
ret, insttmp = inst.install_to_temp(t, tmp, src, dotfile.dst)
|
ret, err, insttmp = inst.install_to_temp(t, tmp, src, dotfile.dst)
|
||||||
if not ret:
|
if not ret:
|
||||||
# failed to install to tmp
|
# failed to install to tmp
|
||||||
|
line = '=> compare {}: error'
|
||||||
|
LOG.log(line.format(dotfile.key, err))
|
||||||
|
LOG.err(err)
|
||||||
same = False
|
same = False
|
||||||
continue
|
continue
|
||||||
ignores = list(set(o.compare_ignore + dotfile.cmpignore))
|
ignores = list(set(o.compare_ignore + dotfile.cmpignore))
|
||||||
ignores = patch_ignores(ignores, dotfile.dst, debug=o.debug)
|
ignores = patch_ignores(ignores, dotfile.dst, debug=o.debug)
|
||||||
diff = comp.compare(insttmp, dotfile.dst, ignore=ignores)
|
diff = comp.compare(insttmp, dotfile.dst, ignore=ignores)
|
||||||
|
|
||||||
|
# clean tmp transformed dotfile if any
|
||||||
if tmpsrc:
|
if tmpsrc:
|
||||||
# clean tmp transformed dotfile if any
|
|
||||||
tmpsrc = os.path.join(o.dotpath, tmpsrc)
|
tmpsrc = os.path.join(o.dotpath, tmpsrc)
|
||||||
if os.path.exists(tmpsrc):
|
if os.path.exists(tmpsrc):
|
||||||
remove(tmpsrc)
|
remove(tmpsrc)
|
||||||
|
|
||||||
|
# print diff result
|
||||||
if diff == '':
|
if diff == '':
|
||||||
if o.debug:
|
if o.debug:
|
||||||
line = '=> compare {}: diffing with \"{}\"'
|
line = '=> compare {}: diffing with \"{}\"'
|
||||||
@@ -655,7 +662,10 @@ def main():
|
|||||||
try:
|
try:
|
||||||
o = Options()
|
o = Options()
|
||||||
except YamlException as e:
|
except YamlException as e:
|
||||||
LOG.err('config file error: {}'.format(str(e)))
|
LOG.err('config error: {}'.format(str(e)))
|
||||||
|
return False
|
||||||
|
except UndefinedException as e:
|
||||||
|
LOG.err('config error: {}'.format(str(e)))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if o.debug:
|
if o.debug:
|
||||||
|
|||||||
@@ -9,3 +9,8 @@ diverse exceptions
|
|||||||
class YamlException(Exception):
|
class YamlException(Exception):
|
||||||
"""exception in CfgYaml"""
|
"""exception in CfgYaml"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class UndefinedException(Exception):
|
||||||
|
"""exception in templating"""
|
||||||
|
pass
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import errno
|
|||||||
from dotdrop.logger import Logger
|
from dotdrop.logger import Logger
|
||||||
from dotdrop.templategen import Templategen
|
from dotdrop.templategen import Templategen
|
||||||
import dotdrop.utils as utils
|
import dotdrop.utils as utils
|
||||||
|
from dotdrop.exceptions import UndefinedException
|
||||||
|
|
||||||
|
|
||||||
class Installer:
|
class Installer:
|
||||||
@@ -239,7 +240,6 @@ class Installer:
|
|||||||
actionexec = None
|
actionexec = None
|
||||||
else:
|
else:
|
||||||
if err:
|
if err:
|
||||||
return ret, err
|
|
||||||
return self._log_install(ret, err)
|
return self._log_install(ret, err)
|
||||||
|
|
||||||
return self._log_install(installed > 0, None)
|
return self._log_install(installed > 0, None)
|
||||||
@@ -325,8 +325,12 @@ class Installer:
|
|||||||
err = 'dotfile points to itself: {}'.format(dst)
|
err = 'dotfile points to itself: {}'.format(dst)
|
||||||
return False, err
|
return False, err
|
||||||
saved = templater.add_tmp_vars(self._get_tmp_file_vars(src, dst))
|
saved = templater.add_tmp_vars(self._get_tmp_file_vars(src, dst))
|
||||||
content = templater.generate(src)
|
try:
|
||||||
templater.restore_vars(saved)
|
content = templater.generate(src)
|
||||||
|
except UndefinedException as e:
|
||||||
|
return False, str(e)
|
||||||
|
finally:
|
||||||
|
templater.restore_vars(saved)
|
||||||
if noempty and utils.content_empty(content):
|
if noempty and utils.content_empty(content):
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.log.dbg('ignoring empty template: {}'.format(src))
|
self.log.dbg('ignoring empty template: {}'.format(src))
|
||||||
@@ -547,9 +551,10 @@ class Installer:
|
|||||||
src = os.path.expanduser(src)
|
src = os.path.expanduser(src)
|
||||||
dst = os.path.expanduser(dst)
|
dst = os.path.expanduser(dst)
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.log.dbg('tmp install {} to {}'.format(src, dst))
|
self.log.dbg('tmp install {} (defined dst: {})'.format(src, dst))
|
||||||
# install the dotfile to a temp directory for comparing
|
# install the dotfile to a temp directory for comparing
|
||||||
ret, tmpdst = self._install_to_temp(templater, src, dst, tmpdir)
|
r, tmpdst = self._install_to_temp(templater, src, dst, tmpdir)
|
||||||
|
ret, err = r
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.log.dbg('tmp installed in {}'.format(tmpdst))
|
self.log.dbg('tmp installed in {}'.format(tmpdst))
|
||||||
# reset flags
|
# reset flags
|
||||||
@@ -557,4 +562,4 @@ class Installer:
|
|||||||
self.diff = diffsaved
|
self.diff = diffsaved
|
||||||
self.comparing = False
|
self.comparing = False
|
||||||
self.create = createsaved
|
self.create = createsaved
|
||||||
return ret, tmpdst
|
return ret, err, tmpdst
|
||||||
|
|||||||
@@ -109,9 +109,11 @@ class Options(AttrMonitor):
|
|||||||
"""constructor
|
"""constructor
|
||||||
@args: argument dictionary (if None use sys)
|
@args: argument dictionary (if None use sys)
|
||||||
"""
|
"""
|
||||||
self.args = args
|
self.args = {}
|
||||||
if not args:
|
if not args:
|
||||||
self.args = docopt(USAGE, version=VERSION)
|
self.args = docopt(USAGE, version=VERSION)
|
||||||
|
if args:
|
||||||
|
self.args = args.copy()
|
||||||
self.log = Logger()
|
self.log = Logger()
|
||||||
self.debug = self.args['--verbose'] or ENV_DEBUG in os.environ
|
self.debug = self.args['--verbose'] or ENV_DEBUG in os.environ
|
||||||
self.dry = self.args['--dry']
|
self.dry = self.args['--dry']
|
||||||
@@ -122,6 +124,7 @@ class Options(AttrMonitor):
|
|||||||
self.confpath = self._get_config_path()
|
self.confpath = self._get_config_path()
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.log.dbg('version: {}'.format(VERSION))
|
self.log.dbg('version: {}'.format(VERSION))
|
||||||
|
self.log.dbg('command: {}'.format(' '.join(sys.argv)))
|
||||||
self.log.dbg('config file: {}'.format(self.confpath))
|
self.log.dbg('config file: {}'.format(self.confpath))
|
||||||
|
|
||||||
self._read_config()
|
self._read_config()
|
||||||
|
|||||||
@@ -7,12 +7,16 @@ jinja2 template generator
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
from jinja2 import Environment, FileSystemLoader, \
|
from jinja2 import Environment, FileSystemLoader, \
|
||||||
ChoiceLoader, FunctionLoader, TemplateNotFound
|
ChoiceLoader, FunctionLoader, TemplateNotFound, \
|
||||||
|
StrictUndefined
|
||||||
|
from jinja2.exceptions import UndefinedError
|
||||||
|
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
import dotdrop.utils as utils
|
import dotdrop.utils as utils
|
||||||
from dotdrop.logger import Logger
|
from dotdrop.logger import Logger
|
||||||
import dotdrop.jhelpers as jhelpers
|
import dotdrop.jhelpers as jhelpers
|
||||||
|
from dotdrop.exceptions import UndefinedException
|
||||||
|
|
||||||
BLOCK_START = '{%@@'
|
BLOCK_START = '{%@@'
|
||||||
BLOCK_END = '@@%}'
|
BLOCK_END = '@@%}'
|
||||||
@@ -36,6 +40,7 @@ class Templategen:
|
|||||||
self.base = base.rstrip(os.sep)
|
self.base = base.rstrip(os.sep)
|
||||||
self.debug = debug
|
self.debug = debug
|
||||||
self.log = Logger()
|
self.log = Logger()
|
||||||
|
self.variables = {}
|
||||||
loader1 = FileSystemLoader(self.base)
|
loader1 = FileSystemLoader(self.base)
|
||||||
loader2 = FunctionLoader(self._template_loader)
|
loader2 = FunctionLoader(self._template_loader)
|
||||||
loader = ChoiceLoader([loader1, loader2])
|
loader = ChoiceLoader([loader1, loader2])
|
||||||
@@ -47,11 +52,14 @@ class Templategen:
|
|||||||
variable_start_string=VAR_START,
|
variable_start_string=VAR_START,
|
||||||
variable_end_string=VAR_END,
|
variable_end_string=VAR_END,
|
||||||
comment_start_string=COMMENT_START,
|
comment_start_string=COMMENT_START,
|
||||||
comment_end_string=COMMENT_END)
|
comment_end_string=COMMENT_END,
|
||||||
|
undefined=StrictUndefined)
|
||||||
|
|
||||||
# adding variables
|
# adding variables
|
||||||
self.env.globals['env'] = os.environ
|
self.variables['env'] = os.environ
|
||||||
if variables:
|
if variables:
|
||||||
self.env.globals.update(variables)
|
self.variables.update(variables)
|
||||||
|
|
||||||
# adding header method
|
# adding header method
|
||||||
self.env.globals['header'] = self._header
|
self.env.globals['header'] = self._header
|
||||||
# adding helper methods
|
# adding helper methods
|
||||||
@@ -72,32 +80,48 @@ class Templategen:
|
|||||||
self._debug_dict('template additional variables', variables)
|
self._debug_dict('template additional variables', variables)
|
||||||
|
|
||||||
def generate(self, src):
|
def generate(self, src):
|
||||||
"""render template from path"""
|
"""
|
||||||
|
render template from path
|
||||||
|
may raise a UndefinedException
|
||||||
|
in case a variable is undefined
|
||||||
|
"""
|
||||||
if not os.path.exists(src):
|
if not os.path.exists(src):
|
||||||
return ''
|
return ''
|
||||||
return self._handle_file(src)
|
try:
|
||||||
|
return self._handle_file(src)
|
||||||
|
except UndefinedError as e:
|
||||||
|
err = 'undefined variable: {}'.format(e.message)
|
||||||
|
raise UndefinedException(err)
|
||||||
|
|
||||||
def generate_string(self, string):
|
def generate_string(self, string):
|
||||||
"""render template from string"""
|
"""
|
||||||
|
render template from string
|
||||||
|
may raise a UndefinedException
|
||||||
|
in case a variable is undefined
|
||||||
|
"""
|
||||||
if not string:
|
if not string:
|
||||||
return ''
|
return ''
|
||||||
return self.env.from_string(string).render()
|
try:
|
||||||
|
return self.env.from_string(string).render(self.variables)
|
||||||
|
except UndefinedError as e:
|
||||||
|
err = 'undefined variable: {}'.format(e.message)
|
||||||
|
raise UndefinedException(err)
|
||||||
|
|
||||||
def add_tmp_vars(self, newvars={}):
|
def add_tmp_vars(self, newvars={}):
|
||||||
"""add vars to the globals, make sure to call restore_vars"""
|
"""add vars to the globals, make sure to call restore_vars"""
|
||||||
saved_globals = self.env.globals.copy()
|
saved_variables = self.variables.copy()
|
||||||
if not newvars:
|
if not newvars:
|
||||||
return saved_globals
|
return saved_variables
|
||||||
self.env.globals.update(newvars)
|
self.variables.update(newvars)
|
||||||
return saved_globals
|
return saved_variables
|
||||||
|
|
||||||
def restore_vars(self, saved_globals):
|
def restore_vars(self, saved_globals):
|
||||||
"""restore globals from add_tmp_vars"""
|
"""restore globals from add_tmp_vars"""
|
||||||
self.env.globals = saved_globals.copy()
|
self.variables = saved_globals.copy()
|
||||||
|
|
||||||
def update_variables(self, variables):
|
def update_variables(self, variables):
|
||||||
"""update variables"""
|
"""update variables"""
|
||||||
self.env.globals.update(variables)
|
self.variables.update(variables)
|
||||||
|
|
||||||
def _load_path_to_dic(self, path, dic):
|
def _load_path_to_dic(self, path, dic):
|
||||||
mod = utils.get_module_from_path(path)
|
mod = utils.get_module_from_path(path)
|
||||||
@@ -160,7 +184,7 @@ class Templategen:
|
|||||||
template_rel_path = os.path.relpath(src, self.base)
|
template_rel_path = os.path.relpath(src, self.base)
|
||||||
try:
|
try:
|
||||||
template = self.env.get_template(template_rel_path)
|
template = self.env.get_template(template_rel_path)
|
||||||
content = template.render()
|
content = template.render(self.variables)
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
data = self._read_bad_encoded_text(src)
|
data = self._read_bad_encoded_text(src)
|
||||||
content = self.generate_string(data)
|
content = self.generate_string(data)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from dotdrop.logger import Logger
|
|||||||
from dotdrop.templategen import Templategen
|
from dotdrop.templategen import Templategen
|
||||||
from dotdrop.utils import patch_ignores, remove, get_unique_tmp_name, \
|
from dotdrop.utils import patch_ignores, remove, get_unique_tmp_name, \
|
||||||
write_to_tmpfile, must_ignore, mirror_file_rights
|
write_to_tmpfile, must_ignore, mirror_file_rights
|
||||||
|
from dotdrop.exceptions import UndefinedException
|
||||||
|
|
||||||
|
|
||||||
TILD = '~'
|
TILD = '~'
|
||||||
@@ -186,7 +187,11 @@ class Updater:
|
|||||||
if self.debug:
|
if self.debug:
|
||||||
self.log.dbg('{} is a template'.format(dtpath))
|
self.log.dbg('{} is a template'.format(dtpath))
|
||||||
if self.showpatch:
|
if self.showpatch:
|
||||||
self._show_patch(path, dtpath)
|
try:
|
||||||
|
self._show_patch(path, dtpath)
|
||||||
|
except UndefinedException as e:
|
||||||
|
msg = 'unable to show patch for {}: {}'.format(path, e)
|
||||||
|
self.log.warn(msg)
|
||||||
return False
|
return False
|
||||||
if compare and filecmp.cmp(path, dtpath, shallow=False) and \
|
if compare and filecmp.cmp(path, dtpath, shallow=False) and \
|
||||||
self._same_rights(path, dtpath):
|
self._same_rights(path, dtpath):
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -66,9 +67,9 @@ create_conf ${cfg} # sets token
|
|||||||
|
|
||||||
# import
|
# import
|
||||||
echo "[+] import"
|
echo "[+] import"
|
||||||
cd ${ddpath} | ${bin} import -c ${cfg} ${tmpd}/program
|
cd ${ddpath} | ${bin} import --verbose -c ${cfg} ${tmpd}/program || exit 1
|
||||||
cd ${ddpath} | ${bin} import -c ${cfg} ${tmpd}/config
|
cd ${ddpath} | ${bin} import --verbose -c ${cfg} ${tmpd}/config || exit 1
|
||||||
cd ${ddpath} | ${bin} import -c ${cfg} ${tmpd}/vscode
|
cd ${ddpath} | ${bin} import --verbose -c ${cfg} ${tmpd}/vscode || exit 1
|
||||||
|
|
||||||
# add files on filesystem
|
# add files on filesystem
|
||||||
echo "[+] add files"
|
echo "[+] add files"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
102
tests-ng/corner-case.sh
Executable file
102
tests-ng/corner-case.sh
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
|
# Copyright (c) 2019, deadc0de6
|
||||||
|
#
|
||||||
|
# the only purpose is to test corner-cases
|
||||||
|
# not covered by other tests like
|
||||||
|
# dry
|
||||||
|
# diff before write
|
||||||
|
# etc
|
||||||
|
#
|
||||||
|
# returns 1 in case of error
|
||||||
|
#
|
||||||
|
|
||||||
|
# exit on first error
|
||||||
|
#set -e
|
||||||
|
|
||||||
|
# all this crap to get current path
|
||||||
|
rl="readlink -f"
|
||||||
|
if ! ${rl} "${0}" >/dev/null 2>&1; then
|
||||||
|
rl="realpath"
|
||||||
|
|
||||||
|
if ! hash ${rl}; then
|
||||||
|
echo "\"${rl}\" not found !" && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cur=$(dirname "$(${rl} "${0}")")
|
||||||
|
|
||||||
|
#hash dotdrop >/dev/null 2>&1
|
||||||
|
#[ "$?" != "0" ] && echo "install dotdrop to run tests" && exit 1
|
||||||
|
|
||||||
|
#echo "called with ${1}"
|
||||||
|
|
||||||
|
# dotdrop path can be pass as argument
|
||||||
|
ddpath="${cur}/../"
|
||||||
|
[ "${1}" != "" ] && ddpath="${1}"
|
||||||
|
[ ! -d ${ddpath} ] && echo "ddpath \"${ddpath}\" is not a directory" && exit 1
|
||||||
|
|
||||||
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
|
echo "dotdrop path: ${ddpath}"
|
||||||
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|
||||||
|
# get the helpers
|
||||||
|
source ${cur}/helpers
|
||||||
|
|
||||||
|
echo -e "$(tput setaf 6)==> RUNNING $(basename $BASH_SOURCE) <==$(tput sgr0)"
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# this is the test
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
# dotdrop directory
|
||||||
|
basedir=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
echo "[+] dotdrop dir: ${basedir}"
|
||||||
|
echo "[+] dotpath dir: ${basedir}/dotfiles"
|
||||||
|
|
||||||
|
# create the config file
|
||||||
|
cfg="${basedir}/config.yaml"
|
||||||
|
cat > ${cfg} << _EOF
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
dotfiles:
|
||||||
|
f_x:
|
||||||
|
src: /tmp/x
|
||||||
|
dst:
|
||||||
|
f_y:
|
||||||
|
src: /tmp/.i-do-not-exist-dotdrop
|
||||||
|
dst: /tmp/y
|
||||||
|
profiles:
|
||||||
|
p1:
|
||||||
|
dotfiles:
|
||||||
|
- f_x
|
||||||
|
- f_y
|
||||||
|
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
echo "[+] test install dry"
|
||||||
|
cd ${ddpath} | ${bin} install -c ${cfg} --dry -p p1 --verbose f_x
|
||||||
|
[ "$?" != "0" ] && exit 1
|
||||||
|
|
||||||
|
echo "[+] test install show-diff"
|
||||||
|
cd ${ddpath} | ${bin} install -c ${cfg} -p p1 --verbose f_x
|
||||||
|
[ "$?" != "0" ] && exit 1
|
||||||
|
cd ${ddpath} | ${bin} install -D -c ${cfg} -p p1 --verbose f_x
|
||||||
|
[ "$?" != "0" ] && exit 1
|
||||||
|
|
||||||
|
echo "[+] test install not existing src"
|
||||||
|
cd ${ddpath} | ${bin} install -c ${cfg} --dry -p p1 --verbose f_y
|
||||||
|
|
||||||
|
echo "[+] test install to temp"
|
||||||
|
cd ${ddpath} | ${bin} install -t -c ${cfg} -p p1 --verbose f_x
|
||||||
|
[ "$?" != "0" ] && exit 1
|
||||||
|
|
||||||
|
## CLEANING
|
||||||
|
rm -rf ${basedir}
|
||||||
|
|
||||||
|
echo "OK"
|
||||||
|
exit 0
|
||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -67,6 +68,9 @@ dotfiles:
|
|||||||
profiles:
|
profiles:
|
||||||
_EOF
|
_EOF
|
||||||
|
|
||||||
|
export DOTDROP_FORCE_NODEBUG=yes
|
||||||
|
export DOTDROP_NOBANNER=yes
|
||||||
|
|
||||||
# import
|
# import
|
||||||
echo "[+] import"
|
echo "[+] import"
|
||||||
cd ${ddpath} | ${bin} import -c ${cfg} ${tmpd}/singlefile
|
cd ${ddpath} | ${bin} import -c ${cfg} ${tmpd}/singlefile
|
||||||
@@ -74,9 +78,6 @@ cd ${ddpath} | ${bin} import -c ${cfg} ${tmpd}/singlefile
|
|||||||
# modify the file
|
# modify the file
|
||||||
echo "modified" > ${tmpd}/singlefile
|
echo "modified" > ${tmpd}/singlefile
|
||||||
|
|
||||||
# suppressing the banner, so we can compare dotdrop diff with UNIX diff
|
|
||||||
export DOTDROP_NOBANNER=yes
|
|
||||||
|
|
||||||
# default diff (unified)
|
# default diff (unified)
|
||||||
echo "[+] comparing with default diff (unified)"
|
echo "[+] comparing with default diff (unified)"
|
||||||
set +e
|
set +e
|
||||||
@@ -121,7 +122,9 @@ grep fakediff ${tmpd}/fake &> /dev/null || exit 1
|
|||||||
|
|
||||||
## CLEANING
|
## CLEANING
|
||||||
rm -rf ${basedir} ${tmpd}
|
rm -rf ${basedir} ${tmpd}
|
||||||
|
|
||||||
unset DOTDROP_NOBANNER
|
unset DOTDROP_NOBANNER
|
||||||
|
unset DOTDROP_FORCE_NODEBUG
|
||||||
|
|
||||||
echo "OK"
|
echo "OK"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -86,7 +87,7 @@ mkdir -p ${tmpd}/sub/sub
|
|||||||
echo "test2" > ${tmpd}/sub/sub/abc
|
echo "test2" > ${tmpd}/sub/sub/abc
|
||||||
|
|
||||||
# import
|
# import
|
||||||
cd ${ddpath} | ${bin} import -c ${cfg} -p p2 \
|
cd ${ddpath} | ${bin} import --verbose -c ${cfg} -p p2 \
|
||||||
${tmpd}/abc \
|
${tmpd}/abc \
|
||||||
${tmpd}/sub/abc \
|
${tmpd}/sub/abc \
|
||||||
${tmpd}/sub/abc \
|
${tmpd}/sub/abc \
|
||||||
@@ -94,7 +95,7 @@ cd ${ddpath} | ${bin} import -c ${cfg} -p p2 \
|
|||||||
${tmpd}/sub/sub2/abc
|
${tmpd}/sub/sub2/abc
|
||||||
|
|
||||||
# count dotfiles for p2
|
# count dotfiles for p2
|
||||||
cnt=`cd ${ddpath} | ${bin} files -c ${cfg} -p p2 -b | grep '^f_' | wc -l`
|
cnt=`cd ${ddpath} | ${bin} files --verbose -c ${cfg} -p p2 -b | grep '^f_' | wc -l`
|
||||||
[ "${cnt}" != "4" ] && exit 1
|
[ "${cnt}" != "4" ] && exit 1
|
||||||
|
|
||||||
## CLEANING
|
## CLEANING
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -68,10 +69,12 @@ config:
|
|||||||
dotpath: dotfiles
|
dotpath: dotfiles
|
||||||
variables:
|
variables:
|
||||||
var1: "this is some test"
|
var1: "this is some test"
|
||||||
|
var2: "the_dvar4"
|
||||||
dynvariables:
|
dynvariables:
|
||||||
dvar1: head -1 /proc/meminfo
|
dvar1: head -1 /proc/meminfo
|
||||||
dvar2: "echo 'this is some test' | rev | tr ' ' ','"
|
dvar2: "echo 'this is some test' | rev | tr ' ' ','"
|
||||||
dvar3: ${scr}
|
dvar3: ${scr}
|
||||||
|
dvar4: "echo {{@@ var2 @@}} | rev"
|
||||||
dotfiles:
|
dotfiles:
|
||||||
f_abc:
|
f_abc:
|
||||||
dst: ${tmpd}/abc
|
dst: ${tmpd}/abc
|
||||||
@@ -88,17 +91,19 @@ echo "{{@@ var1 @@}}" > ${tmps}/dotfiles/abc
|
|||||||
echo "{{@@ dvar1 @@}}" >> ${tmps}/dotfiles/abc
|
echo "{{@@ dvar1 @@}}" >> ${tmps}/dotfiles/abc
|
||||||
echo "{{@@ dvar2 @@}}" >> ${tmps}/dotfiles/abc
|
echo "{{@@ dvar2 @@}}" >> ${tmps}/dotfiles/abc
|
||||||
echo "{{@@ dvar3 @@}}" >> ${tmps}/dotfiles/abc
|
echo "{{@@ dvar3 @@}}" >> ${tmps}/dotfiles/abc
|
||||||
|
echo "{{@@ dvar4 @@}}" >> ${tmps}/dotfiles/abc
|
||||||
echo "test" >> ${tmps}/dotfiles/abc
|
echo "test" >> ${tmps}/dotfiles/abc
|
||||||
|
|
||||||
# install
|
# install
|
||||||
cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V
|
cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V
|
||||||
|
|
||||||
#cat ${tmpd}/abc
|
cat ${tmpd}/abc
|
||||||
|
|
||||||
grep '^this is some test' ${tmpd}/abc >/dev/null
|
grep '^this is some test' ${tmpd}/abc >/dev/null
|
||||||
grep "^MemTotal" ${tmpd}/abc >/dev/null
|
grep "^MemTotal" ${tmpd}/abc >/dev/null
|
||||||
grep '^tset,emos,si,siht' ${tmpd}/abc >/dev/null
|
grep '^tset,emos,si,siht' ${tmpd}/abc >/dev/null
|
||||||
grep "^${TESTENV}" ${tmpd}/abc > /dev/null
|
grep "^${TESTENV}" ${tmpd}/abc > /dev/null
|
||||||
|
grep '^4ravd_eht' ${tmpd}/abc >/dev/null
|
||||||
|
|
||||||
#cat ${tmpd}/abc
|
#cat ${tmpd}/abc
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -76,7 +77,7 @@ _EOF
|
|||||||
|
|
||||||
# create the dotfile
|
# create the dotfile
|
||||||
mkdir -p ${tmps}/dotfiles/d1
|
mkdir -p ${tmps}/dotfiles/d1
|
||||||
echo "{{@@ var1 @@}}" > ${tmps}/dotfiles/d1/empty
|
echo "{#@@ should be stripped @@#}" > ${tmps}/dotfiles/d1/empty
|
||||||
echo "not empty" > ${tmps}/dotfiles/d1/notempty
|
echo "not empty" > ${tmps}/dotfiles/d1/notempty
|
||||||
|
|
||||||
# install
|
# install
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
113
tests-ng/import-with-empty.sh
Executable file
113
tests-ng/import-with-empty.sh
Executable file
@@ -0,0 +1,113 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
|
# Copyright (c) 2019, deadc0de6
|
||||||
|
#
|
||||||
|
# test import new dotfiles with empty dst/src on existing dotfiles
|
||||||
|
# returns 1 in case of error
|
||||||
|
#
|
||||||
|
|
||||||
|
# exit on first error
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# all this crap to get current path
|
||||||
|
rl="readlink -f"
|
||||||
|
if ! ${rl} "${0}" >/dev/null 2>&1; then
|
||||||
|
rl="realpath"
|
||||||
|
|
||||||
|
if ! hash ${rl}; then
|
||||||
|
echo "\"${rl}\" not found !" && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cur=$(dirname "$(${rl} "${0}")")
|
||||||
|
|
||||||
|
#hash dotdrop >/dev/null 2>&1
|
||||||
|
#[ "$?" != "0" ] && echo "install dotdrop to run tests" && exit 1
|
||||||
|
|
||||||
|
#echo "called with ${1}"
|
||||||
|
|
||||||
|
# dotdrop path can be pass as argument
|
||||||
|
ddpath="${cur}/../"
|
||||||
|
[ "${1}" != "" ] && ddpath="${1}"
|
||||||
|
[ ! -d ${ddpath} ] && echo "ddpath \"${ddpath}\" is not a directory" && exit 1
|
||||||
|
|
||||||
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
|
echo "dotdrop path: ${ddpath}"
|
||||||
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|
||||||
|
# get the helpers
|
||||||
|
source ${cur}/helpers
|
||||||
|
|
||||||
|
echo -e "$(tput setaf 6)==> RUNNING $(basename $BASH_SOURCE) <==$(tput sgr0)"
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# this is the test
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
# dotdrop directory
|
||||||
|
basedir=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
echo "[+] dotdrop dir: ${basedir}"
|
||||||
|
echo "[+] dotpath dir: ${basedir}/dotfiles"
|
||||||
|
# the temp directory
|
||||||
|
tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
|
||||||
|
# create a dotfile
|
||||||
|
dftoimport="${tmpd}/a_dotfile"
|
||||||
|
echo 'some content' > ${dftoimport}
|
||||||
|
|
||||||
|
# create the config file
|
||||||
|
cfg="${basedir}/config.yaml"
|
||||||
|
cat > ${cfg} << _EOF
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
dotfiles:
|
||||||
|
f_x:
|
||||||
|
src: /tmp/x
|
||||||
|
dst:
|
||||||
|
f_y:
|
||||||
|
src:
|
||||||
|
dst: /tmp/y
|
||||||
|
f_z:
|
||||||
|
src:
|
||||||
|
dst:
|
||||||
|
f_l:
|
||||||
|
src:
|
||||||
|
dst:
|
||||||
|
link: link
|
||||||
|
f_lc:
|
||||||
|
src:
|
||||||
|
dst:
|
||||||
|
link: link_children
|
||||||
|
profiles:
|
||||||
|
p1:
|
||||||
|
dotfiles:
|
||||||
|
- f_x
|
||||||
|
- f_y
|
||||||
|
- f_z
|
||||||
|
- f_l
|
||||||
|
- f_lc
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
echo "[+] import"
|
||||||
|
cd ${ddpath} | ${bin} import -c ${cfg} -p p1 --verbose ${dftoimport}
|
||||||
|
[ "$?" != "0" ] && exit 1
|
||||||
|
|
||||||
|
echo "[+] install"
|
||||||
|
cd ${ddpath} | ${bin} install -c ${cfg} -p p1 --verbose | grep '^5 dotfile(s) installed.$'
|
||||||
|
rm -f ${dftoimport}
|
||||||
|
cd ${ddpath} | ${bin} install -c ${cfg} -p p1 --verbose | grep '^6 dotfile(s) installed.$'
|
||||||
|
|
||||||
|
nb=`cd ${ddpath} | ${bin} files -c ${cfg} -p p1 --verbose | grep '^[a-zA-Z]' | wc -l`
|
||||||
|
[ "${nb}" != "6" ] && echo 'error in dotfile list' && exit 1
|
||||||
|
|
||||||
|
#cat ${cfg}
|
||||||
|
|
||||||
|
## CLEANING
|
||||||
|
rm -rf ${basedir} ${tmpd}
|
||||||
|
|
||||||
|
echo "OK"
|
||||||
|
exit 0
|
||||||
@@ -31,6 +31,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
110
tests-ng/imported-variables-from-config.sh
Executable file
110
tests-ng/imported-variables-from-config.sh
Executable file
@@ -0,0 +1,110 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# author: davla (https://github.com/davls)
|
||||||
|
# Copyright (c) 2020, davla
|
||||||
|
#
|
||||||
|
# test variables imported from config and used in the importing yaml config
|
||||||
|
# returns 1 in case of error
|
||||||
|
#
|
||||||
|
|
||||||
|
# exit on first error
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# all this crap to get current path
|
||||||
|
rl="readlink -f"
|
||||||
|
if ! ${rl} "${0}" >/dev/null 2>&1; then
|
||||||
|
rl="realpath"
|
||||||
|
|
||||||
|
if ! hash ${rl}; then
|
||||||
|
echo "\"${rl}\" not found !" && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cur=$(dirname "$(${rl} "${0}")")
|
||||||
|
|
||||||
|
#hash dotdrop >/dev/null 2>&1
|
||||||
|
#[ "$?" != "0" ] && echo "install dotdrop to run tests" && exit 1
|
||||||
|
|
||||||
|
#echo "called with ${1}"
|
||||||
|
|
||||||
|
# dotdrop path can be pass as argument
|
||||||
|
ddpath="${cur}/../"
|
||||||
|
[ "${1}" != "" ] && ddpath="${1}"
|
||||||
|
[ ! -d ${ddpath} ] && echo "ddpath \"${ddpath}\" is not a directory" && exit 1
|
||||||
|
|
||||||
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
|
echo "dotdrop path: ${ddpath}"
|
||||||
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|
||||||
|
# get the helpers
|
||||||
|
source ${cur}/helpers
|
||||||
|
|
||||||
|
echo -e "$(tput setaf 6)==> RUNNING $(basename $BASH_SOURCE) <==$(tput sgr0)"
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# this is the test
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
# the dotfile source
|
||||||
|
tmps=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
mkdir -p ${tmps}/dotfiles
|
||||||
|
# the dotfile destination
|
||||||
|
tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
|
||||||
|
# create the config file
|
||||||
|
cfg="${tmps}/config.yaml"
|
||||||
|
subcfg="${tmps}/subconfig.yaml"
|
||||||
|
|
||||||
|
cat > ${cfg} << _EOF
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
import_configs:
|
||||||
|
- ${subcfg}
|
||||||
|
dotfiles:
|
||||||
|
f_abc:
|
||||||
|
dst: ${tmpd}/abc
|
||||||
|
src: '{{@@ abc_dyn_src @@}}{{@@ abc_src @@}}'
|
||||||
|
profiles:
|
||||||
|
p1:
|
||||||
|
dotfiles:
|
||||||
|
- f_abc
|
||||||
|
_EOF
|
||||||
|
cat ${cfg}
|
||||||
|
|
||||||
|
# create the subconfig file
|
||||||
|
cat > ${subcfg} << _EOF
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
variables:
|
||||||
|
abc_src: c
|
||||||
|
dynvariables:
|
||||||
|
abc_dyn_src: 'echo ab'
|
||||||
|
dotfiles: []
|
||||||
|
profiles: []
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
# create the dotfile
|
||||||
|
dirname ${tmps}/dotfiles/abc | xargs mkdir -p
|
||||||
|
cat > ${tmps}/dotfiles/abc << _EOF
|
||||||
|
Hell yeah
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
# install
|
||||||
|
cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V
|
||||||
|
|
||||||
|
# test file existence and content
|
||||||
|
[ -f "${tmpd}/abc" ] || {
|
||||||
|
echo 'Dotfile not installed'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
## CLEANING
|
||||||
|
rm -rf ${tmps} ${tmpd}
|
||||||
|
|
||||||
|
echo "OK"
|
||||||
|
exit 0
|
||||||
@@ -33,6 +33,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -108,6 +109,9 @@ cd ${ddpath} | ${bin} files -c ${cfg} -p p2 | grep f_abc
|
|||||||
cd ${ddpath} | ${bin} files -c ${cfg} -p p3 | grep f_abc
|
cd ${ddpath} | ${bin} files -c ${cfg} -p p3 | grep f_abc
|
||||||
cd ${ddpath} | ${bin} files -c ${cfg} -p p0 | grep f_abc
|
cd ${ddpath} | ${bin} files -c ${cfg} -p p0 | grep f_abc
|
||||||
|
|
||||||
|
cnt=`cd ${ddpath} | ${bin} files -c ${cfg} -p p0 | grep f_abc | wc -l`
|
||||||
|
[ "${cnt}" != "1" ] && echo "dotfiles displayed more than once" && exit 1
|
||||||
|
|
||||||
# count
|
# count
|
||||||
cnt=`cd ${ddpath} | ${bin} files -c ${cfg} -p p1 -b | grep '^f_' | wc -l`
|
cnt=`cd ${ddpath} | ${bin} files -c ${cfg} -p p1 -b | grep '^f_' | wc -l`
|
||||||
[ "${cnt}" != "1" ] && exit 1
|
[ "${cnt}" != "1" ] && exit 1
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# exit on first error
|
# exit on first error
|
||||||
#set -e
|
set -e
|
||||||
|
|
||||||
# all this crap to get current path
|
# all this crap to get current path
|
||||||
rl="readlink -f"
|
rl="readlink -f"
|
||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -67,17 +68,26 @@ dotfiles:
|
|||||||
f_z:
|
f_z:
|
||||||
src:
|
src:
|
||||||
dst:
|
dst:
|
||||||
|
f_l:
|
||||||
|
src:
|
||||||
|
dst:
|
||||||
|
link: link
|
||||||
|
f_lc:
|
||||||
|
src:
|
||||||
|
dst:
|
||||||
|
link: link_children
|
||||||
profiles:
|
profiles:
|
||||||
p1:
|
p1:
|
||||||
dotfiles:
|
dotfiles:
|
||||||
- f_x
|
- f_x
|
||||||
- f_y
|
- f_y
|
||||||
- f_z
|
- f_z
|
||||||
|
- f_l
|
||||||
|
- f_lc
|
||||||
_EOF
|
_EOF
|
||||||
|
|
||||||
echo "[+] install"
|
echo "[+] install"
|
||||||
cd ${ddpath} | ${bin} install -c ${cfg} -p p1 --verbose | grep '^3 dotfile(s) installed.$'
|
cd ${ddpath} | ${bin} install -c ${cfg} -p p1 --verbose | grep '^5 dotfile(s) installed.$'
|
||||||
[ "$?" != "0" ] && exit 1
|
[ "$?" != "0" ] && exit 1
|
||||||
|
|
||||||
## CLEANING
|
## CLEANING
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -81,7 +82,7 @@ echo "new data" > ${basedir}/dotfiles/${tmpd}/readmes/README.md
|
|||||||
# install
|
# install
|
||||||
rm -rf ${tmpd}
|
rm -rf ${tmpd}
|
||||||
echo "[+] install normal"
|
echo "[+] install normal"
|
||||||
cd ${ddpath} | ${bin} install -c ${cfg} --verbose
|
cd ${ddpath} | ${bin} install --showdiff -c ${cfg} --verbose
|
||||||
[ "$?" != "0" ] && exit 1
|
[ "$?" != "0" ] && exit 1
|
||||||
nb=`find ${tmpd} -iname 'README.md' | wc -l`
|
nb=`find ${tmpd} -iname 'README.md' | wc -l`
|
||||||
echo "(1) found ${nb} README.md file(s)"
|
echo "(1) found ${nb} README.md file(s)"
|
||||||
|
|||||||
89
tests-ng/install-to-temp.sh
Executable file
89
tests-ng/install-to-temp.sh
Executable file
@@ -0,0 +1,89 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
|
# Copyright (c) 2019, deadc0de6
|
||||||
|
#
|
||||||
|
# test install to temp
|
||||||
|
# returns 1 in case of error
|
||||||
|
#
|
||||||
|
|
||||||
|
# exit on first error
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# all this crap to get current path
|
||||||
|
rl="readlink -f"
|
||||||
|
if ! ${rl} "${0}" >/dev/null 2>&1; then
|
||||||
|
rl="realpath"
|
||||||
|
|
||||||
|
if ! hash ${rl}; then
|
||||||
|
echo "\"${rl}\" not found !" && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cur=$(dirname "$(${rl} "${0}")")
|
||||||
|
|
||||||
|
#hash dotdrop >/dev/null 2>&1
|
||||||
|
#[ "$?" != "0" ] && echo "install dotdrop to run tests" && exit 1
|
||||||
|
|
||||||
|
#echo "called with ${1}"
|
||||||
|
|
||||||
|
# dotdrop path can be pass as argument
|
||||||
|
ddpath="${cur}/../"
|
||||||
|
[ "${1}" != "" ] && ddpath="${1}"
|
||||||
|
[ ! -d ${ddpath} ] && echo "ddpath \"${ddpath}\" is not a directory" && exit 1
|
||||||
|
|
||||||
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
|
echo "dotdrop path: ${ddpath}"
|
||||||
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|
||||||
|
# get the helpers
|
||||||
|
source ${cur}/helpers
|
||||||
|
|
||||||
|
echo -e "$(tput setaf 6)==> RUNNING $(basename $BASH_SOURCE) <==$(tput sgr0)"
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# this is the test
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
# dotdrop directory
|
||||||
|
basedir=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
mkdir -p ${basedir}/dotfiles
|
||||||
|
tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
echo "[+] dotdrop dir: ${basedir}"
|
||||||
|
echo "[+] dotpath dir: ${basedir}/dotfiles"
|
||||||
|
|
||||||
|
# create the config file
|
||||||
|
cfg="${basedir}/config.yaml"
|
||||||
|
cat > ${cfg} << _EOF
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
dotfiles:
|
||||||
|
f_x:
|
||||||
|
src: x
|
||||||
|
dst: ${tmpd}/x
|
||||||
|
f_y:
|
||||||
|
src: y
|
||||||
|
dst: ${tmpd}/y
|
||||||
|
link: link
|
||||||
|
profiles:
|
||||||
|
p1:
|
||||||
|
dotfiles:
|
||||||
|
- f_x
|
||||||
|
- f_y
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
echo 'test_x' > ${basedir}/dotfiles/x
|
||||||
|
echo 'test_y' > ${basedir}/dotfiles/y
|
||||||
|
|
||||||
|
echo "[+] install"
|
||||||
|
cd ${ddpath} | ${bin} install -c ${cfg} -p p1 --showdiff --verbose --temp | grep '^2 dotfile(s) installed.$'
|
||||||
|
[ "$?" != "0" ] && exit 1
|
||||||
|
|
||||||
|
## CLEANING
|
||||||
|
rm -rf ${basedir}
|
||||||
|
|
||||||
|
echo "OK"
|
||||||
|
exit 0
|
||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
102
tests-ng/macro-with-globals.sh
Executable file
102
tests-ng/macro-with-globals.sh
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
|
# Copyright (c) 2019, deadc0de6
|
||||||
|
#
|
||||||
|
# import variables from file
|
||||||
|
#
|
||||||
|
|
||||||
|
# exit on first error
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# all this crap to get current path
|
||||||
|
rl="readlink -f"
|
||||||
|
if ! ${rl} "${0}" >/dev/null 2>&1; then
|
||||||
|
rl="realpath"
|
||||||
|
|
||||||
|
if ! hash ${rl}; then
|
||||||
|
echo "\"${rl}\" not found !" && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cur=$(dirname "$(${rl} "${0}")")
|
||||||
|
|
||||||
|
#hash dotdrop >/dev/null 2>&1
|
||||||
|
#[ "$?" != "0" ] && echo "install dotdrop to run tests" && exit 1
|
||||||
|
|
||||||
|
#echo "called with ${1}"
|
||||||
|
|
||||||
|
# dotdrop path can be pass as argument
|
||||||
|
ddpath="${cur}/../"
|
||||||
|
[ "${1}" != "" ] && ddpath="${1}"
|
||||||
|
[ ! -d ${ddpath} ] && echo "ddpath \"${ddpath}\" is not a directory" && exit 1
|
||||||
|
|
||||||
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
|
echo "dotdrop path: ${ddpath}"
|
||||||
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|
||||||
|
# get the helpers
|
||||||
|
source ${cur}/helpers
|
||||||
|
|
||||||
|
echo -e "$(tput setaf 6)==> RUNNING $(basename $BASH_SOURCE) <==$(tput sgr0)"
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# this is the test
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
# the dotfile source
|
||||||
|
tmps=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
mkdir -p ${tmps}/dotfiles
|
||||||
|
# the dotfile destination
|
||||||
|
tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
|
||||||
|
# create the config file
|
||||||
|
cfg="${tmps}/config.yaml"
|
||||||
|
|
||||||
|
cat > ${cfg} << _EOF
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
dotfiles:
|
||||||
|
f_abc:
|
||||||
|
dst: ${tmpd}/abc
|
||||||
|
src: abc
|
||||||
|
profiles:
|
||||||
|
p0:
|
||||||
|
dotfiles:
|
||||||
|
- f_abc
|
||||||
|
variables:
|
||||||
|
global: global_var
|
||||||
|
local: local_var
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
# create the source
|
||||||
|
mkdir -p ${tmps}/dotfiles/
|
||||||
|
|
||||||
|
cat > ${tmps}/dotfiles/macro_file << _EOF
|
||||||
|
{%@@ macro macro(var) @@%}
|
||||||
|
{{@@ global @@}}
|
||||||
|
{{@@ var @@}}
|
||||||
|
{%@@ endmacro @@%}
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
cat > ${tmps}/dotfiles/abc << _EOF
|
||||||
|
{%@@ from 'macro_file' import macro with context @@%}
|
||||||
|
{{@@ macro(local) @@}}
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
# install
|
||||||
|
cd ${ddpath} | ${bin} install -c ${cfg} -p p0 -V
|
||||||
|
|
||||||
|
# test file content
|
||||||
|
cat ${tmpd}/abc
|
||||||
|
grep 'global_var' ${tmpd}/abc >/dev/null 2>&1
|
||||||
|
grep 'local_var' ${tmpd}/abc >/dev/null 2>&1
|
||||||
|
|
||||||
|
## CLEANING
|
||||||
|
rm -rf ${tmps} ${tmpd}
|
||||||
|
|
||||||
|
echo "OK"
|
||||||
|
exit 0
|
||||||
@@ -30,6 +30,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -90,6 +91,9 @@ dotfiles:
|
|||||||
f_def:
|
f_def:
|
||||||
dst: ${tmpd}/def
|
dst: ${tmpd}/def
|
||||||
src: def
|
src: def
|
||||||
|
f_ghi:
|
||||||
|
dst: '${tmpd}/{{@@ ghi @@}}'
|
||||||
|
src: ghi
|
||||||
variables:
|
variables:
|
||||||
mainvar: 'bad0'
|
mainvar: 'bad0'
|
||||||
subvar: 'bad1'
|
subvar: 'bad1'
|
||||||
@@ -100,8 +104,10 @@ profiles:
|
|||||||
subprofile:
|
subprofile:
|
||||||
dotfiles:
|
dotfiles:
|
||||||
- f_abc
|
- f_abc
|
||||||
|
- f_ghi
|
||||||
dynvariables:
|
dynvariables:
|
||||||
subdyn: 'echo subdyncontent'
|
subdyn: 'echo subdyncontent'
|
||||||
|
ghi: 'echo ghi'
|
||||||
variables:
|
variables:
|
||||||
subvar: 'subcontent'
|
subvar: 'subcontent'
|
||||||
subignore:
|
subignore:
|
||||||
@@ -118,6 +124,7 @@ echo "{{@@ subdyn @@}}" >> ${tmps}/dotfiles/abc
|
|||||||
echo "{{@@ subvar @@}}" >> ${tmps}/dotfiles/abc
|
echo "{{@@ subvar @@}}" >> ${tmps}/dotfiles/abc
|
||||||
echo "end" >> ${tmps}/dotfiles/abc
|
echo "end" >> ${tmps}/dotfiles/abc
|
||||||
#cat ${tmps}/dotfiles/abc
|
#cat ${tmps}/dotfiles/abc
|
||||||
|
echo "ghi content" > ${tmps}/dotfiles/ghi
|
||||||
|
|
||||||
# install
|
# install
|
||||||
cd ${ddpath} | ${bin} install -f -c ${cfg} -p profile_1 --verbose
|
cd ${ddpath} | ${bin} install -f -c ${cfg} -p profile_1 --verbose
|
||||||
@@ -129,6 +136,7 @@ grep 'maindyncontent' ${tmpd}/abc >/dev/null || (echo "dynvariables 1 not resolv
|
|||||||
grep 'subcontent' ${tmpd}/abc >/dev/null || (echo "variables 2 not resolved" && exit 1)
|
grep 'subcontent' ${tmpd}/abc >/dev/null || (echo "variables 2 not resolved" && exit 1)
|
||||||
grep 'subdyncontent' ${tmpd}/abc >/dev/null || (echo "dynvariables 2 not resolved" && exit 1)
|
grep 'subdyncontent' ${tmpd}/abc >/dev/null || (echo "dynvariables 2 not resolved" && exit 1)
|
||||||
#cat ${tmpd}/abc
|
#cat ${tmpd}/abc
|
||||||
|
[ ! -e ${tmpd}/ghi ] && exit 1
|
||||||
|
|
||||||
## CLEANING
|
## CLEANING
|
||||||
rm -rf ${tmps} ${tmpd}
|
rm -rf ${tmps} ${tmpd}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
124
tests-ng/profile-undefined-variables.sh
Executable file
124
tests-ng/profile-undefined-variables.sh
Executable file
@@ -0,0 +1,124 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
|
# Copyright (c) 2017, deadc0de6
|
||||||
|
#
|
||||||
|
# test variables defined in a different profile
|
||||||
|
# than the one selected
|
||||||
|
# returns 1 in case of error
|
||||||
|
#
|
||||||
|
|
||||||
|
# exit on first error
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# all this crap to get current path
|
||||||
|
rl="readlink -f"
|
||||||
|
if ! ${rl} "${0}" >/dev/null 2>&1; then
|
||||||
|
rl="realpath"
|
||||||
|
|
||||||
|
if ! hash ${rl}; then
|
||||||
|
echo "\"${rl}\" not found !" && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cur=$(dirname "$(${rl} "${0}")")
|
||||||
|
|
||||||
|
#hash dotdrop >/dev/null 2>&1
|
||||||
|
#[ "$?" != "0" ] && echo "install dotdrop to run tests" && exit 1
|
||||||
|
|
||||||
|
#echo "called with ${1}"
|
||||||
|
|
||||||
|
# dotdrop path can be pass as argument
|
||||||
|
ddpath="${cur}/../"
|
||||||
|
[ "${1}" != "" ] && ddpath="${1}"
|
||||||
|
[ ! -d ${ddpath} ] && echo "ddpath \"${ddpath}\" is not a directory" && exit 1
|
||||||
|
|
||||||
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
|
echo "dotdrop path: ${ddpath}"
|
||||||
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|
||||||
|
# get the helpers
|
||||||
|
source ${cur}/helpers
|
||||||
|
|
||||||
|
echo -e "$(tput setaf 6)==> RUNNING $(basename $BASH_SOURCE) <==$(tput sgr0)"
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
# this is the test
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
# the dotfile source
|
||||||
|
tmps=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
mkdir -p ${tmps}/dotfiles
|
||||||
|
# the dotfile destination
|
||||||
|
tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
||||||
|
#echo "dotfile destination: ${tmpd}"
|
||||||
|
|
||||||
|
# create the config file
|
||||||
|
cfg="${tmps}/config.yaml"
|
||||||
|
|
||||||
|
cat > ${cfg} << _EOF
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
dotfiles:
|
||||||
|
f_abc:
|
||||||
|
dst: "${tmpd}/{{@@ defined_in_main @@}}"
|
||||||
|
src: abc
|
||||||
|
f_def:
|
||||||
|
dst: "${tmpd}/{{@@ defined_in_alt @@}}"
|
||||||
|
src: def
|
||||||
|
profiles:
|
||||||
|
pmain:
|
||||||
|
dynvariables:
|
||||||
|
defined_in_main: echo abc
|
||||||
|
dotfiles:
|
||||||
|
- f_abc
|
||||||
|
palt:
|
||||||
|
dynvariables:
|
||||||
|
defined_in_alt: echo def
|
||||||
|
dotfiles:
|
||||||
|
- f_def
|
||||||
|
pall:
|
||||||
|
dynvariables:
|
||||||
|
defined_in_main: echo abcall
|
||||||
|
defined_in_alt: echo defall
|
||||||
|
dotfiles:
|
||||||
|
- ALL
|
||||||
|
pinclude:
|
||||||
|
include:
|
||||||
|
- pmain
|
||||||
|
_EOF
|
||||||
|
#cat ${cfg}
|
||||||
|
|
||||||
|
# create the dotfile
|
||||||
|
echo "main" > ${tmps}/dotfiles/abc
|
||||||
|
echo "alt" > ${tmps}/dotfiles/def
|
||||||
|
|
||||||
|
# install pmain
|
||||||
|
echo "install pmain"
|
||||||
|
cd ${ddpath} | ${bin} install -f -c ${cfg} -p pmain -V
|
||||||
|
[ ! -e ${tmpd}/abc ] && echo "dotfile not installed" && exit 1
|
||||||
|
grep main ${tmpd}/abc
|
||||||
|
|
||||||
|
# install pall
|
||||||
|
echo "install pall"
|
||||||
|
cd ${ddpath} | ${bin} install -f -c ${cfg} -p pall -V
|
||||||
|
[ ! -e ${tmpd}/abcall ] && echo "dotfile not installed" && exit 1
|
||||||
|
grep main ${tmpd}/abcall
|
||||||
|
[ ! -e ${tmpd}/defall ] && echo "dotfile not installed" && exit 1
|
||||||
|
grep alt ${tmpd}/defall
|
||||||
|
|
||||||
|
# install pinclude
|
||||||
|
echo "install pinclude"
|
||||||
|
rm -f ${tmpd}/abc
|
||||||
|
cd ${ddpath} | ${bin} install -f -c ${cfg} -p pinclude -V
|
||||||
|
[ ! -e ${tmpd}/abc ] && echo "dotfile not installed" && exit 1
|
||||||
|
grep main ${tmpd}/abc
|
||||||
|
|
||||||
|
## CLEANING
|
||||||
|
rm -rf ${tmps} ${tmpd} ${scr} ${scr2}
|
||||||
|
|
||||||
|
echo "OK"
|
||||||
|
exit 0
|
||||||
@@ -31,6 +31,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
@@ -55,6 +56,7 @@ tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d`
|
|||||||
|
|
||||||
# create the config file
|
# create the config file
|
||||||
cfg="${tmps}/config.yaml"
|
cfg="${tmps}/config.yaml"
|
||||||
|
export dotdrop_test_dst="${tmpd}/def"
|
||||||
|
|
||||||
cat > ${cfg} << _EOF
|
cat > ${cfg} << _EOF
|
||||||
config:
|
config:
|
||||||
@@ -65,14 +67,19 @@ variables:
|
|||||||
var1: "this is some test"
|
var1: "this is some test"
|
||||||
var2: 12
|
var2: 12
|
||||||
var3: another test
|
var3: another test
|
||||||
|
vardst: "{{@@ env['dotdrop_test_dst'] @@}}"
|
||||||
dotfiles:
|
dotfiles:
|
||||||
f_abc:
|
f_abc:
|
||||||
dst: ${tmpd}/abc
|
dst: ${tmpd}/abc
|
||||||
src: abc
|
src: abc
|
||||||
|
f_def:
|
||||||
|
dst: "{{@@ vardst @@}}"
|
||||||
|
src: def
|
||||||
profiles:
|
profiles:
|
||||||
p1:
|
p1:
|
||||||
dotfiles:
|
dotfiles:
|
||||||
- f_abc
|
- f_abc
|
||||||
|
- f_def
|
||||||
_EOF
|
_EOF
|
||||||
#cat ${cfg}
|
#cat ${cfg}
|
||||||
|
|
||||||
@@ -82,13 +89,19 @@ echo "{{@@ var2 @@}}" >> ${tmps}/dotfiles/abc
|
|||||||
echo "{{@@ var3 @@}}" >> ${tmps}/dotfiles/abc
|
echo "{{@@ var3 @@}}" >> ${tmps}/dotfiles/abc
|
||||||
echo "test" >> ${tmps}/dotfiles/abc
|
echo "test" >> ${tmps}/dotfiles/abc
|
||||||
|
|
||||||
# install
|
echo "test_def" > ${tmps}/dotfiles/def
|
||||||
cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1
|
|
||||||
|
|
||||||
|
# install
|
||||||
|
cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 --verbose
|
||||||
|
|
||||||
|
[ ! -e ${tmpd}/abc ] && echo "abc not installed" && exit 1
|
||||||
grep '^this is some test' ${tmpd}/abc >/dev/null
|
grep '^this is some test' ${tmpd}/abc >/dev/null
|
||||||
grep '^12' ${tmpd}/abc >/dev/null
|
grep '^12' ${tmpd}/abc >/dev/null
|
||||||
grep '^another test' ${tmpd}/abc >/dev/null
|
grep '^another test' ${tmpd}/abc >/dev/null
|
||||||
|
|
||||||
|
[ ! -e ${tmpd}/def ] && echo "def not installed" && exit 1
|
||||||
|
grep '^test_def' ${tmpd}/def >/dev/null
|
||||||
|
|
||||||
#cat ${tmpd}/abc
|
#cat ${tmpd}/abc
|
||||||
|
|
||||||
## CLEANING
|
## CLEANING
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ddpath="${cur}/../"
|
|||||||
|
|
||||||
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
export PYTHONPATH="${ddpath}:${PYTHONPATH}"
|
||||||
bin="python3 -m dotdrop.dotdrop"
|
bin="python3 -m dotdrop.dotdrop"
|
||||||
|
hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true
|
||||||
|
|
||||||
echo "dotdrop path: ${ddpath}"
|
echo "dotdrop path: ${ddpath}"
|
||||||
echo "pythonpath: ${PYTHONPATH}"
|
echo "pythonpath: ${PYTHONPATH}"
|
||||||
|
|||||||
31
tests.sh
31
tests.sh
@@ -6,37 +6,52 @@
|
|||||||
set -ev
|
set -ev
|
||||||
|
|
||||||
# PEP8 tests
|
# PEP8 tests
|
||||||
which pycodestyle 2>/dev/null
|
which pycodestyle >/dev/null 2>&1
|
||||||
[ "$?" != "0" ] && echo "Install pycodestyle" && exit 1
|
[ "$?" != "0" ] && echo "Install pycodestyle" && exit 1
|
||||||
|
echo "testing with pycodestyle"
|
||||||
pycodestyle --ignore=W503,W504,W605 dotdrop/
|
pycodestyle --ignore=W503,W504,W605 dotdrop/
|
||||||
pycodestyle tests/
|
pycodestyle tests/
|
||||||
pycodestyle scripts/
|
pycodestyle scripts/
|
||||||
|
|
||||||
# pyflakes tests
|
# pyflakes tests
|
||||||
|
echo "testing with pyflakes"
|
||||||
pyflakes dotdrop/
|
pyflakes dotdrop/
|
||||||
pyflakes tests/
|
pyflakes tests/
|
||||||
|
|
||||||
# retrieve the nosetests binary
|
# retrieve the nosetests binary
|
||||||
set +e
|
|
||||||
nosebin="nosetests"
|
nosebin="nosetests"
|
||||||
which ${nosebin} 2>/dev/null
|
which ${nosebin} >/dev/null 2>&1
|
||||||
[ "$?" != "0" ] && nosebin="nosetests3"
|
[ "$?" != "0" ] && nosebin="nosetests3"
|
||||||
which ${nosebin} 2>/dev/null
|
which ${nosebin} >/dev/null 2>&1
|
||||||
[ "$?" != "0" ] && echo "Install nosetests" && exit 1
|
[ "$?" != "0" ] && echo "Install nosetests" && exit 1
|
||||||
set -e
|
|
||||||
|
|
||||||
# do not print debugs when running tests (faster)
|
# do not print debugs when running tests (faster)
|
||||||
export DOTDROP_FORCE_NODEBUG=yes
|
export DOTDROP_FORCE_NODEBUG=yes
|
||||||
|
|
||||||
|
# coverage file location
|
||||||
|
cur=`dirname $(readlink -f "${0}")`
|
||||||
|
export COVERAGE_FILE="${cur}/.coverage"
|
||||||
|
|
||||||
# execute tests with coverage
|
# execute tests with coverage
|
||||||
PYTHONPATH=dotdrop ${nosebin} -s --with-coverage --cover-package=dotdrop
|
PYTHONPATH="dotdrop" ${nosebin} -s --with-coverage --cover-package=dotdrop
|
||||||
#PYTHONPATH=dotdrop python3 -m pytest tests
|
#PYTHONPATH="dotdrop" python3 -m pytest tests
|
||||||
|
|
||||||
|
# enable debug logs
|
||||||
|
export DOTDROP_DEBUG=
|
||||||
|
unset DOTDROP_FORCE_NODEBUG
|
||||||
|
# do not print debugs when running tests (faster)
|
||||||
|
#export DOTDROP_FORCE_NODEBUG=yes
|
||||||
|
|
||||||
## execute bash script tests
|
## execute bash script tests
|
||||||
[ "$1" = '--python-only' ] || {
|
[ "$1" = '--python-only' ] || {
|
||||||
|
echo "doing extended tests"
|
||||||
log=`mktemp`
|
log=`mktemp`
|
||||||
for scr in tests-ng/*.sh; do
|
for scr in tests-ng/*.sh; do
|
||||||
${scr} > "${log}" 2>&1 &
|
if [ -z ${TRAVIS} ]; then
|
||||||
|
${scr} > "${log}" 2>&1 &
|
||||||
|
else
|
||||||
|
${scr} > "${log}" >/dev/null 2>&1 &
|
||||||
|
fi
|
||||||
tail --pid="$!" -f "${log}"
|
tail --pid="$!" -f "${log}"
|
||||||
set +e
|
set +e
|
||||||
wait "$!"
|
wait "$!"
|
||||||
|
|||||||
22
tests/dummy.py
Normal file
22
tests/dummy.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
"""
|
||||||
|
author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
|
Copyright (c) 2017, deadc0de6
|
||||||
|
basic unittest for the import function
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
import dotdrop
|
||||||
|
|
||||||
|
|
||||||
|
class TestDummy(unittest.TestCase):
|
||||||
|
|
||||||
|
dotdrop.main()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
unittest.main()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@@ -158,7 +158,6 @@ def load_options(confpath, profile):
|
|||||||
o.import_link = LinkTypes.NOLINK
|
o.import_link = LinkTypes.NOLINK
|
||||||
o.install_showdiff = True
|
o.install_showdiff = True
|
||||||
o.debug = True
|
o.debug = True
|
||||||
o.variables = {}
|
|
||||||
return o
|
return o
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ class TestCompare(unittest.TestCase):
|
|||||||
results = {}
|
results = {}
|
||||||
for dotfile in dotfiles:
|
for dotfile in dotfiles:
|
||||||
path = os.path.expanduser(dotfile.dst)
|
path = os.path.expanduser(dotfile.dst)
|
||||||
ret, insttmp = inst.install_to_temp(t, tmp, dotfile.src,
|
ret, err, insttmp = inst.install_to_temp(t, tmp, dotfile.src,
|
||||||
dotfile.dst)
|
dotfile.dst)
|
||||||
if not ret:
|
if not ret:
|
||||||
results[path] = False
|
results[path] = False
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -186,7 +186,6 @@ exec bspwm
|
|||||||
o = load_options(confpath, profile)
|
o = load_options(confpath, profile)
|
||||||
o.safe = False
|
o.safe = False
|
||||||
o.install_showdiff = True
|
o.install_showdiff = True
|
||||||
o.variables = {}
|
|
||||||
cmd_install(o)
|
cmd_install(o)
|
||||||
|
|
||||||
# now compare the generated files
|
# now compare the generated files
|
||||||
@@ -363,8 +362,8 @@ exec bspwm
|
|||||||
src = '/some/non/existant/file'
|
src = '/some/non/existant/file'
|
||||||
|
|
||||||
installer = Installer()
|
installer = Installer()
|
||||||
logger = MagicMock()
|
# logger = MagicMock()
|
||||||
installer.log.err = logger
|
# installer.log.err = logger
|
||||||
|
|
||||||
res, err = installer.link_children(templater=MagicMock(), src=src,
|
res, err = installer.link_children(templater=MagicMock(), src=src,
|
||||||
dst='/dev/null', actionexec=None)
|
dst='/dev/null', actionexec=None)
|
||||||
@@ -382,10 +381,10 @@ exec bspwm
|
|||||||
|
|
||||||
src = create_random_file(src_dir)[0]
|
src = create_random_file(src_dir)[0]
|
||||||
|
|
||||||
logger = MagicMock()
|
# logger = MagicMock()
|
||||||
templater = MagicMock()
|
templater = MagicMock()
|
||||||
installer = Installer()
|
installer = Installer()
|
||||||
installer.log.err = logger
|
# installer.log.err = logger
|
||||||
|
|
||||||
# pass src file not src dir
|
# pass src file not src dir
|
||||||
res, err = installer.link_children(templater=templater, src=src,
|
res, err = installer.link_children(templater=templater, src=src,
|
||||||
|
|||||||
Reference in New Issue
Block a user