Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15283874
D12690.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
12 KB
Referenced Files
None
Subscribers
None
D12690.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -84,7 +84,6 @@
'ArcanistGeneratedLinterTestCase' => 'lint/linter/__tests__/ArcanistGeneratedLinterTestCase.php',
'ArcanistGetConfigWorkflow' => 'workflow/ArcanistGetConfigWorkflow.php',
'ArcanistGitAPI' => 'repository/api/ArcanistGitAPI.php',
- 'ArcanistGitHookPreReceiveWorkflow' => 'workflow/ArcanistGitHookPreReceiveWorkflow.php',
'ArcanistGoLintLinter' => 'lint/linter/ArcanistGoLintLinter.php',
'ArcanistGoLintLinterTestCase' => 'lint/linter/__tests__/ArcanistGoLintLinterTestCase.php',
'ArcanistGoTestResultParser' => 'unit/parser/ArcanistGoTestResultParser.php',
@@ -177,7 +176,6 @@
'ArcanistSubversionAPI' => 'repository/api/ArcanistSubversionAPI.php',
'ArcanistSubversionHookAPI' => 'repository/hookapi/ArcanistSubversionHookAPI.php',
'ArcanistSummaryLintRenderer' => 'lint/renderer/ArcanistSummaryLintRenderer.php',
- 'ArcanistSvnHookPreCommitWorkflow' => 'workflow/ArcanistSvnHookPreCommitWorkflow.php',
'ArcanistTasksWorkflow' => 'workflow/ArcanistTasksWorkflow.php',
'ArcanistTestCase' => 'infrastructure/testing/ArcanistTestCase.php',
'ArcanistTestResultParser' => 'unit/parser/ArcanistTestResultParser.php',
@@ -283,7 +281,6 @@
'ArcanistGeneratedLinterTestCase' => 'ArcanistLinterTestCase',
'ArcanistGetConfigWorkflow' => 'ArcanistWorkflow',
'ArcanistGitAPI' => 'ArcanistRepositoryAPI',
- 'ArcanistGitHookPreReceiveWorkflow' => 'ArcanistWorkflow',
'ArcanistGoLintLinter' => 'ArcanistExternalLinter',
'ArcanistGoLintLinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistGoTestResultParser' => 'ArcanistTestResultParser',
@@ -362,7 +359,6 @@
'ArcanistSubversionAPI' => 'ArcanistRepositoryAPI',
'ArcanistSubversionHookAPI' => 'ArcanistHookAPI',
'ArcanistSummaryLintRenderer' => 'ArcanistLintRenderer',
- 'ArcanistSvnHookPreCommitWorkflow' => 'ArcanistWorkflow',
'ArcanistTasksWorkflow' => 'ArcanistWorkflow',
'ArcanistTestCase' => 'ArcanistPhutilTestCase',
'ArcanistTestXHPASTLintSwitchHook' => 'ArcanistXHPASTLintSwitchHook',
diff --git a/src/workflow/ArcanistGitHookPreReceiveWorkflow.php b/src/workflow/ArcanistGitHookPreReceiveWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistGitHookPreReceiveWorkflow.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
-/**
- * Installable as a git pre-receive hook.
- */
-final class ArcanistGitHookPreReceiveWorkflow extends ArcanistWorkflow {
-
- public function getWorkflowName() {
- return 'git-hook-pre-receive';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **git-hook-pre-receive**
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Supports: git
- You can install this as a git pre-receive hook.
-EOTEXT
- );
- }
-
- public function getArguments() {
- return array(
- );
- }
-
- public function requiresConduit() {
- return true;
- }
-
- public function requiresWorkingCopy() {
- return true;
- }
-
- protected function shouldShellComplete() {
- return false;
- }
-
- public function getSupportedRevisionControlSystems() {
- return array('git');
- }
-
- public function run() {
- $working_copy = $this->getWorkingCopy();
- if (!$working_copy->getProjectID()) {
- throw new ArcanistUsageException(
- 'You have installed a git pre-receive hook in a remote without an '.
- '.arcconfig.');
- }
-
- // Git repositories have special rules in pre-receive hooks. We need to
- // construct the API against the .git directory instead of the project
- // root or commands don't work properly.
- $repository_api = ArcanistGitAPI::newHookAPI($_SERVER['PWD']);
-
- $root = $working_copy->getProjectRoot();
-
- $parser = new ArcanistDiffParser();
-
- $mark_revisions = array();
-
- $stdin = file_get_contents('php://stdin');
- $commits = array_filter(explode("\n", $stdin));
- foreach ($commits as $commit) {
- list($old_ref, $new_ref, $refname) = explode(' ', $commit);
-
- list($log) = execx(
- '(cd %s && git log -n1 %s)',
- $repository_api->getPath(),
- $new_ref);
- $message_log = reset($parser->parseDiff($log));
- $message = ArcanistDifferentialCommitMessage::newFromRawCorpus(
- $message_log->getMetadata('message'));
-
- $revision_id = $message->getRevisionID();
- if ($revision_id) {
- $mark_revisions[] = $revision_id;
- }
-
- // TODO: Do commit message junk.
-
- $info = $repository_api->getPreReceiveHookStatus($old_ref, $new_ref);
- $paths = ipull($info, 'mask');
- $frefs = ipull($info, 'ref');
- $data = array();
- foreach ($paths as $path => $mask) {
- list($stdout) = execx(
- '(cd %s && git cat-file blob %s)',
- $repository_api->getPath(),
- $frefs[$path]);
- $data[$path] = $stdout;
- }
-
- // TODO: Do commit content junk.
-
- $commit_name = $new_ref;
- if ($revision_id) {
- $commit_name = 'D'.$revision_id.' ('.$commit_name.')';
- }
-
- echo "[arc pre-receive] {$commit_name} OK...\n";
- }
-
- $conduit = $this->getConduit();
-
- $futures = array();
- foreach ($mark_revisions as $revision_id) {
- $futures[] = $conduit->callMethod(
- 'differential.close',
- array(
- 'revisionID' => $revision_id,
- ));
- }
-
- id(new FutureIterator($futures))
- ->resolveAll();
-
- return 0;
- }
-
-}
diff --git a/src/workflow/ArcanistSvnHookPreCommitWorkflow.php b/src/workflow/ArcanistSvnHookPreCommitWorkflow.php
deleted file mode 100644
--- a/src/workflow/ArcanistSvnHookPreCommitWorkflow.php
+++ /dev/null
@@ -1,234 +0,0 @@
-<?php
-
-/**
- * Installable as an SVN "pre-commit" hook.
- */
-final class ArcanistSvnHookPreCommitWorkflow extends ArcanistWorkflow {
-
- public function getWorkflowName() {
- return 'svn-hook-pre-commit';
- }
-
- public function getCommandSynopses() {
- return phutil_console_format(<<<EOTEXT
- **svn-hook-pre-commit** __repository__ __transaction__
-EOTEXT
- );
- }
-
- public function getCommandHelp() {
- return phutil_console_format(<<<EOTEXT
- Supports: svn
- You can install this as an SVN pre-commit hook. For more information,
- see the article "Installing Arcanist SVN Hooks" in the Arcanist
- documentation.
-EOTEXT
- );
- }
-
- public function getArguments() {
- return array(
- '*' => 'svnargs',
- );
- }
-
- protected function shouldShellComplete() {
- return false;
- }
-
- public function getSupportedRevisionControlSystems() {
- return array('svn');
- }
-
- public function run() {
- $svnargs = $this->getArgument('svnargs');
- $repository = $svnargs[0];
- $transaction = $svnargs[1];
-
- list($commit_message) = execx(
- 'svnlook log --transaction %s %s',
- $transaction,
- $repository);
-
- if (strpos($commit_message, '@bypass-lint') !== false) {
- return 0;
- }
-
-
- // TODO: Do stuff with commit message.
-
- list($changed) = execx(
- 'svnlook changed --transaction %s %s',
- $transaction,
- $repository);
-
- $paths = array();
- $changed = explode("\n", trim($changed));
- foreach ($changed as $line) {
- $matches = null;
- preg_match('/^..\s*(.*)$/', $line, $matches);
- $paths[$matches[1]] = strlen($matches[1]);
- }
-
- $resolved = array();
- $failed = array();
- $missing = array();
- $found = array();
- asort($paths);
-
- foreach ($paths as $path => $length) {
- foreach ($resolved as $rpath => $root) {
- if (!strncmp($path, $rpath, strlen($rpath))) {
- $resolved[$path] = $root;
- continue 2;
- }
- }
- $config = $path;
-
- if (basename($config) == '.arcconfig') {
- $resolved[$config] = $config;
- continue;
- }
-
- $config = rtrim($config, '/');
- $last_config = $config;
- do {
- if (!empty($missing[$config])) {
- break;
- } else if (!empty($found[$config])) {
- $resolved[$path] = $found[$config];
- break;
- }
- list($err) = exec_manual(
- 'svnlook cat --transaction %s %s %s',
- $transaction,
- $repository,
- $config ? $config.'/.arcconfig' : '.arcconfig');
- if ($err) {
- $missing[$path] = true;
- } else {
- $resolved[$path] = $config ? $config.'/.arcconfig' : '.arcconfig';
- $found[$config] = $resolved[$path];
- break;
- }
- $config = dirname($config);
- if ($config == '.') {
- $config = '';
- }
- if ($config == $last_config) {
- break;
- }
- $last_config = $config;
- } while (true);
-
- if (empty($resolved[$path])) {
- $failed[] = $path;
- }
- }
-
- if ($failed && $resolved) {
- $failed_paths = ' '.implode("\n ", $failed);
- $resolved_paths = ' '.implode("\n ", array_keys($resolved));
- throw new ArcanistUsageException(
- "This commit includes a mixture of files in Arcanist projects and ".
- "outside of Arcanist projects. A commit which affects an Arcanist ".
- "project must affect only that project.\n\n".
- "Files in projects:\n\n".
- $resolved_paths."\n\n".
- "Files not in projects:\n\n".
- $failed_paths);
- }
-
- if (!$resolved) {
- // None of the affected paths are beneath a .arcconfig file.
- return 0;
- }
-
- $groups = array();
- foreach ($resolved as $path => $project) {
- $groups[$project][] = $path;
- }
- if (count($groups) > 1) {
- $message = array();
- foreach ($groups as $project => $group) {
- $message[] = "Files underneath '{$project}':\n\n";
- $message[] = " ".implode("\n ", $group)."\n\n";
- }
- $message = implode('', $message);
- throw new ArcanistUsageException(
- "This commit includes a mixture of files from different Arcanist ".
- "projects. A commit which affects an Arcanist project must affect ".
- "only that project.\n\n".
- $message);
- }
-
- $config_file = key($groups);
- $project_root = dirname($config_file);
- $paths = reset($groups);
-
- list($config) = execx(
- 'svnlook cat --transaction %s %s %s',
- $transaction,
- $repository,
- $config_file);
-
- $working_copy = ArcanistWorkingCopyIdentity::newFromRootAndConfigFile(
- $project_root,
- $config,
- $config_file." (svnlook: {$transaction} {$repository})");
-
- $repository_api = new ArcanistSubversionHookAPI(
- $project_root,
- $transaction,
- $repository);
-
- $lint_engine = $working_copy->getProjectConfig('lint.engine');
- if (!$lint_engine) {
- return 0;
- }
-
- $engine = newv($lint_engine, array());
- $engine->setWorkingCopy($working_copy);
- $engine->setConfigurationManager($this->getConfigurationManager());
- $engine->setMinimumSeverity(ArcanistLintSeverity::SEVERITY_ERROR);
- $engine->setPaths($paths);
- $engine->setCommitHookMode(true);
- $engine->setHookAPI($repository_api);
-
- try {
- $results = $engine->run();
- } catch (ArcanistNoEffectException $no_effect) {
- // Nothing to do, bail out.
- return 0;
- }
-
- $failures = array();
- foreach ($results as $result) {
- if (!$result->getMessages()) {
- continue;
- }
- $failures[] = $result;
- }
-
- if ($failures) {
- $at = '@';
- $msg = phutil_console_format(
- "\n**LINT ERRORS**\n\n".
- "This changeset has lint errors. You must fix all lint errors before ".
- "you can commit.\n\n".
- "You can add '{$at}bypass-lint' to your commit message to disable ".
- "lint checks for this commit, or '{$at}nolint' to the file with ".
- "errors to disable lint for that file.\n\n");
- echo phutil_console_wrap($msg);
-
- $renderer = new ArcanistConsoleLintRenderer();
- foreach ($failures as $result) {
- echo $renderer->renderLintResult($result);
- }
- return 1;
- }
-
- return 0;
- }
-
-}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 5, 8:48 AM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7224310
Default Alt Text
D12690.diff (12 KB)
Attached To
Mode
D12690: Remove pre-commit hooks
Attached
Detach File
Event Timeline
Log In to Comment