{"thread":{"id":"24003","subject":"[PATCH 1/2] branch: exit status now reflects if branch listing finds an error","startedAt":"2010-06-04T09:48:14Z","lastAt":"2010-06-04T09:50:11Z","messageCount":3,"participants":["Simo Melenius"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"142960","messageId":"AANLkTilGOtScr7AyF_Dsm5ItTm2QBv_aPdBXRUDH29Ad@mail.gmail.com","threadId":"24003","inReplyTo":"20100604024344.GB26311@progeny.tock","subject":"Re: [PATCH 2/2] branch: don't fail listing branches if one of the commits wasn't found","fromName":"Simo Melenius","fromEmail":"simo.melenius@iki.fi","sentAt":"2010-06-04T09:48:14Z","receivedAt":"2010-06-04T09:48:14Z","isPatch":true,"sender":{"key":"simo.melenius@iki.fi","avatar":null},"body":"On 4 June 2010 05:43, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Except as pointed out by Sverre[1],\n>  Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>\n\nThanks, I'll now resend the polished versions of these patches.\n\n\nSimo\n\n-- \n() Today is the car of the cdr of your life.\n/\\ http://arc.pasp.de/\n"},{"id":"142958","messageId":"1275645011-28795-1-git-send-email-simo.melenius@iki.fi","threadId":"24003","inReplyTo":"AANLkTilGOtScr7AyF_Dsm5ItTm2QBv_aPdBXRUDH29Ad@mail.gmail.com","subject":"[PATCH 1/2] branch: exit status now reflects if branch listing finds an error","fromName":"Simo Melenius","fromEmail":"simo.melenius@iki.fi","sentAt":"2010-06-04T09:50:10Z","receivedAt":"2010-06-04T09:50:10Z","isPatch":true,"sender":{"key":"simo.melenius@iki.fi","avatar":null},"body":"If some refs could not be read when listing branches, this can now be\nobserved in the exit status of the \"git branch\" command.\n\nSigned-off-by: Simo Melenius <simo.melenius@iki.fi>\n---\n builtin/branch.c |   25 +++++++++++++++++++------\n 1 files changed, 19 insertions(+), 6 deletions(-)\n\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex 6cf7e72..72a486c 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -257,9 +257,15 @@ static char *resolve_symref(const char *src, const char *prefix)\n \treturn xstrdup(dst);\n }\n \n+struct append_ref_cb {\n+\tstruct ref_list *ref_list;\n+\tint ret;\n+};\n+\n static int append_ref(const char *refname, const unsigned char *sha1, int flags, void *cb_data)\n {\n-\tstruct ref_list *ref_list = (struct ref_list*)(cb_data);\n+\tstruct append_ref_cb *cb = (struct append_ref_cb*)(cb_data);\n+\tstruct ref_list *ref_list = cb->ref_list;\n \tstruct ref_item *newitem;\n \tstruct commit *commit;\n \tint kind, i;\n@@ -293,8 +299,10 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags,\n \tcommit = NULL;\n \tif (ref_list->verbose || ref_list->with_commit || merge_filter != NO_FILTER) {\n \t\tcommit = lookup_commit_reference_gently(sha1, 1);\n-\t\tif (!commit)\n-\t\t\treturn error(\"branch '%s' does not point at a commit\", refname);\n+\t\tif (!commit) {\n+\t\t\tcb->ret = error(\"branch '%s' does not point at a commit\", refname);\n+\t\t\treturn cb->ret;\n+\t\t}\n \n \t\t/* Filter with with_commit if specified */\n \t\tif (!is_descendant_of(commit, ref_list->with_commit))\n@@ -484,9 +492,10 @@ static void show_detached(struct ref_list *ref_list)\n \t}\n }\n \n-static void print_ref_list(int kinds, int detached, int verbose, int abbrev, struct commit_list *with_commit)\n+static int print_ref_list(int kinds, int detached, int verbose, int abbrev, struct commit_list *with_commit)\n {\n \tint i;\n+\tstruct append_ref_cb cb;\n \tstruct ref_list ref_list;\n \n \tmemset(&ref_list, 0, sizeof(ref_list));\n@@ -496,7 +505,9 @@ static void print_ref_list(int kinds, int detached, int verbose, int abbrev, str\n \tref_list.with_commit = with_commit;\n \tif (merge_filter != NO_FILTER)\n \t\tinit_revisions(&ref_list.revs, NULL);\n-\tfor_each_rawref(append_ref, &ref_list);\n+\tcb.ref_list = &ref_list;\n+\tcb.ret = 0;\n+\tfor_each_rawref(append_ref, &cb);\n \tif (merge_filter != NO_FILTER) {\n \t\tstruct commit *filter;\n \t\tfilter = lookup_commit_reference_gently(merge_filter_ref, 0);\n@@ -527,6 +538,8 @@ static void print_ref_list(int kinds, int detached, int verbose, int abbrev, str\n \t}\n \n \tfree_ref_list(&ref_list);\n+\n+\treturn cb.ret;\n }\n \n static void rename_branch(const char *oldname, const char *newname, int force)\n@@ -679,7 +692,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)\n \tif (delete)\n \t\treturn delete_branches(argc, argv, delete > 1, kinds);\n \telse if (argc == 0)\n-\t\tprint_ref_list(kinds, detached, verbose, abbrev, with_commit);\n+\t\treturn print_ref_list(kinds, detached, verbose, abbrev, with_commit);\n \telse if (rename && (argc == 1))\n \t\trename_branch(head, argv[0], rename > 1);\n \telse if (rename && (argc == 2))\n-- \n1.7.0.4\n"},{"id":"142959","messageId":"1275645011-28795-2-git-send-email-simo.melenius@iki.fi","threadId":"24003","inReplyTo":"AANLkTilGOtScr7AyF_Dsm5ItTm2QBv_aPdBXRUDH29Ad@mail.gmail.com","subject":"[PATCH 2/2] branch: don't fail listing branches if one of the commits wasn't found","fromName":"Simo Melenius","fromEmail":"simo.melenius@iki.fi","sentAt":"2010-06-04T09:50:11Z","receivedAt":"2010-06-04T09:50:11Z","isPatch":true,"sender":{"key":"simo.melenius@iki.fi","avatar":null},"body":"When listing branches with ref lookups, if one of the known raw refs\ndoesn't point to a commit then \"git branch\" would return error(),\nterminating the whole for_each_rawref() iteration and possibly hiding\nany remaining refs.\n\nSigned-off-by: Simo Melenius <simo.melenius@iki.fi>\n---\n builtin/branch.c |    5 ++++-\n 1 files changed, 4 insertions(+), 1 deletions(-)\n\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex 72a486c..2371ca0 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -301,7 +301,7 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags,\n \t\tcommit = lookup_commit_reference_gently(sha1, 1);\n \t\tif (!commit) {\n \t\t\tcb->ret = error(\"branch '%s' does not point at a commit\", refname);\n-\t\t\treturn cb->ret;\n+\t\t\treturn 0;\n \t\t}\n \n \t\t/* Filter with with_commit if specified */\n@@ -539,6 +539,9 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru\n \n \tfree_ref_list(&ref_list);\n \n+\tif (cb.ret)\n+\t\terror(\"some refs could not be read\");\n+\n \treturn cb.ret;\n }\n \n-- \n1.7.0.4\n"}]}