Conditions

Here's a list of all built-in conditions:

All hooks
\CaptainHook\App\Hook\Condition\OnBranch Check if we are on a particular branch
pre-commit
\CaptainHook\App\Hook\Condition\FileStaged\All Check if all of the configured files are staged for commit
\CaptainHook\App\Hook\Condition\FileStaged\Any Check if any of the configured files is staged for commit
\CaptainHook\App\Hook\Condition\FileStaged\OfType Check if a file of a given type is staged for commit
\CaptainHook\App\Hook\Condition\FileStaged\InDirectory Check if a file in a directory is changed
post-checkout / post-merge / post-rewrite / pre-push
\CaptainHook\App\Hook\Condition\FileChange\All Check if all of the configured files are changed
\CaptainHook\App\Hook\Condition\FileChange\Any Check if any of the configured files is changed
\CaptainHook\App\Hook\Condition\FileChange\OfType Check if changes to a typy of file will be pushed
logic conditions
\CaptainHook\App\Hook\Condition\Logic\LogicAnd Combine multiple conditions. Only if all conditions apply the action will be executed
\CaptainHook\App\Hook\Condition\Logic\LogicOr Combine multiple conditions. If one condition applies the action will be executed

You can build your own conditions. You can either use simple scripts or binaries which must return an exit code. The exit code 0 means the condition applies; any exit code other than 0 means the condition does not apply.

Or you can build custom PHP Conditions. For an exact guide have a look at the "how to extend CaptainHook" section.

OnBranch

all hooks

This Condition expects just one argument, the name of the branch.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\OnBranch",
      "args": [
        "master"
      ]
    }
  ]
}

FileStaged\All

pre-commit

Expecting a list of file names or pattern.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\All",
      "args": [
        ["foo.html", "bar.html", "*.php"]
      ]
    }
  ]
}

FileStaged\Any

pre-commit

Expecting a list of file names or pattern.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\Any",
      "args": [
        ["foo.html", "bar.html", "*.php"]
      ]
    }
  ]
}

FileStaged\OfType

pre-commit

Expecting just the type of file you want to watch as string.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\OfType",
      "args": [
        "php"
      ]
    }
  ]
}

FileStaged\InDirectory

pre-commit

Expecting just the type of file you want to watch as string.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\InDirectory",
      "args": [
        "src/Foo/"
      ]
    }
  ]
}

FileChanged\All

post-checkout post-merge

Expecting a list of file names or pattern.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileChanged\\All",
      "args": [
        ["foo.html", "bar.html", "*.php"]
      ]
    }
  ]
}

FileChanged\Any

post-checkout post-merge

Expecting a list of file names or pattern.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileChanged\\Any‚",
      "args": [
        ["foo.html", "bar.html", "*.php"]
      ]
    }
  ]
}

FileChanged\OfType

pre-push

Expecting just the type of file you want to watch as string.

{
  "conditions": [
    {
      "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileChange\\OfType",
      "args": [
        "php"
      ]
    }
  ]
}

Logic\LogicAnd

Combining multiple actions. All must pass to execute the action.

{
  "conditions": [
    {
      "exec": "and",
      "args": [{
        "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\InDirectory",
        "args": [
          ["src/new"]
        ]
      },{
        "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\OfType",
        "args": [
          ["php"]
        ]
      }]
    }
  ]
}

Logic\LogicOr

Combining multiple actions. Only one condition must apply to execute the action.

{
  "conditions": [
    {
      "exec": "or",
      "args": [{
        "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\InDirectory",
        "args": [
          ["src/new"]
        ]
      },{
        "exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\OfType",
        "args": [
          ["php"]
        ]
      }]
    }
  ]
}