Re: [PATCH 1/2] rm: better error message on failure for multiple files

2013-06-10 Thread Mathieu Liénard--Mayor

Once again, thanks a lot your feedback, we appreciate it a lot!
Le 2013-06-08 15:51, Ramkumar Ramachandra a écrit :

Mathieu Lienard--Mayor wrote:
@@ -170,30 +175,47 @@ static int check_local_mod(unsigned char 
*head, int index_only)

 * intent to add entry.
 */
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);
+   if (!index_only || !(ce-ce_flags  
CE_INTENT_TO_ADD)) {
+   strbuf_addstr(files_staged, \n 
  );


Ouch.  Wouldn't a string-list be more appropriate for this kind of 
thing?
Matthieu Moy told me string-list would be better aswell, so we're gonna 
change it.


--
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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] rm: better error message on failure for multiple files

2013-06-10 Thread Célestin Matte
Le 08/06/2013 10:33, Mathieu Lienard--Mayor a écrit :
 + if (files_staged.len)
 + errs = error(_(the following files have staged content 
 +different from both the\nfileand the HEAD:%s\n
 +(use -f to force removal)), files_staged.buf);

Typo here: fileand - file and

-- 
Célestin Matte
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] rm: better error message on failure for multiple files

2013-06-10 Thread Mathieu Lienard--Mayor
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--ma...@ensimag.imag.fr
Signed-off-by: Jorge Juan Garcia Garcia 
jorge-juan.garcia-gar...@ensimag.imag.fr
Signed-off-by: Matthieu Moy matthieu@grenoble-inp.fr
---
 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);
+   }
+ 

Re: [PATCH 1/2] rm: better error message on failure for multiple files

2013-06-10 Thread Mathieu Liénard--Mayor
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--ma...@ensimag.imag.fr

Signed-off-by: Jorge Juan Garcia Garcia
jorge-juan.garcia-gar...@ensimag.imag.fr
Signed-off-by: Matthieu Moy matthieu@grenoble-inp.fr
---
 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++) {
+   

[PATCH 1/2] rm: better error message on failure for multiple files

2013-06-08 Thread Mathieu Lienard--Mayor
From: Mathieu Liénard--Mayor mathieu.lienard--ma...@ensimag.imag.fr

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--ma...@ensimag.imag.fr
Signed-off-by: Jorge Juan Garcia Garcia 
jorge-juan.garcia-gar...@ensimag.imag.fr
Signed-off-by: Matthieu Moy matthieu@grenoble-inp.fr
---
 builtin/rm.c  |   54 ++
 t/t3600-rm.sh |   45 +
 2 files changed, 83 insertions(+), 16 deletions(-)

diff --git a/builtin/rm.c b/builtin/rm.c
index 7b91d52..5b2abd2 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 strbuf files_staged = STRBUF_INIT;
+   struct strbuf files_cached = STRBUF_INIT;
+   struct strbuf files_submodule = STRBUF_INIT;
+   struct strbuf files_local = STRBUF_INIT;
+
no_head = is_null_sha1(head);
for (i = 0; i  list.nr; i++) {
struct stat st;
@@ -170,30 +175,47 @@ static int check_local_mod(unsigned char *head, int 
index_only)
 * intent to add entry.
 */
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);
+   if (!index_only || !(ce-ce_flags  CE_INTENT_TO_ADD)) {
+   strbuf_addstr(files_staged, \n);
+   strbuf_addstr(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);
+   if (staged_changes) {
+   strbuf_addstr(files_cached, \n);
+   strbuf_addstr(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);
+   strbuf_addstr(files_submodule, \n 
);
+   strbuf_addstr(files_submodule, name);
+   } else {
+   strbuf_addstr(files_local, \n );
+   strbuf_addstr(files_local, name);
+   }
}
}
}
+
+   if (files_staged.len)
+   errs = error(_(the following files have staged content 
+  different from both the\nfileand the HEAD:%s\n
+  (use -f to force removal)), files_staged.buf);
+   if (files_cached.len)
+   errs = error(_(the following files have changes staged 
+  in the index:%s\n(use --cached to keep the 
file, 
+  or -f to force removal)), files_cached.buf);
+   if (files_submodule.len)
+   errs = error(_(the following submodules (or one of its nested 
+  submodule) use a .git directory:%s\n
+ 

Re: [PATCH 1/2] rm: better error message on failure for multiple files

2013-06-08 Thread Ramkumar Ramachandra
Mathieu Lienard--Mayor wrote:
 @@ -170,30 +175,47 @@ static int check_local_mod(unsigned char *head, int 
 index_only)
  * intent to add entry.
  */
 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);
 +   if (!index_only || !(ce-ce_flags  
 CE_INTENT_TO_ADD)) {
 +   strbuf_addstr(files_staged, \n);

Ouch.  Wouldn't a string-list be more appropriate for this kind of thing?
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html