1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-22 14:52:40 +01:00

Make all the working-copy-paths errors extremely explicit.

This commit is contained in:
epriestley 2011-03-12 18:16:15 -08:00
parent 982e482290
commit 628de7d7a1
3 changed files with 37 additions and 13 deletions

View file

@ -50,6 +50,7 @@ phutil_register_library_map(array(
'ArcanistNoEffectException' => 'exception/usage/noeffect', 'ArcanistNoEffectException' => 'exception/usage/noeffect',
'ArcanistNoEngineException' => 'exception/usage/noengine', 'ArcanistNoEngineException' => 'exception/usage/noengine',
'ArcanistNoLintLinter' => 'lint/linter/nolint', 'ArcanistNoLintLinter' => 'lint/linter/nolint',
'ArcanistNoLintTestCaseMisnamed' => 'lint/linter/nolint/__tests__',
'ArcanistPEP8Linter' => 'lint/linter/pep8', 'ArcanistPEP8Linter' => 'lint/linter/pep8',
'ArcanistPatchWorkflow' => 'workflow/patch', 'ArcanistPatchWorkflow' => 'workflow/patch',
'ArcanistPhutilModuleLinter' => 'lint/linter/phutilmodule', 'ArcanistPhutilModuleLinter' => 'lint/linter/phutilmodule',
@ -100,6 +101,7 @@ phutil_register_library_map(array(
'ArcanistNoEffectException' => 'ArcanistUsageException', 'ArcanistNoEffectException' => 'ArcanistUsageException',
'ArcanistNoEngineException' => 'ArcanistUsageException', 'ArcanistNoEngineException' => 'ArcanistUsageException',
'ArcanistNoLintLinter' => 'ArcanistLinter', 'ArcanistNoLintLinter' => 'ArcanistLinter',
'ArcanistNoLintTestCaseMisnamed' => 'ArcanistLinterTestCase',
'ArcanistPEP8Linter' => 'ArcanistLinter', 'ArcanistPEP8Linter' => 'ArcanistLinter',
'ArcanistPatchWorkflow' => 'ArcanistBaseWorkflow', 'ArcanistPatchWorkflow' => 'ArcanistBaseWorkflow',
'ArcanistPhutilModuleLinter' => 'ArcanistLinter', 'ArcanistPhutilModuleLinter' => 'ArcanistLinter',

View file

@ -182,6 +182,9 @@ class ArcanistGitAPI extends ArcanistRepositoryAPI {
} }
} }
// TODO: This doesn't list unstaged adds. It's not clear how to get that
// list other than "git status --porcelain" and then parsing it. :/
// Find unstaged changes. // Find unstaged changes.
list($stdout) = execx( list($stdout) = execx(
'(cd %s; git ls-files -m)', '(cd %s; git ls-files -m)',

View file

@ -316,21 +316,26 @@ class ArcanistBaseWorkflow {
protected function requireCleanWorkingCopy() { protected function requireCleanWorkingCopy() {
$api = $this->getRepositoryAPI(); $api = $this->getRepositoryAPI();
$working_copy_desc = phutil_console_format(
" Working copy: __%s__\n\n",
$api->getPath());
$untracked = $api->getUntrackedChanges(); $untracked = $api->getUntrackedChanges();
if ($this->shouldRequireCleanUntrackedFiles()) { if ($this->shouldRequireCleanUntrackedFiles()) {
if (!empty($untracked)) { if (!empty($untracked)) {
echo "You have untracked files in this working copy.\n\n".
echo "You have untracked files in this working copy:\n\n". $working_copy_desc.
" Untracked files in working copy:\n".
" ".implode("\n ", $untracked)."\n\n"; " ".implode("\n ", $untracked)."\n\n";
if ($api instanceof ArcanistGitAPI) { if ($api instanceof ArcanistGitAPI) {
echo phutil_console_wrap( echo phutil_console_wrap(
"Since you don't have .gitignore rules for these files and have ". "Since you don't have '.gitignore' rules for these files and have ".
"not listed them in .git/info/exclude, you may have forgotten ". "not listed them in '.git/info/exclude', you may have forgotten ".
"to 'git add' them to your commit."); "to 'git add' them to your commit.");
} else if ($api instanceof ArcanistSubversionAPI) { } else if ($api instanceof ArcanistSubversionAPI) {
echo phutil_console_wrap( echo phutil_console_wrap(
"Since you don't have svn:ignore rules for these files, you may ". "Since you don't have 'svn:ignore' rules for these files, you may ".
"have forgotten to 'svn add' them."); "have forgotten to 'svn add' them.");
} }
@ -345,27 +350,41 @@ class ArcanistBaseWorkflow {
if ($incomplete) { if ($incomplete) {
throw new ArcanistUsageException( throw new ArcanistUsageException(
"You have incompletely checked out directories in this working copy. ". "You have incompletely checked out directories in this working copy. ".
"Fix them before proceeding: \n\n". "Fix them before proceeding.\n\n".
$working_copy_desc.
" Incomplete directories in working copy:\n".
" ".implode("\n ", $incomplete)."\n\n". " ".implode("\n ", $incomplete)."\n\n".
"You can fix these paths by running 'svn update' on them."); "You can fix these paths by running 'svn update' on them.");
} }
if ($api->getMergeConflicts()) { $conflicts = $api->getMergeConflicts();
if ($conflicts) {
throw new ArcanistUsageException( throw new ArcanistUsageException(
"You have merge conflicts in this working copy. Resolve merge ". "You have merge conflicts in this working copy. Resolve merge ".
"conflicts before proceeding."); "conflicts before proceeding.\n\n".
$working_copy_desc.
" Conflicts in working copy:\n".
" ".implode("\n ", $conflicts)."\n");
} }
if ($api->getUnstagedChanges()) { $unstaged = $api->getUnstagedChanges();
if ($unstaged) {
throw new ArcanistUsageException( throw new ArcanistUsageException(
"You have unstaged changes in this branch. Stage and commit (or ". "You have unstaged changes in this working copy. Stage and commit (or ".
"revert) them before proceeding."); "revert) them before proceeding.\n\n".
$working_copy_desc.
" Unstaged changes in working copy:\n".
" ".implode("\n ", $unstaged)."\n");
} }
if ($api->getUncommittedChanges()) { $uncommitted = $api->getUncommittedChanges();
if ($uncommitted) {
throw new ArcanistUsageException( throw new ArcanistUsageException(
"You have uncommitted changes in this branch. Commit (or revert) them ". "You have uncommitted changes in this branch. Commit (or revert) them ".
"before proceeding."); "before proceeding.\n\n".
$working_copy_desc.
" Uncommitted changes in working copy\n".
" ".implode("\n ", $uncommitted)."\n");
} }
} }