public static function commit_hook($path, $revision, $message) { Log::debug(sprintf('commit hook: %s %d "%s"', $path, $revision, $message)); $changed = Subversion::look('changed', array($path), array('revision' => $revision)); $author = trim(Subversion::look('author', array($path), array('revision' => $revision))); $parsed_changed = self::parse_svnlook_changed($changed); list($package_name) = explode('/', $parsed_changed[0]['path']); try { $package = C(OpenpearPackage)->find_get(Q::eq('name', $package_name)); $maintainer = null; try { if ($author == OpenpearConfig::system_user('openpear') && preg_match('/\\(@(.*?)\\)$/', trim($message), $match)) { $author = $match[1]; } $maintainer = C(OpenpearMaintainer)->find_get(Q::eq('name', $author)); } catch (Exception $e) { Log::error($e); // throw $e; } $changeset = new self(); $changeset->revision($revision); if ($maintainer instanceof OpenpearMaintainer) { $changeset->maintainer_id($maintainer->id()); } $changeset->package_id($package->id()); $changeset->changed(serialize($parsed_changed)); $changeset->save(); if ($maintainer instanceof OpenpearMaintainer) { $package->author_id($maintainer->id()); } $package->recent_changeset($changeset->revision()); $package->save(true); } catch (Exception $e) { throw $e; } try { chdir(OpenpearConfig::working_copy()); ob_start(); passthru('svn up'); ob_end_clean(); } catch (Exception $e) { } }