gitlab-hook.php

<?php


// print_r($_SERVER);
// print_r(apache_request_headers());
// exit;


// $token = apache_request_headers()['X-Gitlab-Token'];
$token = apache_request_headers()['X-Gitlab-Token'];

if ($token!==$package->secret_token||$package->secret_token==null){
    echo "Secret token did not match expected secret token.";
    exit;
}
$dir = __DIR__;

$data = json_decode(file_get_contents('php://input'),true);

$project_url = $data['project']['http_url'];


$settings_file = $package->settings_file();
$settings = json_decode(file_get_contents($settings_file), true);
$match = false;
foreach ($settings as $project_name=>$proj_settings){
    if ($proj_settings['git']==$project_url){
        $match = true;
        echo "match!\n";
        break;
    }
}
if ($match==false){
    echo "Project $project_url is not in the settings.json file";
    // print_r($settings);
    exit;
}

$changes = false;
if ($data['project']['default_branch']!=$settings[$project_name]['default']){
    $settings[$project_name]['default'] = $data['project']['default_branch'];
    $changes = true;
}
if (($settings[$project_name]['description']??null)!=$data['project']['description']){
    $settings[$project_name]['description'] = $data['project']['description'];
    $changes = true;
}

if ($changes){
    file_put_contents($settings_file, json_encode($settings, JSON_PRETTY_PRINT));
}

// refs\/heads\/v0.1
$pushed_ref = $data["ref"];
$ref_pos = strrpos($pushed_ref,'/');
$branch = substr($pushed_ref, $ref_pos+1);
$branch_dir = $package->dir.'/'.$project_name.'/'.$branch.'/';
$git_dir = $package->dir.'/'.$project_name.'/.git/';
if (!is_dir($branch_dir))mkdir($branch_dir);
if (!is_dir($branch_dir)){
    echo "cannot create branch dir for $project_name/$branch";
    exit;
}

// $git_prefix = "git --git-dir=\"$git_dir\" --work-tree=\"$branch_dir\"";
// $real_command = "cd \"$branch_dir\";\n$git_prefix clean -fd;\n$git_prefix reset --hard;\n$git_prefix checkout \"$branch\";\n $git_prefix pull origin \"$branch\";\n $git_prefix reset --hard";
// $real_command = "cd \"$branch_dir\";\n $git_prefix clean -fd;\n $git_prefix reset --hard;\n $git_prefix pull origin \"$branch\";\n $git_prefix reset --hard";
// $command = "echo \"" | at $time";
//
// $command = $real_command;

$script_path = dirname(__DIR__,2).'/bin/git-pull';
$real_command = "\\\"$script_path\\\" \\\"$branch\\\" \\\"$branch_dir\\\" \\\"$git_dir\\\"";

$date = date_create();
$date->add(date_interval_create_from_date_string('1 minutes'));
$time = $date->format('H:i');
$command = "echo \"$real_command\" | at $time";
// $command = $real_command;



echo "\nRun command, hopefully will git pull!!";
echo "\nCommand: $command\n\n";

echo "\nResults:\n";

echo passthru($command);


exit;