예제 #1
0
function wiki_git_commit($arr)
{
    $files = array_key_exists('files', $arr) ? $arr['files'] : null;
    $commit_msg = array_key_exists('commit_msg', $arr) ? $arr['commit_msg'] : 'Repo updated';
    $resource_id = array_key_exists('resource_id', $arr) ? $arr['resource_id'] : json_return_and_die(array('message' => 'Wiki resource_id required for git commit', 'success' => false));
    $observer = array_key_exists('observer', $arr) ? $arr['observer'] : json_return_and_die(array('message' => 'Observer required for git commit', 'success' => false));
    $w = wiki_get_wiki($resource_id);
    if (!$w['path']) {
        return array('message' => 'Error reading wiki', 'success' => false);
    }
    $reponame = array_key_exists('title', $w['wiki']) ? urlencode($w['wiki']['title']) : 'repo';
    if ($reponame === '') {
        $reponame = 'repo';
    }
    $git = new GitRepo($observer['xchan_addr'], null, false, $w['wiki']['title'], $w['path']);
    try {
        $git->setIdentity($observer['xchan_name'], $observer['xchan_addr']);
        if ($files === null) {
            $options = array('all' => true);
            // git commit option to include all changes
        } else {
            $options = array();
            // git commit options
            foreach ($files as $file) {
                if (!$git->git->add($file)) {
                    // add specified files to the git repo stage
                    if (!$git->git->reset->hard()) {
                        json_return_and_die(array('message' => 'Error adding file to git stage: ' . $file . '. Error resetting git repo.', 'success' => false));
                    }
                    json_return_and_die(array('message' => 'Error adding file to git stage: ' . $file, 'success' => false));
                }
            }
        }
        if ($git->commit($commit_msg, $options)) {
            json_return_and_die(array('message' => 'Wiki repo commit succeeded', 'success' => true));
        } else {
            json_return_and_die(array('message' => 'Wiki repo commit failed', 'success' => false));
        }
    } catch (\PHPGit\Exception\GitException $e) {
        json_return_and_die(array('message' => 'GitRepo error thrown', 'success' => false));
    }
}