PHP Classes
Icontem

File: phpgit/git.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Cesar D. Rodas  >  PHP Git  >  phpgit/git.php  
File: phpgit/git.php
Role: Class source
Content type: text/plain
Description: Main class
Class: PHP Git
Retrieve project files from GIT repositories
 

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($path03) == "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
 */

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products