mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-09 16:32:39 +01:00
Improve error messages when trying to parse bad .arcconfig files.
Summary: Haiping is getting a pretty confusing error message when trying to commit. Test Plan: Created a mock repository, installed the hook, made commits against directories with bad .arcconfigs. Reviewers: CC:
This commit is contained in:
parent
c13147cf53
commit
651f567f96
5 changed files with 25 additions and 15 deletions
|
@ -82,10 +82,13 @@ try {
|
|||
if ($config_trace_mode) {
|
||||
echo "Loading phutil library '{$name}' from '{$location}'...\n";
|
||||
}
|
||||
$library_root = Filesystem::resolvePath(
|
||||
$resolved_location = Filesystem::resolvePath(
|
||||
$location,
|
||||
$working_copy->getProjectRoot());
|
||||
phutil_load_library($library_root);
|
||||
if (Filesystem::pathExists($resolved_location)) {
|
||||
$location = $resolved_location;
|
||||
}
|
||||
phutil_load_library($location);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ class ArcanistSubversionAPI extends ArcanistRepositoryAPI {
|
|||
|
||||
protected $svnInfoRaw = array();
|
||||
protected $svnDiffRaw = array();
|
||||
|
||||
|
||||
private $svnBaseRevisionNumber;
|
||||
|
||||
public function getSourceControlSystemName() {
|
||||
|
@ -165,7 +165,7 @@ class ArcanistSubversionAPI extends ArcanistRepositoryAPI {
|
|||
$info = $this->getSVNInfo('/');
|
||||
return $info['URL'].'@'.$this->getSVNBaseRevisionNumber();
|
||||
}
|
||||
|
||||
|
||||
public function getSVNBaseRevisionNumber() {
|
||||
if ($this->svnBaseRevisionNumber) {
|
||||
return $this->svnBaseRevisionNumber;
|
||||
|
@ -173,7 +173,7 @@ class ArcanistSubversionAPI extends ArcanistRepositoryAPI {
|
|||
$info = $this->getSVNInfo('/');
|
||||
return $info['Revision'];
|
||||
}
|
||||
|
||||
|
||||
public function overrideSVNBaseRevisionNumber($effective_base_revision) {
|
||||
$this->svnBaseRevisionNumber = $effective_base_revision;
|
||||
return $this;
|
||||
|
|
|
@ -522,7 +522,7 @@ EOTEXT
|
|||
$revlist);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// If you have a change which affects several files, all of which are
|
||||
// at a consistent base revision, treat that revision as the effective
|
||||
// base revision. The use case here is that you made a change to some
|
||||
|
|
|
@ -190,7 +190,8 @@ EOTEXT
|
|||
|
||||
$working_copy = ArcanistWorkingCopyIdentity::newFromRootAndConfigFile(
|
||||
$project_root,
|
||||
$config);
|
||||
$config,
|
||||
$config_file." (svnlook: {$transaction} {$repository})");
|
||||
|
||||
$lint_engine = $working_copy->getConfig('lint_engine');
|
||||
if (!$lint_engine) {
|
||||
|
|
|
@ -36,24 +36,30 @@ class ArcanistWorkingCopyIdentity {
|
|||
continue;
|
||||
}
|
||||
$proj_raw = Filesystem::readFile($config_file);
|
||||
$config = self::parseRawConfigFile($proj_raw);
|
||||
$config = self::parseRawConfigFile($proj_raw, $config_file);
|
||||
$project_root = $dir;
|
||||
break;
|
||||
}
|
||||
return new ArcanistWorkingCopyIdentity($project_root, $config);
|
||||
}
|
||||
|
||||
public static function newFromRootAndConfigFile($root, $config_raw) {
|
||||
$config = self::parseRawConfigFile($config_raw);
|
||||
public static function newFromRootAndConfigFile(
|
||||
$root,
|
||||
$config_raw,
|
||||
$from_where) {
|
||||
|
||||
$config = self::parseRawConfigFile($config_raw, $from_where);
|
||||
return new ArcanistWorkingCopyIdentity($root, $config);
|
||||
}
|
||||
|
||||
private static function parseRawConfigFile($raw_config) {
|
||||
private static function parseRawConfigFile($raw_config, $from_where) {
|
||||
$proj = json_decode($raw_config, true);
|
||||
if (!is_array($proj)) {
|
||||
throw new Exception(
|
||||
"Unable to parse '.arcconfig' file in '{$dir}'. The file contents ".
|
||||
"should be valid JSON.");
|
||||
"Unable to parse '.arcconfig' file '{$from_where}'. The file contents ".
|
||||
"should be valid JSON.\n\n".
|
||||
"FILE CONTENTS\n".
|
||||
substr($raw_config, 0, 2048));
|
||||
}
|
||||
$required_keys = array(
|
||||
'project_id',
|
||||
|
@ -61,8 +67,8 @@ class ArcanistWorkingCopyIdentity {
|
|||
foreach ($required_keys as $key) {
|
||||
if (!array_key_exists($key, $proj)) {
|
||||
throw new Exception(
|
||||
"Required key '{$key}' is missing from '.arcconfig' file in ".
|
||||
"'{$dir}'.");
|
||||
"Required key '{$key}' is missing from '.arcconfig' file ".
|
||||
"'{$from_where}'.");
|
||||
}
|
||||
}
|
||||
return $proj;
|
||||
|
|
Loading…
Reference in a new issue