require_once 'MTrack/Repo.php';
-class MTrack_SCM_Git_Repo extends MTrackRepo
+class MTrack_SCM_Git_Repo extends MTrack_Repo
{
protected $branches = null;
protected $tags = null;
public $gitdir = null;
+ public $debug = false;
+
public function getSCMMetaData() {
return array(
'name' => 'Git',
);
}
- function __construct($id = null) {
- parent::__construct($id);
- if ($id !== null) {
- /* transparently handle bare vs. non bare repos */
- $this->gitdir = $this->repopath;
- if (is_dir("$this->repopath/.git")) {
- $this->gitdir .= "/.git";
- }
+ function __construct($ar = null) {
+
+ parent::__construct($ar);
+ if ($ar !== null) {
+ /* transparently handle bare vs. non bare repos */
+ $this->gitdir = $this->repopath;
+ if (is_dir("$this->repopath/.git")) {
+ $this->gitdir .= "/.git";
+ }
+ }
}
- }
function getServerURL() {
$url = parent::getServerURL();
putenv("GIT_AUTHOR_EMAIL=$who");
if ($r->clonedfrom) {
- $S = MTrackRepo::loadById($r->clonedfrom);
+ $S = MTrack_Repo::loadById($r->clonedfrom);
$stm = MTrackSCM::run('git', 'read',
array('clone', '--bare', $S->repopath, $r->repopath));
public function getBranches()
{
if ($this->branches !== null) {
- return $this->branches;
+ return $this->branches;
}
$this->branches = array();
$fp = $this->git('branch', '--no-color', '--verbose');
*
* @param string path (can be empty - eg. '')
* @param {number|date} limit how many to fetch
+ *
+ * -- prefered args:
+ *
* @param {string} object = eg. rev|tag|branch (use 'rev' here and ident=HASH to retrieve a speific revision
* @param {string} ident =
+ *
+ * Example:
+ * - fetch on revision?: '.',1,'rev','xxxxxxxxxx'
+ *
+ *
+ * range... object ='rev' ident ='master..release'
*
*/
public function history($path, $limit = null, $object = null, $ident = null)
} else {
$args[] = "master";
}
-
+
if ($limit !== null) {
if (is_int($limit)) {
$args[] = "--max-count=$limit";
+ } else if (is_array($limit) && isset($limit[0]) && isset($limit[1])) {
+
+ $args[] = "--skip={$limit[0]} --max-count={$limit[1]}";
+
+
+ /// oh what a horible hack.. - bad api design here.
+ } else if (is_array($limit) ) {
+ foreach($limit as $k=>$v) {
+
+ $args[] = ($k == '-') ? $v : ('--'. $k .'='. $v);
+
+ }
+
} else {
+
$args[] = "--since=$limit";
}
}
//echo '<PRE>';print_r($args);echo '</PRE>';
$path = ltrim($path, '/');
- //print_R(array($args, '--' ,$path));
+
+
+
+ // print_R(array($args, '--' ,$path));exit;
$fp = $this->git('log', $args, '--', $path);
$commits = array();
return $this->git('diff', "$from^..$from", '--', $path);
}
- public function getWorkingCopy()
- {
- require_once 'MTrack/SCM/Git/WorkingCopy.php';
- return new MTrack_SCM_Git_WorkingCopy($this);
- }
+ public function getWorkingCopy()
+ {
+ require_once 'MTrack/SCM/Git/WorkingCopy.php';
+ return new MTrack_SCM_Git_WorkingCopy($this);
+ }
public function getRelatedChanges($revision) // pretty nasty.. could end up with 1000's of changes..
{
return array($parents, $kids);
}
- function git()
- {
- $args = func_get_args();
- $a = array(
- "--git-dir=$this->gitdir"
- );
-
-
-
- if ($this->gitdir != $this->repopath) {
- // print_r(array($this->gitdir , $this->repopath));
-
- //$a[] = "--work-tree=$this->repopath";
+ function git()
+ {
+ $args = func_get_args();
+ $a = array(
+ "--git-dir=$this->gitdir"
+ );
+
+
+
+ if ($this->gitdir != $this->repopath) {
+ // print_r(array($this->gitdir , $this->repopath));
+
+ //$a[] = "--work-tree=$this->repopath";
+ }
+ foreach ($args as $arg) {
+ if (is_array($arg)) {
+ $a = array_merge($a, $arg);
+ continue;
+ }
+ $a[] = $arg;
+ }
+ if ($this->debug) {
+ var_dump('git ' . join (' ' , $a));
+ // die("oops");
+ }
+ // echo "git " . implode(" " , $a) . "\n";
+ return MTrackSCM::run('git', 'read', $a);
}
- foreach ($args as $arg) {
- if (is_array($arg)) {
- $a = array_merge($a, $arg);
- continue;
- }
- $a[] = $arg;
+
+
+ function commitLogToEvent($str) {
+ require_once 'MTrack/SCM/Git/Event.php';
+ return MTrack_SCM_Git_Event::newFromCommit($str,$this);
}
- var_dump('git ' . join (' ' , $a));
- //print_r($a);
- return MTrackSCM::run('git', 'read', $a);
- }
+
+
}