GitHooksCommand

Class
extends Command
Final: Yes

Installs packaged Git hooks for the consumer repository.

Attributes
#[AsCommand]
$name : 'git:hooks'
$description : 'Installs Fast Forward Git hooks.'
$aliases : ['.git/hooks', 'git-hooks']

Table of Contents

Properties

Methods

__construct()

Creates a new GitHooksCommand instance.

 : mixed
addJsonOption()

Adds the standard JSON output options to the current command.

 : static
configure()

Configures hook source, target, and initialization options.

 : void
execute()

Copies packaged Git hooks.

 : int
isJsonOutput()

Determines whether JSON output was requested.

 : bool
isPrettyJsonOutput()

Determines whether pretty JSON output was requested.

 : bool
compareRenderedHookContents()

Compares rendered hook contents with an existing installed hook.

 : FileDiff
failure()

Logs a failed command result and returns the failure exit code.

 : int
installHook()

Installs a single hook and rewrites drifted targets defensively.

 : bool
isImplicitJsonOutputEnabled()

Determines whether structured JSON output SHOULD be enabled implicitly.

 : bool
isOptionEnabled()

Determines whether a boolean input option was enabled.

 : bool
log()

Logs a non-terminal command message unless structured JSON output is active.

 : void
shouldReplaceHook()

Prompts whether a drifted hook should be replaced.

 : bool
success()

Logs a successful command result and returns the success exit code.

 : int
Properties

$fileLocator

Private Read-only
private FileLocatorInterface $fileLocator
Methods

__construct()

Public

Creates a new GitHooksCommand instance.

public __construct(FilesystemInterface  $filesystem, FileLocatorInterface  $fileLocator, FinderFactoryInterface  $finderFactory, HookContentRenderer  $hookContentRenderer, FileDiffer  $fileDiffer, SymfonyStyle  $io) : mixed
Parameters
$filesystem : FilesystemInterface

Description

the filesystem used to copy hooks

$fileLocator : FileLocatorInterface

Description

the locator used to find packaged hooks

$finderFactory : FinderFactoryInterface

Description

the factory used to create finders for hook files

$hookContentRenderer : HookContentRenderer

Description

renders packaged hooks with runtime-specific placeholders

$fileDiffer : FileDiffer

Description

the file differ used to summarize synchronization changes

$io : SymfonyStyle

Description

the input/output service used to interact with the user

addJsonOption()

Protected

Adds the standard JSON output options to the current command.

protected addJsonOption() : static
Return values
static

configure()

Protected

Configures hook source, target, and initialization options.

protected configure() : void

execute()

Protected

Copies packaged Git hooks.

protected execute(InputInterface  $input, OutputInterface  $output) : int
Parameters
$input : InputInterface

Description

the command input

$output : OutputInterface

Description

the command output

Return values
int

Description

the command status code

isJsonOutput()

Protected

Determines whether JSON output was requested.

protected isJsonOutput(InputInterface  $input) : bool

Description

The pretty-json flag SHALL imply JSON output.

Parameters
$input : InputInterface
Return values
bool

isPrettyJsonOutput()

Protected

Determines whether pretty JSON output was requested.

protected isPrettyJsonOutput(InputInterface  $input) : bool
Parameters
$input : InputInterface
Return values
bool

compareRenderedHookContents()

Private

Compares rendered hook contents with an existing installed hook.

private compareRenderedHookContents( string  $sourcePath, string  $hookPath, string  $renderedContents) : FileDiff
Parameters
$sourcePath : string

Description

the packaged hook source path

$hookPath : string

Description

the target installed hook path

$renderedContents : string

Description

the rendered hook contents

Return values

Description

the rendered comparison result

failure()

Private

Logs a failed command result and returns the failure exit code.

private failure( string  $message, InputInterface  $input[, array<string, mixed>  $context = []][, string|null  $file = null][, int|null  $line = null]) : int
Parameters
$message : string

Description

the failure message

$input : InputInterface

Description

the originating command input

$context : array<string, mixed> = []

Description

optional extra log context

$file : string|null = null

Description

the related file path when known

$line : int|null = null

Description

the related line when known

Return values
int

installHook()

Private

Installs a single hook and rewrites drifted targets defensively.

private installHook( string  $sourcePath, string  $hookPath, bool  $replaceExisting, InputInterface  $input[, string|null  $renderedContents = null]) : bool
Parameters
$sourcePath : string

Description

the packaged hook path

$hookPath : string

Description

the target repository hook path

$replaceExisting : bool

Description

whether an existing hook SHOULD be removed first

$input : InputInterface

Description

the originating command input

$renderedContents : string|null = null

Description

optional rendered hook contents that SHOULD be written instead of copied

Return values
bool

Description

true when the hook was installed successfully

isImplicitJsonOutputEnabled()

Private

Determines whether structured JSON output SHOULD be enabled implicitly.

private isImplicitJsonOutputEnabled() : bool

Description

Commands MAY opt into runtime-environment-aware behavior by exposing a $runtimeEnvironment property. Commands that do not expose it SHALL fall back to the shared runtime-environment service from the DevTools container.

Return values
bool

isOptionEnabled()

Private

Determines whether a boolean input option was enabled.

private isOptionEnabled(InputInterface  $input, string  $option) : bool
Parameters
$input : InputInterface
$option : string
Return values
bool

log()

Private

Logs a non-terminal command message unless structured JSON output is active.

private log( string  $message, InputInterface  $input[, array<string, mixed>  $context = []][, string  $logLevel = LogLevel::INFO]) : void
Parameters
$message : string

Description

the progress message

$input : InputInterface

Description

the originating command input

$context : array<string, mixed> = []

Description

optional extra log context

$logLevel : string = LogLevel::INFO

Description

the PSR-3 log level used for the message

shouldReplaceHook()

Private

Prompts whether a drifted hook should be replaced.

private shouldReplaceHook( string  $hookPath) : bool
Parameters
$hookPath : string

Description

the hook path that would be replaced

Return values
bool

Description

true when the replacement SHOULD proceed

success()

Private

Logs a successful command result and returns the success exit code.

private success( string  $message, InputInterface  $input[, array<string, mixed>  $context = []][, string  $logLevel = LogLevel::INFO]) : int
Parameters
$message : string

Description

the success message

$input : InputInterface

Description

the originating command input

$context : array<string, mixed> = []

Description

optional extra log context

$logLevel : string = LogLevel::INFO

Description

the PSR-3 log level used for the successful result

Return values
int