Progress implementing GitRepo class in Zotlabs/Storage
This commit is contained in:
parent
6950100ff4
commit
852ff39856
@ -1,19 +1,106 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
namespace Zotlabs\Storage;
|
||||
|
||||
use PHPGit\Git as PHPGit;
|
||||
|
||||
require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
|
||||
require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
|
||||
|
||||
/**
|
||||
* Description of Git
|
||||
*
|
||||
* @author andrew
|
||||
* @author Andrew Manning <andrewmanning@grid.reticu.li>
|
||||
*/
|
||||
class Git {}
|
||||
class GitRepo {
|
||||
|
||||
public $url = null;
|
||||
public $name = null;
|
||||
public $path = null;
|
||||
private $repoID = null;
|
||||
private $channel = null;
|
||||
private $git = null;
|
||||
private $repoBasePath = __DIR__ . '/../../store/git';
|
||||
|
||||
function __construct($channel = 'sys', $name = null, $url = null, $clone = false) {
|
||||
$this->channel = $channel;
|
||||
$this->git = new PHPGit();
|
||||
if ($name) {
|
||||
$this->name = $name;
|
||||
$this->path = $this->repoBasePath . "/" . $this->channel . "/" . $this->name;
|
||||
if (file_exists($this->path)) {
|
||||
// ignore the $url input if it exists
|
||||
$this->git->setRepository($this->path);
|
||||
// TODO: get repo metadata
|
||||
} else if ($url && validate_url($url)) {
|
||||
$this->url = $url;
|
||||
$this->repoID = random_string();
|
||||
// create the folder and clone the repo at url to that folder if $clone is true
|
||||
if ($clone) {
|
||||
if (mkdir($this->path, 0770, true)) {
|
||||
$this->git->setRepository($this->path);
|
||||
if (!$this->cloneRepo()) {
|
||||
// TODO: throw error
|
||||
logger('git clone failed: ' . json_encode($this->git));
|
||||
}
|
||||
} else {
|
||||
logger('git repo path could not be created: ' . json_encode($this->git));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Construct an empty GitRepo object
|
||||
//$this->name = random_string(32);
|
||||
//$this->repoID = random_string();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* delete repository from disk
|
||||
*/
|
||||
public function delete() {
|
||||
return $this->delTree($this->getRepoPath());
|
||||
}
|
||||
|
||||
public function getRepoPath() {
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
public function setRepoPath($directory) {
|
||||
if (file_exists($directory)) {
|
||||
$this->path->$directory;
|
||||
$this->git->setRepository($directory);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getRepoID() {
|
||||
return $this->repoID;
|
||||
}
|
||||
|
||||
public function setIdentity($user_name, $user_email) {
|
||||
// setup user for commit messages
|
||||
$this->git->config->set("user.name", $user_name, ['global' => false, 'system' => false]);
|
||||
$this->git->config->set("user.email", $user_email, ['global' => false, 'system' => false]);
|
||||
}
|
||||
|
||||
public function cloneRepo() {
|
||||
if (validate_url($this->url) && file_exists($this->path)) {
|
||||
return $this->git->clone($this->url, $this->path);
|
||||
}
|
||||
}
|
||||
|
||||
public static function probeRepo($dir) {
|
||||
if (!file_exists($dir)) {
|
||||
return null;
|
||||
}
|
||||
$git = new PHPGit();
|
||||
$git->setRepository($dir);
|
||||
$repo = array();
|
||||
$repo['remote'] = $git->remote();
|
||||
$repo['branches'] = $git->branch(['all' => true]);
|
||||
$repo['logs'] = $git->log(array('limit' => 50));
|
||||
return $repo;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user