mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-08 16:02:39 +01:00
Reduce the strength of "arc executing on arc" from an error to a warning
Summary: See PHI13. This was introduced a very, very long time ago in D311 and D312, and I think T168 was the original report. It prevents `arc` from being used in some semi-reasonable (maybe?) automation workflows where you're hooking some version of "Land Revision" up to `arc land`. This isn't necessarily the right approach, but I think the concession here to make this work is small. Running `arc` against another copy of `arc` makes `arc unit` not work, but we provide a good error message. Most other `arc` operations still work correctly. All of these situations are bizarre edge cases but I think we can safely warn and continue here. Even if we revert this behavior later, almost no one should be affected, since this essentially only impacts users developing `arc` itself. Test Plan: Ran one copy of `arc` against another, saw a warning instead of an error. `arc unit` failed, but with a good error. Reviewers: chad, jmeador Reviewed By: jmeador Differential Revision: https://secure.phabricator.com/D18264
This commit is contained in:
parent
165df12046
commit
7bb8dbabce
1 changed files with 27 additions and 10 deletions
|
@ -641,16 +641,33 @@ function arcanist_load_libraries(
|
||||||
if ($ex->getLibrary() != 'arcanist') {
|
if ($ex->getLibrary() != 'arcanist') {
|
||||||
throw $ex;
|
throw $ex;
|
||||||
}
|
}
|
||||||
$arc_dir = dirname(dirname(__FILE__));
|
|
||||||
$error = pht(
|
// NOTE: If you are running `arc` against itself, we ignore the library
|
||||||
"You are trying to run one copy of Arcanist on another copy of ".
|
// conflict created by loading the local `arc` library (in the current
|
||||||
"Arcanist. This operation is not supported. To execute Arcanist ".
|
// working directory) and continue without loading it.
|
||||||
"operations against this working copy, run `%s` (from the current ".
|
|
||||||
"working copy) not some other copy of '%s' (you ran one from '%s').",
|
// This means we only execute code in the `arcanist/` directory which is
|
||||||
'./bin/arc',
|
// associated with the binary you are running, whereas we would normally
|
||||||
'arc',
|
// execute local code.
|
||||||
$arc_dir);
|
|
||||||
throw new ArcanistUsageException($error);
|
// This can make `arc` development slightly confusing if your setup is
|
||||||
|
// especially bizarre, but it allows `arc` to be used in automation
|
||||||
|
// workflows more easily. For some context, see PHI13.
|
||||||
|
|
||||||
|
$executing_directory = dirname(dirname(__FILE__));
|
||||||
|
$working_directory = dirname($location);
|
||||||
|
|
||||||
|
fwrite(
|
||||||
|
STDERR,
|
||||||
|
tsprintf(
|
||||||
|
"**<bg:yellow> %s </bg>** %s\n",
|
||||||
|
pht('VERY META'),
|
||||||
|
pht(
|
||||||
|
'You are running one copy of Arcanist (at path "%s") against '.
|
||||||
|
'another copy of Arcanist (at path "%s"). Code in the current '.
|
||||||
|
'working directory will not be loaded or executed.',
|
||||||
|
$executing_directory,
|
||||||
|
$working_directory)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue