status: don't suggest "git rm" or "git add" if not appropriate
The display of the advice '(use git add/rm [...])' (when there are unmerged files) after running 'git status' is now depending of the mark, whether it's 'both deleted', 'deleted by us/them' or others. For instance, when there is just one file that's marked as 'both deleted', 'git status' shows '(use git rm [...])' and if there are two files, one as 'both deleted' and the other as 'added by them', the advice is '(use git add/rm [...])'. The previous tests in t7512-status-help.sh are updated. Test about the case of only 'both deleted' is added in t7060-wtstatus.sh Signed-off-by: Lucien Kong <Lucien.Kong@ensimag.imag.fr> Signed-off-by: Valentin Duperray <Valentin.Duperray@ensimag.imag.fr> Signed-off-by: Franck Jonas <Franck.Jonas@ensimag.imag.fr> Signed-off-by: Thomas Nguy <Thomas.Nguy@ensimag.imag.fr> Signed-off-by: Huynh Khoi Nguyen Nguyen <Huynh-Khoi-Nguyen.Nguyen@ensimag.imag.fr> Signed-off-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
708192637e
commit
96b0ec1a4c
@ -152,7 +152,7 @@ test_expect_success 'status when conflicts with add and rm advice (deleted by th
|
|||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
test_expect_success 'status when conflicts with add and rm advice (both deleted)' '
|
test_expect_success 'prepare for conflicts' '
|
||||||
git reset --hard &&
|
git reset --hard &&
|
||||||
git checkout -b conflict &&
|
git checkout -b conflict &&
|
||||||
test_commit one main.txt one &&
|
test_commit one main.txt one &&
|
||||||
@ -161,7 +161,11 @@ test_expect_success 'status when conflicts with add and rm advice (both deleted)
|
|||||||
git commit -m "main.txt renamed in sub_master.txt" &&
|
git commit -m "main.txt renamed in sub_master.txt" &&
|
||||||
git checkout conflict_second &&
|
git checkout conflict_second &&
|
||||||
git mv main.txt sub_second.txt &&
|
git mv main.txt sub_second.txt &&
|
||||||
git commit -m "main.txt renamed in sub_second.txt" &&
|
git commit -m "main.txt renamed in sub_second.txt"
|
||||||
|
'
|
||||||
|
|
||||||
|
|
||||||
|
test_expect_success 'status when conflicts with add and rm advice (both deleted)' '
|
||||||
test_must_fail git merge conflict &&
|
test_must_fail git merge conflict &&
|
||||||
cat >expected <<-\EOF &&
|
cat >expected <<-\EOF &&
|
||||||
# On branch conflict_second
|
# On branch conflict_second
|
||||||
@ -182,4 +186,32 @@ test_expect_success 'status when conflicts with add and rm advice (both deleted)
|
|||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
test_expect_success 'status when conflicts with only rm advice (both deleted)' '
|
||||||
|
git reset --hard conflict_second &&
|
||||||
|
test_must_fail git merge conflict &&
|
||||||
|
git add sub_master.txt &&
|
||||||
|
git add sub_second.txt &&
|
||||||
|
cat >expected <<-\EOF &&
|
||||||
|
# On branch conflict_second
|
||||||
|
# You have unmerged paths.
|
||||||
|
# (fix conflicts and run "git commit")
|
||||||
|
#
|
||||||
|
# Changes to be committed:
|
||||||
|
#
|
||||||
|
# new file: sub_master.txt
|
||||||
|
#
|
||||||
|
# Unmerged paths:
|
||||||
|
# (use "git rm <file>..." to mark resolution)
|
||||||
|
#
|
||||||
|
# both deleted: main.txt
|
||||||
|
#
|
||||||
|
# Untracked files not listed (use -u option to show untracked files)
|
||||||
|
EOF
|
||||||
|
git status --untracked-files=no >actual &&
|
||||||
|
test_i18ncmp expected actual &&
|
||||||
|
git reset --hard &&
|
||||||
|
git checkout master
|
||||||
|
'
|
||||||
|
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -30,7 +30,7 @@ test_expect_success 'status when conflicts unresolved' '
|
|||||||
# (fix conflicts and run "git commit")
|
# (fix conflicts and run "git commit")
|
||||||
#
|
#
|
||||||
# Unmerged paths:
|
# Unmerged paths:
|
||||||
# (use "git add/rm <file>..." as appropriate to mark resolution)
|
# (use "git add <file>..." to mark resolution)
|
||||||
#
|
#
|
||||||
# both modified: main.txt
|
# both modified: main.txt
|
||||||
#
|
#
|
||||||
@ -83,7 +83,7 @@ test_expect_success 'status when rebase in progress before resolving conflicts'
|
|||||||
#
|
#
|
||||||
# Unmerged paths:
|
# Unmerged paths:
|
||||||
# (use "git reset HEAD <file>..." to unstage)
|
# (use "git reset HEAD <file>..." to unstage)
|
||||||
# (use "git add/rm <file>..." as appropriate to mark resolution)
|
# (use "git add <file>..." to mark resolution)
|
||||||
#
|
#
|
||||||
# both modified: main.txt
|
# both modified: main.txt
|
||||||
#
|
#
|
||||||
@ -140,7 +140,7 @@ test_expect_success 'status during rebase -i when conflicts unresolved' '
|
|||||||
#
|
#
|
||||||
# Unmerged paths:
|
# Unmerged paths:
|
||||||
# (use "git reset HEAD <file>..." to unstage)
|
# (use "git reset HEAD <file>..." to unstage)
|
||||||
# (use "git add/rm <file>..." as appropriate to mark resolution)
|
# (use "git add <file>..." to mark resolution)
|
||||||
#
|
#
|
||||||
# both modified: main.txt
|
# both modified: main.txt
|
||||||
#
|
#
|
||||||
@ -336,7 +336,7 @@ test_expect_success 'status when cherry-picking before resolving conflicts' '
|
|||||||
# (fix conflicts and run "git commit")
|
# (fix conflicts and run "git commit")
|
||||||
#
|
#
|
||||||
# Unmerged paths:
|
# Unmerged paths:
|
||||||
# (use "git add/rm <file>..." as appropriate to mark resolution)
|
# (use "git add <file>..." to mark resolution)
|
||||||
#
|
#
|
||||||
# both modified: main.txt
|
# both modified: main.txt
|
||||||
#
|
#
|
||||||
|
37
wt-status.c
37
wt-status.c
@ -131,9 +131,34 @@ void wt_status_prepare(struct wt_status *s)
|
|||||||
|
|
||||||
static void wt_status_print_unmerged_header(struct wt_status *s)
|
static void wt_status_print_unmerged_header(struct wt_status *s)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
int del_mod_conflict = 0;
|
||||||
|
int both_deleted = 0;
|
||||||
|
int not_deleted = 0;
|
||||||
const char *c = color(WT_STATUS_HEADER, s);
|
const char *c = color(WT_STATUS_HEADER, s);
|
||||||
|
|
||||||
status_printf_ln(s, c, _("Unmerged paths:"));
|
status_printf_ln(s, c, _("Unmerged paths:"));
|
||||||
|
|
||||||
|
for (i = 0; i < s->change.nr; i++) {
|
||||||
|
struct string_list_item *it = &(s->change.items[i]);
|
||||||
|
struct wt_status_change_data *d = it->util;
|
||||||
|
|
||||||
|
switch (d->stagemask) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
both_deleted = 1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
case 5:
|
||||||
|
del_mod_conflict = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
not_deleted = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!advice_status_hints)
|
if (!advice_status_hints)
|
||||||
return;
|
return;
|
||||||
if (s->whence != FROM_COMMIT)
|
if (s->whence != FROM_COMMIT)
|
||||||
@ -142,7 +167,17 @@ static void wt_status_print_unmerged_header(struct wt_status *s)
|
|||||||
status_printf_ln(s, c, _(" (use \"git reset %s <file>...\" to unstage)"), s->reference);
|
status_printf_ln(s, c, _(" (use \"git reset %s <file>...\" to unstage)"), s->reference);
|
||||||
else
|
else
|
||||||
status_printf_ln(s, c, _(" (use \"git rm --cached <file>...\" to unstage)"));
|
status_printf_ln(s, c, _(" (use \"git rm --cached <file>...\" to unstage)"));
|
||||||
status_printf_ln(s, c, _(" (use \"git add/rm <file>...\" as appropriate to mark resolution)"));
|
|
||||||
|
if (!both_deleted) {
|
||||||
|
if (!del_mod_conflict)
|
||||||
|
status_printf_ln(s, c, _(" (use \"git add <file>...\" to mark resolution)"));
|
||||||
|
else
|
||||||
|
status_printf_ln(s, c, _(" (use \"git add/rm <file>...\" as appropriate to mark resolution)"));
|
||||||
|
} else if (!del_mod_conflict && !not_deleted) {
|
||||||
|
status_printf_ln(s, c, _(" (use \"git rm <file>...\" to mark resolution)"));
|
||||||
|
} else {
|
||||||
|
status_printf_ln(s, c, _(" (use \"git add/rm <file>...\" as appropriate to mark resolution)"));
|
||||||
|
}
|
||||||
status_printf_ln(s, c, "");
|
status_printf_ln(s, c, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user