Thread (13 messages) flat view 13 messages, 2 authors, 2016-06-15

Re: [RFC/ PATCH 2/5] unpack_trees: group errors by type

From: Diane Gasselin <hidden>
Date: 2016-06-15 22:48:56

Thanks for your comments.

Le 9 juin 2010 18:50, Junio C Hamano [off-list ref] a écrit :
Diane Gasselin [off-list ref] writes:
quoted
+/*
+ * Store error messages in an array, each case
+ * corresponding to a error message type
+ */
+typedef enum {
+     would_overwrite,
+     not_uptodate_file,
+     not_uptodate_dir,
+     would_lose_untracked,
+     would_lose_untracked_removed,
+     sparse_not_uptodate_file
+} unpack_trees_error;
+#define NB_UNPACK_TREES_ERROR 6
+struct rejected_files *unpack_rejects[NB_UNPACK_TREES_ERROR];
You folks seem to like global variables a lot...  Isn't there a struct
passed throughout the callchain in unpack_trees that you can attach this
information to?
At first, I wanted to avoid of having a global variable but I was not
sure if I could add my error structure to an existing structure and I
did not want to overload the callchain with a new parameter.
So now, I attached my structure to struct unpack_trees_options.

I also corrected all the style errors and the following remarks.
Thanks.
Also "rejected_files" is not as technically correct (there are symlinks)
as "rejected_paths".

Style: we don't encourage "typedef enum { ... } unpack_trees_error";
instead we tend to just say "enum unpack_trees_error" both in the
definition and in the use.
quoted
+     if (!porcelain) {
+             error(msg,file,action);
+             return -1;
+     }
Style:
       if (!porcelain)
               return error(msg, file, action);
quoted
+static void free_rejected_files(unpack_trees_error e)
+{
+     while(unpack_rejects[e]->list) {
Style:
       while (unpack_rejects[e]->list) {
quoted
+static void display_error_msgs()
+{
+     int i;
+     int hasPorcelain = 0;
Style: we don't encourage camelCase.

Whichever way spelled, "has porcelain?" is puzzling.

Is this about "are we issuing error messages as a Porcelain program, or
are we a plumbing without noisy error messages?"  Or is this about "have
we said anything in the loop, and if so finish the message with
'Aborting'"?  If the former, I would name it after "we are Porcelain";
if the latter, I would name it after "we said something".
quoted
+     for (i=0; i<NB_UNPACK_TREES_ERROR; i++) {
Style:

       for (i = 0; i < NB_UNPACK_TREES_ERROR; i++) {
quoted
+             if (unpack_rejects[i] && unpack_rejects[i]->list) {
+                     hasPorcelain = 1;
+                     struct rejected_files_list *f = unpack_rejects[i]->list;
+                     char *action = unpack_rejects[i]->action;
+                     char *file = malloc(unpack_rejects[i]->size+1);
+                     *file = '\0';
+                     while (f) {
+                             strcat(file,"\t");
+                             strcat(file,f->file);
+                             strcat(file,"\n");
+                             f = f->next;
+                     }
+                     error(unpack_rejects[i]->msg,file,action);
+                     free_rejected_files(i);
It feels wrong to malloc() inside the loop (and without freeing, which is
worse).  At least the code should use strbuf to do something like:

       struct strbuf indented = STRBUF_INIT;
       for (f = unpack_rejects[i]->list; f; f = f->next)
               strbuf_addf(&indented, "\t%s\n", f->file);
       error(..., indented.buf, action);
       strbuf_release(&indented);
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help