diff --git a/README.md b/README.md index b1d865c..c83bf47 100644 --- a/README.md +++ b/README.md @@ -223,11 +223,12 @@ shown below: Homemaker will process the dependency tasks before processing the task itself. -In addition to creating links, Homemaker is capable of executing commands on a per-task basis. Commands should be -defined in an array called `cmds`, split into an item per each command line argument. All of the commands are executed -with `dest` as the working directory (as mentioned previously, this defaults to your home directory). If any command -returns a nonzero exit code, Homemaker will display an error message and prompt the user to determine if it should -*abort*, *retry*, or *cancel*. +In addition to creating links, Homemaker is capable of executing commands on a per-task basis. Homemaker can commands both +before and after linking your configuration. Commands should be placed in either an array, under the field `precmds` or +`postcmds` (for commands to be run before and after linking respectively). These commands should be split into an array of +strings, with each entry corresponding to one command line argument. All of the commands are executed with `dest` as +the working directory (as mentioned previously, this defaults to your home directory). If any command returns a nonzero +exit code, Homemaker will display an error message and prompt the user to determine if it should *abort*, *retry*, or *cancel*. The example task below will clone and install configuration files for Vim into the `~/.config` directory, and create links to it from the home directory. You may notice that this task references an environment variable (set by Homemaker diff --git a/task.go b/task.go index 2619905..f11ffcb 100644 --- a/task.go +++ b/task.go @@ -30,9 +30,9 @@ import ( type task struct { Deps []string Links [][]string - Precmds [][]string + CmdsPre [][]string Cmds [][]string - Postcmds [][]string + CmdsPost [][]string Envs [][]string Accepts [][]string Rejects [][]string @@ -63,15 +63,12 @@ func (t *task) process(conf *config) error { } } - if conf.flags&flagNoCmds == 0 { - for _, currCmd := range t.Precmds { + if conf.flags&flagNoCmds == 0 { + for _, currCmd := range t.CmdsPre { if err := processCmd(currCmd, true, conf); err != nil { return err } } - } - - if conf.flags&flagNoCmds == 0 { for _, currCmd := range t.Cmds { if err := processCmd(currCmd, true, conf); err != nil { return err @@ -87,15 +84,15 @@ func (t *task) process(conf *config) error { } } - if conf.flags&flagNoCmds == 0 { - for _, currCmd := range t.Postcmds { + if conf.flags&flagNoCmds == 0 { + for _, currCmd := range t.CmdsPost { if err := processCmd(currCmd, true, conf); err != nil { return err } } } - - return nil + + return nil } func (t *task) skippable(conf *config) bool {