removed the top-level directory
This commit is contained in:
108
pecl-svn/examples/hook_copycommit.php
Executable file
108
pecl-svn/examples/hook_copycommit.php
Executable file
@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
example copy on commit hook script
|
||||
usage:
|
||||
php ..path..to..this..file.. hook_copycommit.php "$REPOS" "$REV" "/target/location" >> /tmp/svnlog
|
||||
|
||||
*/
|
||||
dl('svn.so');
|
||||
|
||||
class Subversion_CopyCommit {
|
||||
var $repos;
|
||||
var $rev;
|
||||
var $target; // where the copy goes
|
||||
|
||||
|
||||
function start($args) {
|
||||
print_r($args);
|
||||
list( $cmd , $this->repos, $this->rev , $this->target ) = $args;
|
||||
if (empty($this->target)) {
|
||||
echo "NO TARGET !";exit;
|
||||
}
|
||||
if ($this->repos{0} == '/') {
|
||||
$this->repos = 'file://'. $this->repos;
|
||||
}
|
||||
$this->rev = (int) $this->rev;
|
||||
$ar = svn_log($this->repos, $this->rev, $this->rev-1, 0, SVN_DISCOVER_CHANGED_PATHS);
|
||||
|
||||
|
||||
//print_R($ar);
|
||||
foreach($ar[0]['paths'] as $action) {
|
||||
$this->processAction($action);
|
||||
}
|
||||
}
|
||||
|
||||
function processAction($action)
|
||||
{
|
||||
$this->debug("Action: {$action['action']} on {$action['path']}");
|
||||
switch($action['action']) {
|
||||
case 'M': // modified
|
||||
case 'A': // added.
|
||||
|
||||
/* how to handle moves?? */
|
||||
|
||||
// is it a file or directory?
|
||||
if ($this->isDir($action['path'])) {
|
||||
if (!file_exists($this->target . $action['path'])) {
|
||||
require_once 'System.php';
|
||||
System::mkdir(array('-p',$this->target . $action['path']));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
$this->writeFile($this->target.$action['path'],
|
||||
svn_cat($this->repos . $action['path'],$this->rev)) ;
|
||||
return;
|
||||
|
||||
case 'D': // deleted.
|
||||
if (file_exists($this->target . $action['path'])) {
|
||||
require_once 'System.php';
|
||||
System::rm($this->target . $action['path']);
|
||||
}
|
||||
return;
|
||||
|
||||
case 'R': // replaced????
|
||||
return;
|
||||
}
|
||||
}
|
||||
var $dircache = array();
|
||||
|
||||
function isDir($path)
|
||||
{
|
||||
if (!isset($this->dircache[dirname($path)])) {
|
||||
echo "SVN:LS ".$this->repos.dirname($path) ."\n";
|
||||
$p = strlen(dirname($path)) > 1 ? dirname($path) : '';
|
||||
$this->dircache[dirname($path)]= svn_ls($this->repos.$p,$this->rev);
|
||||
}
|
||||
$ar= $this->dircache[dirname($path)];
|
||||
//print_r($ar);
|
||||
$match = basename($path);
|
||||
foreach($ar as $info) {
|
||||
if ($info['name'] != $match) {
|
||||
continue;
|
||||
}
|
||||
return $info['type'] == 'dir';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function writeFile($target,$data)
|
||||
{
|
||||
if (!file_exists(dirname($target))) {
|
||||
require_once 'System.php';
|
||||
System::mkdir(array('-p', dirname($target)));
|
||||
}
|
||||
$fh = fopen($target,'w');
|
||||
fwrite($fh, $data);
|
||||
fclose($fh);
|
||||
}
|
||||
|
||||
function debug($str)
|
||||
{
|
||||
echo $str."\n";
|
||||
}
|
||||
|
||||
}
|
||||
ini_set('memory_limit','64M');
|
||||
$x = new Subversion_CopyCommit;
|
||||
$x->start($_SERVER['argv']);
|
Reference in New Issue
Block a user