X-Git-Url: http://git.pk910.de/?p=GITManagedWebpage.git;a=blobdiff_plain;f=GITManagedWebpage.class.php;h=3f6ba4aae7772b0ee2d943f53ea4eaa9d57daf94;hp=0cf408ce4bc1550134e1b9ca2908bc86ff820c8e;hb=05088f3fd28b5492259807cd06637980b5ea49b7;hpb=c477361b475653c1d2913d7df2b81d0163a572ca diff --git a/GITManagedWebpage.class.php b/GITManagedWebpage.class.php index 0cf408c..3f6ba4a 100644 --- a/GITManagedWebpage.class.php +++ b/GITManagedWebpage.class.php @@ -90,7 +90,7 @@ class GITManagedWebpage { } else $argstr .= " ".escapeshellarg($arg); } - $gitcmd = 'git '.escapeshellarg('--git-dir='.$this->workdir.'repository/.git').$argstr; + $gitcmd = 'git '.escapeshellarg('--git-dir='.$this->workdir.'repository/.git').' '.escapeshellarg('--work-tree='.$this->workdir.'repository').$argstr; $output = shell_exec($gitcmd); return $output; } @@ -103,6 +103,16 @@ class GITManagedWebpage { $this->config_changed = true; } + private function checkConfigIntegrity() { + foreach($this->config as $key => $value) { + if(substr($key, 0, strlen('branch_')) == 'branch_') { + if(!file_exists($this->workdir.$key)) { + unset($this->config['key']); + } + } + } + } + /* private function getConfig($name) * get an option from the configuration */ @@ -113,6 +123,7 @@ class GITManagedWebpage { if(file_exists($this->workdir."config.txt")) { $config_txt = @file_get_contents($this->workdir."config.txt"); $this->config = unserialize($config_txt); + $this->checkConfigIntegrity(); } else { $this->config = array(); return null; @@ -153,6 +164,14 @@ class GITManagedWebpage { $this->error(self::ERROR_CRITICAL, "error cloning git repository."); return; } + + $fp = fopen($this->workdir.'.htaccess'); + fwrite($fp, ' +Order deny,allow +Deny from all +'); + fclose($fp); + $this->ready = true; $default_branch = str_replace(array("\r", "\n"), array("", ""), $this->gitcmd("rev-parse", "--abbrev-ref", "HEAD")); @@ -218,7 +237,7 @@ class GITManagedWebpage { if($branch == $default_branch) $dir = $this->localdir; else - $dir = $this->workdir.'branch_'.$branch.'/'; + $dir = $this->workdir.'branch_'.str_replace(array('/'), array('_'), $branch).'/'; if(file_exists($dir)) return $dir; else if($create) { @@ -228,21 +247,19 @@ class GITManagedWebpage { return false; } - private function updateBranch($branch, $path) { + private function updateBranch($branch, $path, $force = false) { if(substr($path, -1) != '/') $path .= '/'; $current_branch = str_replace(array("\r", "\n"), array("", ""), $this->gitcmd("rev-parse", "--abbrev-ref", "HEAD")); - if($current_branch != $branch) - $this->gitcmd("checkout", $branch); - $this->gitcmd("pull"); + $this->gitcmd("fetch"); + $this->gitcmd("reset", "--hard", "origin/".$branch); $gitret = $this->gitcmd("rev-list", "--max-count=1", $branch); preg_match("#([a-z0-9]{40})#", $gitret, $match); $newest_version = $match[1]; $deleted_files = array(); if(($current_version = $this->getConfig('version_'.$branch))) { - echo $current_version . " == " . $newest_version; - if($current_version == $newest_version) + if($current_version == $newest_version && !$force) return; else { $override_all = true; @@ -291,17 +308,20 @@ class GITManagedWebpage { if($this->loopedcall) return; - if(!$this->branchExists($branch)) - return false; + if(!$this->branchExists($branch)) { + $this->gitcmd("fetch"); + if(!$this->branchExists('origin/'.$branch)) + return false; + } $this->setActiveBranch($branch, $remember); if(!$this->localBranchPath($branch)) { $dir = $this->localBranchPath($branch, true); - $this->updateBranch($branch, $dir); + $this->updateBranch($branch, $dir, true); } } - public function execute($file = null) { + public function getExecFile($file = null) { if($this->loopedcall) return; define("GITMANAGED_EXECUTED", true); @@ -314,13 +334,14 @@ class GITManagedWebpage { $default_branch = $this->getConfig("defaultbranch"); $active_branch = $this->getActiveBranch(); if($active_branch != $default_branch) { - if(!($dir = $this->localBranchPath($branch))) { + if(!($dir = $this->localBranchPath($active_branch))) { $dir = $this->localBranchPath($active_branch, true); - $this->updateBranch($active_branch, $dir); + $this->updateBranch($active_branch, $dir, true); } - include_once($dir.$file); + chdir($dir); + return $dir.$file; } else { - include_once($this->localdir.$file); + return $file; } }