Please ignore this, manipulation error while in the git send-email
command line.
Le 2013-06-10 14:51, Mathieu Lienard--Mayor a écrit :
When 'git rm' fails, it now displays a single message
with the list of files involved, instead of displaying
a list of messages with one file each.
As an example, the old message:
error: 'foo.txt' has changes staged in the index
(use --cached to keep the file, or -f to force removal)
error: 'bar.txt' has changes staged in the index
(use --cached to keep the file, or -f to force removal)
would now be displayed as:
error: the following files have changes staged in the index:
foo.txt
bar.txt
(use --cached to keep the file, or -f to force removal)
Signed-off-by: Mathieu Lienard--Mayor
<Mathieu.Lienard--Mayor@xxxxxxxxxxxxxxx>
Signed-off-by: Jorge Juan Garcia Garcia
<Jorge-Juan.Garcia-Garcia@xxxxxxxxxxxxxxx>
Signed-off-by: Matthieu Moy <Matthieu.Moy@xxxxxxxxxxxxxxx>
---
builtin/rm.c | 93
+++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 79 insertions(+), 14 deletions(-)
diff --git a/builtin/rm.c b/builtin/rm.c
index 7b91d52..1bff656 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -82,6 +82,11 @@ static int check_local_mod(unsigned char *head,
int index_only)
int i, no_head;
int errs = 0;
+ struct string_list files_staged = STRING_LIST_INIT_NODUP;
+ struct string_list files_cached = STRING_LIST_INIT_NODUP;
+ struct string_list files_submodule = STRING_LIST_INIT_NODUP;
+ struct string_list files_local = STRING_LIST_INIT_NODUP;
+
no_head = is_null_sha1(head);
for (i = 0; i < list.nr; i++) {
struct stat st;
@@ -171,29 +176,89 @@ static int check_local_mod(unsigned char *head,
int index_only)
*/
if (local_changes && staged_changes) {
if (!index_only || !(ce->ce_flags & CE_INTENT_TO_ADD))
- errs = error(_("'%s' has staged content different "
- "from both the file and the HEAD\n"
- "(use -f to force removal)"), name);
+ string_list_append(&files_staged, name);
}
else if (!index_only) {
if (staged_changes)
- errs = error(_("'%s' has changes staged in the index\n"
- "(use --cached to keep the file, "
- "or -f to force removal)"), name);
+ string_list_append(&files_cached, name);
if (local_changes) {
if (S_ISGITLINK(ce->ce_mode) &&
!submodule_uses_gitfile(name)) {
- errs = error(_("submodule '%s' (or one of its nested "
- "submodules) uses a .git directory\n"
- "(use 'rm -rf' if you really want to remove "
- "it including all of its history)"), name);
- } else
- errs = error(_("'%s' has local modifications\n"
- "(use --cached to keep the file, "
- "or -f to force removal)"), name);
+ string_list_append(&files_submodule,
+ name);
+ } else {
+ string_list_append(&files_local, name);
+ }
}
}
}
+ if (files_staged.nr) {
+ struct strbuf msg_staged = STRBUF_INIT;
+ int j;
+ strbuf_addstr(
+ &msg_staged,
+ "the following files have staged content different "
+ "from both the\nfile and the HEAD:");
+ for (j = 0; j < files_staged.nr; j++) {
+ strbuf_addf(&msg_staged,
+ "\n %s",
+ files_staged.items[j].string);
+ }
+ strbuf_addstr(&msg_staged,
+ "\n(use -f to force removal)");
+ errs = error(_("%s"), msg_staged.buf);
+ }
+ if (files_cached.nr) {
+ struct strbuf msg_cached = STRBUF_INIT;
+ int j;
+ strbuf_addstr(
+ &msg_cached,
+ "the following files have changes staged "
+ "in the index:");
+ for (j = 0; j < files_cached.nr; j++) {
+ strbuf_addf(&msg_cached,
+ "\n %s",
+ files_cached.items[j].string);
+ }
+ strbuf_addstr(&msg_cached,
+ "\n(use --cached to keep the file, "
+ "or -f to force removal)");
+ errs = error(_("%s"), msg_cached.buf);
+ }
+ if (files_submodule.nr) {
+ struct strbuf msg_sub = STRBUF_INIT;
+ int j;
+ strbuf_addstr(
+ &msg_sub,
+ "the following submodules (or one of its nested "
+ "submodule) use a .git directory:");
+ for (j = 0; j < files_submodule.nr; j++) {
+ strbuf_addf(&msg_sub,
+ "\n %s",
+ files_submodule.items[j].string);
+ }
+ strbuf_addstr(&msg_sub,
+ "\n(use 'rm -rf' if you really want "
+ "to remove i including all "
+ "of its history)");
+ errs = error(_("%s"), msg_sub.buf);
+ }
+ if (files_local.nr) {
+ struct strbuf msg_local = STRBUF_INIT;
+ int j;
+ strbuf_addstr(&msg_local,
+ "the following files have local modifications:");
+ for (j = 0; j < files_local.nr; j++) {
+ strbuf_addf(&msg_local,
+ "\n %s",
+ files_local.items[j].string);
+ }
+ strbuf_addstr(&msg_local,
+ "\n(use --cached to keep the file, "
+ "or -f to force removal)");
+ errs = error(_("%s"), msg_local.buf);
+ }
+
return errs;
}
--
Mathieu Liénard--Mayor,
2nd year at Grenoble INP - ENSIMAG
(+33)6 80 56 30 02
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html