Skip to main content

Pre-Receive Hook

Overview​

The pre-receive hook is a critical component of the GitProxy system. It is executed before changes are accepted into a repository. This hook allows for custom logic to validate or reject incoming changes based on specific criteria, ensuring that only valid and authorized changes are pushed to the repository.

Functionality​

The pre-receive hook determines the outcome of a push based on the exit status of the hook script:

  • If the script exits with status 0, the push is automatically approved.
  • If the script exits with status 1, the push is automatically rejected.
  • If the script exits with status 2, the push requires manual approval.
  • Any other exit status is treated as an error, and the push is rejected with an appropriate error message.

Usage​

To use the pre-receive hook, follow these steps:

Create a Hook Script​

Write a shell script or executable file that implements your custom validation logic. The script must accept input in the format: <old_commit_hash> <new_commit_hash> <branch_name>.

Place the Script​

Save the script in the appropriate directory, such as hooks/pre-receive.sh.

Make the Script Executable​

Ensure the script has executable permissions. You can do this by running the following command:

chmod +x hooks/pre-receive.sh

Note: If the pre-receive script does not exist, the hook will not be executed, and the push will proceed without validation.

Example Hook Script​

Below is an example of a simple pre-receive hook script:

#!/bin/bash

read old_commit new_commit branch_name

# Example validation: Reject pushes to the main branch
if [ "$branch_name" == "main" ]; then
echo "Pushes to the main branch are not allowed."
exit 1
fi

# Approve all other pushes
exit 0