mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-25 16:22:42 +01:00
b9fa71f7e1
Summary: Currently, if you run `arc` in arcanist/ or libphutil/ and your PATH and on-disk configuration are set up so a different version of arc or libphutil are the ones that actually load, we fail with an exception like "running arcanist in a different copy of arcanist is not supported". This causes problems for Harbormaster, since we'd like to be able to run 'arc' in a copy of libphutil/ and have it execute unit tests for that copy rather than failing abruptly. So, if we detect that we're in arcanist/ or libphutil/, execute 'arc' again with the same arguments but force it to load the working copy in place of either the 'arcanist/' or the 'libphutil/' that it decided to load. This is pretty much horrible black magic. Test Plan: Ran 'arc list --trace' inside copies of libphutil/ and arcanist/ outside of the normal include chain. Saw it detect these, emit a message, and re-execute itself correctly. Reviewers: btrahan, vrana Reviewed By: vrana CC: aran Maniphest Tasks: T1049 Differential Revision: https://secure.phabricator.com/D4225
98 lines
3.4 KiB
PHP
98 lines
3.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Adjust 'include_path' to add locations where we'll search for libphutil.
|
|
* We look in these places:
|
|
*
|
|
* - Next to 'arcanist/'.
|
|
* - Anywhere in the normal PHP 'include_path'.
|
|
* - Inside 'arcanist/externals/includes/'.
|
|
*
|
|
* When looking in these places, we expect to find a 'libphutil/' directory.
|
|
*/
|
|
function arcanist_adjust_php_include_path() {
|
|
|
|
// The 'arcanist/' directory.
|
|
$arcanist_dir = dirname(dirname(__FILE__));
|
|
|
|
// The parent directory of 'arcanist/'.
|
|
$parent_dir = dirname($arcanist_dir);
|
|
|
|
// The 'arcanist/externals/includes/' directory.
|
|
$include_dir = implode(
|
|
DIRECTORY_SEPARATOR,
|
|
array(
|
|
$arcanist_dir,
|
|
'externals',
|
|
'includes',
|
|
));
|
|
|
|
$php_include_path = ini_get('include_path');
|
|
$php_include_path = implode(
|
|
PATH_SEPARATOR,
|
|
array(
|
|
$parent_dir,
|
|
$php_include_path,
|
|
$include_dir,
|
|
));
|
|
|
|
ini_set('include_path', $php_include_path);
|
|
}
|
|
arcanist_adjust_php_include_path();
|
|
|
|
if (getenv('ARC_PHUTIL_PATH')) {
|
|
@include_once getenv('ARC_PHUTIL_PATH').'/scripts/__init_script__.php';
|
|
} else {
|
|
@include_once 'libphutil/scripts/__init_script__.php';
|
|
}
|
|
if (!@constant('__LIBPHUTIL__')) {
|
|
echo "ERROR: Unable to load libphutil. Put libphutil/ next to arcanist/, or ".
|
|
"update your PHP 'include_path' to include the parent directory of ".
|
|
"libphutil/, or symlink libphutil/ into arcanist/externals/includes/.\n";
|
|
exit(1);
|
|
}
|
|
|
|
PhutilTranslator::getInstance()
|
|
->addTranslations(array(
|
|
'Locally modified path(s) are not included in this revision:' => array(
|
|
'A locally modified path is not included in this revision:',
|
|
'Locally modified paths are not included in this revision:',
|
|
),
|
|
'They will NOT be committed. Commit this revision anyway?' => array(
|
|
'It will NOT be committed. Commit this revision anyway?',
|
|
'They will NOT be committed. Commit this revision anyway?',
|
|
),
|
|
'Revision includes changes to path(s) that do not exist:' => array(
|
|
'Revision includes changes to a path that does not exist:',
|
|
'Revision includes changes to paths that do not exist:',
|
|
),
|
|
|
|
'This diff includes file(s) which are not valid UTF-8 (they contain '.
|
|
'invalid byte sequences). You can either stop this workflow and fix '.
|
|
'these files, or continue. If you continue, these files will be '.
|
|
'marked as binary.' => array(
|
|
'This diff includes a file which is not valid UTF-8 (it has invalid '.
|
|
'byte sequences). You can either stop this workflow and fix it, or '.
|
|
'continue. If you continue, this file will be marked as binary.',
|
|
'This diff includes files which are not valid UTF-8 (they contain '.
|
|
'invalid byte sequences). You can either stop this workflow and fix '.
|
|
'these files, or continue. If you continue, these files will be '.
|
|
'marked as binary.',
|
|
),
|
|
'AFFECTED FILE(S)' => array('AFFECTED FILE', 'AFFECTED FILES'),
|
|
'Do you want to mark these files as binary and continue?' => array(
|
|
'Do you want to mark this file as binary and continue?',
|
|
'Do you want to mark these files as binary and continue?',
|
|
),
|
|
|
|
'line(s)' => array('line', 'lines'),
|
|
|
|
'%d test(s)' => array('%d test', '%d tests'),
|
|
|
|
'%d assertion(s) passed.' => array(
|
|
'%d assertion passed.',
|
|
'%d assertions passed.',
|
|
),
|
|
));
|
|
|
|
phutil_load_library(dirname(dirname(__FILE__)).'/src/');
|