mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-21 22:32:41 +01:00
Provide a better error message for 'arc patch' when patches fail.
Summary: Be more clear about what happened. Test Plan: ran 'arc patch' on good/bad patches Differential Revision: 201085 Reviewed By: adonohue Reviewers: adonohue CC: adonohue Revert Plan: OK
This commit is contained in:
parent
8c73ed915d
commit
50f42aad8d
2 changed files with 29 additions and 3 deletions
|
@ -20,7 +20,7 @@ class ArcanistDiffWorkflow extends ArcanistBaseWorkflow {
|
||||||
|
|
||||||
private $hasWarnedExternals = false;
|
private $hasWarnedExternals = false;
|
||||||
private $unresolvedLint;
|
private $unresolvedLint;
|
||||||
private $unresolvedUnit;
|
private $unresolvedTests;
|
||||||
|
|
||||||
public function getCommandHelp() {
|
public function getCommandHelp() {
|
||||||
return phutil_console_format(<<<EOTEXT
|
return phutil_console_format(<<<EOTEXT
|
||||||
|
|
|
@ -162,6 +162,8 @@ EOTEXT
|
||||||
|
|
||||||
$repository_api = $this->getRepositoryAPI();
|
$repository_api = $this->getRepositoryAPI();
|
||||||
if ($repository_api instanceof ArcanistSubversionAPI) {
|
if ($repository_api instanceof ArcanistSubversionAPI) {
|
||||||
|
$patch_err = 0;
|
||||||
|
|
||||||
$copies = array();
|
$copies = array();
|
||||||
$deletes = array();
|
$deletes = array();
|
||||||
$patches = array();
|
$patches = array();
|
||||||
|
@ -248,11 +250,16 @@ EOTEXT
|
||||||
foreach ($patches as $path => $patch) {
|
foreach ($patches as $path => $patch) {
|
||||||
$tmp = new TempFile();
|
$tmp = new TempFile();
|
||||||
Filesystem::writeFile($tmp, $patch);
|
Filesystem::writeFile($tmp, $patch);
|
||||||
|
$err = null;
|
||||||
passthru(
|
passthru(
|
||||||
csprintf(
|
csprintf(
|
||||||
'(cd %s; patch -p0 < %s)',
|
'(cd %s; patch -p0 < %s)',
|
||||||
$repository_api->getPath(),
|
$repository_api->getPath(),
|
||||||
$tmp));
|
$tmp),
|
||||||
|
$err);
|
||||||
|
if ($err) {
|
||||||
|
$patch_err = max($patch_err, $err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($adds as $add) {
|
foreach ($adds as $add) {
|
||||||
|
@ -286,13 +293,32 @@ EOTEXT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Applied patch.\n";
|
if ($patch_err == 0) {
|
||||||
|
echo phutil_console_format(
|
||||||
|
"<bg:green>** OKAY **</bg> Successfully applied patch to the ".
|
||||||
|
"working copy.\n");
|
||||||
|
} else {
|
||||||
|
echo phutil_console_format(
|
||||||
|
"\n\n<bg:yellow>** WARNING **</bg> Some hunks could not be applied ".
|
||||||
|
"cleanly by the unix 'patch' utility. Your working copy may be ".
|
||||||
|
"different from the revision's base, or you may be in the wrong ".
|
||||||
|
"subdirectory. You can export the raw patch file using ".
|
||||||
|
"'arc export --unified', and then try to apply it by fiddling with ".
|
||||||
|
"options to 'patch' (particularly, -p), or manually. The output ".
|
||||||
|
"above, from 'patch', may be helpful in figuring out what went ".
|
||||||
|
"wrong.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $patch_err;
|
||||||
} else {
|
} else {
|
||||||
$future = new ExecFuture(
|
$future = new ExecFuture(
|
||||||
'(cd %s; git apply --index)',
|
'(cd %s; git apply --index)',
|
||||||
$repository_api->getPath());
|
$repository_api->getPath());
|
||||||
$future->write($bundle->toGitPatch());
|
$future->write($bundle->toGitPatch());
|
||||||
$future->resolvex();
|
$future->resolvex();
|
||||||
|
|
||||||
|
echo phutil_console_format(
|
||||||
|
"<bg:green>** OKAY **</bg> Successfully applied patch.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue