PHP Classes

File: phpgit/git.php

Recommend this page to a friend!
  Classes of Cesar D. Rodas   PHP Git   phpgit/git.php   Download  
File: phpgit/git.php
Role: Class source
Content type: text/plain
Description: Main class
Class: PHP Git
Retrieve project files from GIT repositories
Author: By
Last change: - Upgrading to the last version
Date: 14 years ago
Size: 5,705 bytes
 

Contents

Class file image Download
<?php
/**
 * PHP Git
 *
 * Pure-PHP class to read GIT repositories. It allows to
 * perform read-only operations such as get commit history
 * get files, get branches, and so forth.
 *
 * PHP version 5
 *
 * @category VersionControl
 * @package PHP-Git
 * @author César D. Rodas <crodas@member.fsf.org>
 * @license http://www.php.net/license/3_01.txt PHP License 3.01
 * @link http://cesar.la/git
 */


/**
 * __autoload
 *
 * @param string $path Class to load
 *
 * @return nothing
 */
function __autoload($path)
{
   
$path = strtolower($path);
    if (
substr($path, 0, 3) == "git") {
        require_once
"{$path}.php";
    }
}

/**
 * Git Class
 *
 * @category VersionControl
 * @package PHP-Git
 * @author César D. Rodas <crodas@member.fsf.org>
 * @license http://www.php.net/license/3_01.txt PHP License 3.01
 * @link http://cesar.la/git
 */
class Git extends GitBase
{
    private
$_cache;

   
// {{{ __construct
    /**
     * Class constructor
     *
     * @param string $path Git path repo.
     *
     * @return null
     */
   
final function __construct($path='')
    {
        if (
$path=='') {
            return;
        }
       
$this->setRepo($path);
    }
   
// }}}

    // {{{ getBranches
    /**
     * Returns all the branches
     *
     * @return Array list of branches
     */
   
function getBranches()
    {
        return
array_keys($this->branch);
    }
   
// }}}

    // {{{ getHistory
    /**
     * Returns all commit history on a given branch.
     *
     * @param string $branch Branch name
     * @param int $limit History limitation
     *
     * @return mixed Array with commits history or exception
     */
   
function getHistory($branch,$limit=10)
    {
        if (
$this->branch[$branch] === false) {
           
$this->throwException("$branch is not a valid branch");
        }
      
       
$object_id = $this->branch[$branch];
       
$history = array();
       
$e = 0;
        do {
           
$commit = $this->getObject($object_id, $type);
            if (
$commit == false || $type != OBJ_COMMIT) {
               
$this->throwException("Unexpected datatype");
            }
           
$commit["id"] = $object_id;
           
$history[] = $commit;
            if (!isset(
$commit["parent"]) || ++$e == $limit) {
                break;
            }
           
$object_id = $commit["parent"];
        } while (
1);
        return
$history;
    }
   
// }}}

    // {{{ getTags
    /**
     * Get Tags
     *
     * Returns the avaliable tags on a git repo.
     *
     * @return array All tags avaliable
     */
   
function getTags()
    {
       
$tags = $this->getRefInfo('tags');
        if (
count($tags) == 0) {
            return array();
        }
        return
array_combine(array_values($tags),
               
array_keys($tags));
           
    }
   
// }}}

    // {{{ getCommit
    /**
     * Get commit list of files.
     *
     * @param string $id Commit Id.
     *
     * @return mixed Array with commit's files or an exception
     */
   
function getCommit($id)
    {
       
$obj = $this->getObject($id, $type);
        if (
$obj === false || $type != OBJ_COMMIT) {
           
$this->throwException("$id is not a valid commit");
        }
       
$obj['Tree'] = $this->getObject($obj['tree']);
        return
$obj;
    }
   
// }}}

    //{{{ getTag
    /**
     * Get information about a tag.
     *
     * @param string $id Tag commit id.
     *
     * @return object Object.
     */
   
function getTag($id)
    {
       
$obj = $this->getObject($id, $type);
        if (
$obj === false) {
           
$this->throwException("There is not object $id");
        }
        switch (
$type) {
        case
OBJ_TAG:
            break;
        case
OBJ_COMMIT:
           
/* A tag can be a commit, so simulate it */
           
$nobj = array(
               
"object" => $id,
               
"type" => "commit",
               
"tag" => "",
               
"tagger" => $obj["committer"],
               
"comment" => $obj["comment"],
               
"Tree" => $this->getObject($obj['tree'])
            );
           
$obj = $nobj;
            break;
        default:
           
$this->throwException("Unexpected ($type) object type.");
        }
        return
$obj;
    }
   
//}}}

    // {{{ getFile
    /**
     * Returns a parsed object from the repo.
     *
     * @param string $id Sha1 object id.
     * @param int &$type Object type
     *
     * @return mixed file content or an exception
     */
   
function getFile($id,&$type=null)
    {
       
$obj = $this->getObject($id, $type);
        return
$obj;
        if (
$obj === false) {
            if (
sha1("blob 0".chr(0)) == $id) {
                return
"";
            }
           
$this->throwException("Object $id doesn't exists");
        }
        switch (
$type) {
        case
OBJ_TREE:
           
$obj = $this->parseTreeObject($obj);
            break;
        case
OBJ_COMMIT:
           
$obj = $this->parseCommitObject($id);
            break;
        }
        return
$obj;
    }
   
// }}}

    // {{{ getCommitDiff
    /**
     * Get a diff form the $id commit and the
     * previous commit.
     *
     * @param string $id Commit id.
     *
     * @return array Array with changes
     */
   
function getCommitDiff($id)
    {
       
$tree = $this->getCommit($id);
       
$tree1 = $this->getCommit($tree["parent"]);

        return
$this->getTreeDiff($tree['tree'], $tree1['tree']);
    }
   
// }}}

}

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: sw=4 ts=4 fdm=marker
 * vim<600: sw=4 ts=4
 */

?>