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

Prompt users to ignore or abort on untracked files

Summary:
Fixes T7521. This separates things into two prompts and doesn't try to automatically add untracked files.

This also fixes T7512, or at least I can't reproduce it after this change.

Test Plan:
  - Ran `arc diff` in a `git` directory with untracked files.
  - Ran `arc diff` in a `svn` directory with untracked files.
  - Ran `arc diff` in a `hg` directory with untracked files.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T7512, T7521

Differential Revision: https://secure.phabricator.com/D12258
This commit is contained in:
epriestley 2015-04-02 13:40:14 -07:00
parent e79032fec2
commit 8bbcbdd3b6
3 changed files with 47 additions and 48 deletions

View file

@ -74,6 +74,11 @@ final class ArcanistUSEnglishTranslation extends PhutilTranslation {
'%d assertion passed.',
'%d assertions passed.',
),
'Ignore these %s untracked file(s) and continue?' => array(
'Ignore this untracked file and continue?',
'Ignore these untracked files and continue?',
),
);
}

View file

@ -294,8 +294,7 @@ EOTEXT
'add-all' => array(
'short' => 'a',
'help' =>
'Automatically add all untracked, unstaged and uncommitted files to '.
'the commit.',
'Automatically add all unstaged and uncommitted files to the commit.',
),
'json' => array(
'help' =>

View file

@ -880,8 +880,43 @@ abstract class ArcanistWorkflow extends Phobject {
$untracked = array();
}
if ($untracked) {
echo pht(
"You have untracked files in this working copy.\n\n%s",
$working_copy_desc);
if ($api instanceof ArcanistGitAPI) {
$hint = pht(
'(To ignore these %s change(s), add them to ".git/info/exclude".)',
new PhutilNumber(count($untracked)));
} else if ($api instanceof ArcanistSubversionAPI) {
$hint = pht(
'(To ignore these %s change(s), add them to "svn:ignore".)',
new PhutilNumber(count($untracked)));
} else if ($api instanceof ArcanistMercurialAPI) {
$hint = pht(
'(To ignore these %s change(s), add them to ".hgignore".)',
new PhutilNumber(count($untracked)));
}
$untracked_list = " ".implode("\n ", $untracked);
echo pht(
" Untracked changes in working copy:\n %s\n%s",
$hint,
$untracked_list);
$prompt = pht(
'Ignore these %s untracked file(s) and continue?',
new PhutilNumber(count($untracked)));
if (!phutil_console_confirm($prompt)) {
throw new ArcanistUserAbortException();
}
}
$should_commit = false;
if ($untracked || $unstaged || $uncommitted) {
if ($unstaged || $uncommitted) {
// NOTE: We're running this because it builds a cache and can take a
// perceptible amount of time to arrive at an answer, but we don't want
@ -894,28 +929,6 @@ abstract class ArcanistWorkflow extends Phobject {
$lists = array();
if ($untracked) {
if ($api instanceof ArcanistGitAPI) {
$hint = pht(
'(To ignore these %s change(s), add them to ".git/info/exclude".)',
new PhutilNumber(count($untracked)));
} else if ($api instanceof ArcanistSubversionAPI) {
$hint = pht(
'(To ignore these %s change(s), add them to "svn:ignore".)',
new PhutilNumber(count($untracked)));
} else if ($api instanceof ArcanistMercurialAPI) {
$hint = pht(
'(To ignore these %s change(s), add them to ".hgignore".)',
new PhutilNumber(count($untracked)));
}
$untracked_list = " ".implode("\n ", $untracked);
$lists[] = pht(
" Untracked changes in working copy:\n %s\n%s",
$hint,
$untracked_list);
}
if ($unstaged) {
$unstaged_list = " ".implode("\n ", $unstaged);
$lists[] = pht(
@ -932,12 +945,8 @@ abstract class ArcanistWorkflow extends Phobject {
echo implode("\n\n", $lists)."\n";
$all_uncommitted = array_merge($untracked, $unstaged, $uncommitted);
$all_uncommitted = array_merge($unstaged, $uncommitted);
if ($this->askForAdd($all_uncommitted)) {
if ($untracked) {
$api->addToCommit($untracked);
}
if ($unstaged) {
$api->addToCommit($unstaged);
}
@ -952,20 +961,10 @@ abstract class ArcanistWorkflow extends Phobject {
$api->stashChanges();
$this->stashed = true;
} else {
if ($untracked && !$unstaged && !$uncommitted) {
// Give a tailored message if there are only untracked files,
// because the advice to commit files does not make sense in
// Subversion.
throw new ArcanistUsageException(
pht(
'You can not continue with untracked changes. Add them, '.
'discard them, or mark them as ignored before proceeding.'));
} else {
throw new ArcanistUsageException(
pht(
'You can not continue with uncommitted changes. Commit '.
'or discard them before proceeding.'));
}
throw new ArcanistUsageException(
pht(
'You can not continue with uncommitted changes. Commit '.
'or discard them before proceeding.'));
}
}
}
@ -980,10 +979,6 @@ abstract class ArcanistWorkflow extends Phobject {
"# ".pht('Enter a commit message.')."\n#\n".
"# ".pht('Changes:')."\n#\n";
foreach ($untracked as $untracked_path) {
$template .= "# ".$untracked_path." (".pht('Added').")\n";
}
$paths = array_merge($uncommitted, $unstaged);
$paths = array_unique($paths);
sort($paths);