*/␊ |
class IDF_Scm_Svn extends IDF_Scm␊ |
{␊ |
public $repo = '';␊ |
␊ |
public $username = '';␊ |
public $password = '';␊ |
private $assoc = array('dir' => 'tree',␊ |
'file' => 'blob');␊ |
␊ |
private $commit=array();␊ |
␊ |
public function __construct($repo, $project=null, $username='', $password='')␊ |
public function __construct($repo, $project=null)␊ |
{␊ |
$this->repo = $repo;␊ |
$this->project = $project;␊ |
$this->username = $username;␊ |
$this->password = $password;␊ |
$this->cache['commitmess'] = array();␊ |
}␊ |
␊ |
|
if (false !== ($rep=$conf->getVal('svn_remote_url', false)) ␊ |
&& !empty($rep)) {␊ |
// Remote repository␊ |
return new IDF_Scm_Svn($rep, $project,␊ |
$conf->getVal('svn_username'),␊ |
$conf->getVal('svn_password'));␊ |
$scm = new IDF_Scm_Svn($rep, $project);␊ |
$scm->username = $conf->getVal('svn_username');␊ |
$scm->password = $conf->getVal('svn_password');␊ |
} else {␊ |
$rep = sprintf(Pluf::f('svn_repositories'), $project->shortname);␊ |
return new IDF_Scm_Svn($rep, $project);␊ |
|
return 'commit';␊ |
}␊ |
␊ |
public function getTree($rev='HEAD', $folder='')␊ |
public function getTree($commit, $folder='/', $branch=null)␊ |
{␊ |
$cmd = sprintf(Pluf::f('svn_path', 'svn').' ls --xml --username=%s --password=%s %s@%s',␊ |
escapeshellarg($this->username),␊ |
|
/**␊ |
* FIXME: Need to check the case of an inexisting file.␊ |
*/␊ |
public function getPathInfo($totest, $rev='HEAD')␊ |
public function getPathInfo($file, $rev=null)␊ |
{␊ |
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --xml --username=%s --password=%s %s@%s',␊ |
escapeshellarg($this->username),␊ |
escapeshellarg($this->password),␊ |
escapeshellarg($this->repo.'/'.$totest),␊ |
escapeshellarg($this->repo.'/'.$file),␊ |
escapeshellarg($rev));␊ |
$xml = simplexml_load_string(shell_exec($cmd));␊ |
$entry = $xml->entry;␊ |
$file = array();␊ |
$file['fullpath'] = $totest;␊ |
$file['fullpath'] = $file;␊ |
$file['hash'] = (string) $entry->repository->uuid;␊ |
$file['type'] = $this->assoc[(string) $entry['kind']];␊ |
$file['file'] = $totest;␊ |
$file['file'] = $file;␊ |
$file['rev'] = $rev; ␊ |
$file['author'] = (string) $entry->author;␊ |
$file['date'] = gmdate('Y-m-d H:i:s', strtotime((string) $entry->commit->date));␊ |
|
return (object) $file;␊ |
}␊ |
␊ |
public function getFile($def)␊ |
public function getFile($def, $cmd_only=false)␊ |
{␊ |
$cmd = sprintf(Pluf::f('svn_path', 'svn').' cat --username=%s --password=%s %s@%s',␊ |
escapeshellarg($this->username),␊ |
escapeshellarg($this->password),␊ |
escapeshellarg($this->repo.'/'.$def->fullpath),␊ |
escapeshellarg($def->rev));␊ |
return shell_exec($cmd);␊ |
return ($cmd_only) ? $cmd : shell_exec($cmd);␊ |
}␊ |
␊ |
/**␊ |
|
/**␊ |
* Get commit details.␊ |
*␊ |
* @param string Commit ('HEAD')␊ |
* @param string Commit␊ |
* @param bool Get commit diff (false)␊ |
* @return array Changes␊ |
*/␊ |
public function getCommit($rev='HEAD', $getdiff=false)␊ |
public function getCommit($commit, $getdiff=false)␊ |
{␊ |
$res = array();␊ |
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --xml --limit 1 -v --username=%s --password=%s %s@%s',␊ |
|
*␊ |
* @return array Changes.␊ |
*/␊ |
public function getChangeLog($rev='HEAD', $n=10)␊ |
public function getChangeLog($branch=null, $n=10)␊ |
{␊ |
if ($rev != 'HEAD' and !preg_match('/^\d+$/', $rev)) {␊ |
if ($branch != 'HEAD' and !preg_match('/^\d+$/', $branch)) {␊ |
// we accept only revisions or HEAD␊ |
$rev = 'HEAD';␊ |
$branch = 'HEAD';␊ |
}␊ |
$res = array();␊ |
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --xml -v --limit %s --username=%s --password=%s %s@%s',␊ |
|
escapeshellarg($this->username),␊ |
escapeshellarg($this->password),␊ |
escapeshellarg($this->repo),␊ |
escapeshellarg($rev));␊ |
escapeshellarg($branch));␊ |
$xmlRes = shell_exec($cmd);␊ |
$xml = simplexml_load_string($xmlRes);␊ |
foreach ($xml->logentry as $entry) {␊ |