Package: linkins
Descriptionlinkins is a command line tool which allows users to link a directory
structure. It provides the ability to execute user-defined scripts at
each level of the directory hierarchy.InstallationInstall using pip:pip install linkinsor easy_install:easy_install linkinsUsageThe linkins command takes two positional arguments: a list of
directories which have the files to link and the destination
directory. These show up in the help messages as TARGET_DIR and
LINK_DIR, respectively:linkins TARGET_DIR [TARGET_DIR ...] LINK_DIRTARGET_DIRs are processed in the ordered specified by the user.
Linkins also supports a number of optional arguments. To see all the
supported options you can invoke the help menu:linkins --helpRunning scriptsScripts are not run be default. In order to run your scripts you must
pass the -r or –run option.Linkins can run custom scripts at each directory. The only requirement
is that the script name be the same everywhere. By default, linkins
looks for scripts named linkins-script. But, the script name can be
changed with the –script option. An example of a TARGET_DIR with
scripts would be:TARGET_DIR/
|-- .bashrc
|-- .emacs
|-- linkins-script
|-- .emacs.d
|   |-- linkins-script
|   |-- wc.el
|-- .xmonad
|   |-- xmonad.hsScripts must be executable. In Linux that means the executable bit
must be set:chmod +x SCRIPT_NAMEScripts are not linked or copied to LINK_DIR. Instead, and for
convenience, linkins passes three positional arguments to the script:
TARGET_DIR, LINK_DIR and a relative path from TARGET_DIR to the
script’s parent directory. All paths are absolute except for the last
positional argument just described. This includes the script
itself. For example, the two scripts in the example above would be
called like:TARGET_DIR/linkins-script TARGET_DIR LINKS_DIR .
...
TARGET_DIR/.emacs.d/linkins-script TARGET_DIR LINKS_DIR .emacs.dIf the directory which mirrors the script’s parent directory in the
LINK_DIR side does not exist linkdirs will create it.Any files in the same directory as the script are always linked before
the script is run.MultiprocessingYou can run each script as a separate process by using the -m
or –multiprocess option. However, you must be aware of the
consequences. For example, if you have two scripts that install
packages from apt-get one of them will likely fail because it will not
be able to obtain the dpkg lock.OutputA script’s output is read unbuffered and it is redirected to linkins’
log where it is logged at level INFO. A script log line has the
following form:SCRIPT_PATH: SCRIPT: MSGwhere SCRIPT_PATH is the relative path from TARGET_DIR to the script,
SCRIPT is the word SCRIPT and MSG is the message outputted by the
script to either STDOUT or STDERR.If the -q option is used the script’s output will be not be shown.Command line options–excludeThe –exclude option takes a list of arguments separated by
whitespace. These arguments can be paths or regular expressions. Any
directories or files in TARGET_DIR which match the arguments will be
excluded from the operation. You can use –exclude in conjunction with
any other operation.–includeWithout the –exclude option, this option doesn’t have much use. You
can use it tonot excludedirectories or files. Like –exclude it
takes a list of arguments separated by whitespace which can be either
paths or regular expressions.–forceYou can use the –force option to delete and relink links which
already exist in LINK_DIR. Only links which link to files in
TARGET_DIR will be replaced. Any other directories, files or links in
LINK_DIR will be left untouched.–cleanYou can use the –clean option to delete links which already exist in
LINK_DIR. Only links which link to files in TARGET_DIR will be
removed. Any other directories, files or links in LINK_DIR will be
left untouched. This operation has precedence over replacing links and
running scripts. –clean will also remove empty parent directories.DevelopingExternal dependenciespython-devpython-setuptoolspython-virtualenvSetupTo start developing run the following commands from the project’s base
directory. You can download the source fromhttps://github.com/thelinuxkid/linkins:# I like to install the virtual environment in a hidden repo.
virtualenv .virtual
# I leave the magic to Ruby developers (.virtual/bin/activate)
.virtual/bin/python setup.py develop
# At this point, linkins will already be in easy-install.pth.
# So, pip will not attempt to download it
.virtual/bin/pip install linkins[test]If you like to use ipython you can install it with the dev
requirement:.virtual/bin/pip install linkins[dev]TestingTo run the unit-tests run the following command from the project’s
base directory:.virtual/bin/py.test