{"thread":{"id":"6210","subject":"[PATCH 1/2] Refactor print-functions in builtin-branch","startedAt":"2007-01-03T20:10:08Z","lastAt":"2007-01-03T20:10:10Z","messageCount":3,"participants":["Lars Hjemli"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"30768","messageId":"11678550103703-git-send-email-hjemli@gmail.com","threadId":"6210","inReplyTo":null,"subject":"[PATCH 0/2] Enable git-branch to show detached HEAD","fromName":"Lars Hjemli","fromEmail":"hjemli@gmail.com","sentAt":"2007-01-03T20:10:08Z","receivedAt":"2007-01-03T20:10:08Z","isPatch":true,"sender":{"key":"hjemli@gmail.com","avatar":null},"body":"These two patches let git-branch show a detached HEAD in a sensible way:\n\n [PATCH 1/2] Refactor print-functions in builtin-branch\n [PATCH 2/2] git-branch: show detached HEAD\n"},{"id":"30767","messageId":"11678550112285-git-send-email-hjemli@gmail.com","threadId":"6210","inReplyTo":"11678550103703-git-send-email-hjemli@gmail.com","subject":"[PATCH 1/2] Refactor print-functions in builtin-branch","fromName":"Lars Hjemli","fromEmail":"hjemli@gmail.com","sentAt":"2007-01-03T20:10:09Z","receivedAt":"2007-01-03T20:10:09Z","isPatch":true,"sender":{"key":"hjemli@gmail.com","avatar":null},"body":"This moves the guts of print_ref_list() into a revamped print_ref_info(),\nwhich at the same time gets renamed to print_ref_item().\n\nSigned-off-by: Lars Hjemli <hjemli@gmail.com>\n---\n builtin-branch.c |   83 ++++++++++++++++++++++++++----------------------------\n 1 files changed, 40 insertions(+), 43 deletions(-)\n\ndiff --git a/builtin-branch.c b/builtin-branch.c\nindex 71f88f2..b9a8bae 100644\n--- a/builtin-branch.c\n+++ b/builtin-branch.c\n@@ -231,29 +231,54 @@ static int ref_cmp(const void *r1, const void *r2)\n \treturn strcmp(c1->name, c2->name);\n }\n \n-static void print_ref_info(const unsigned char *sha1, int abbrev)\n+static void print_ref_item(struct ref_item *item, int maxwidth, int verbose, \n+\t\t\t   int abbrev, int current)\n {\n+\tchar c;\n+\tint color;\n \tstruct commit *commit;\n \tchar subject[256];\n \n+\tswitch (item->kind) {\n+\tcase REF_LOCAL_BRANCH:\n+\t\tcolor = COLOR_BRANCH_LOCAL;\n+\t\tbreak;\n+\tcase REF_REMOTE_BRANCH:\n+\t\tcolor = COLOR_BRANCH_REMOTE;\n+\t\tbreak;\n+\tdefault:\n+\t\tcolor = COLOR_BRANCH_PLAIN;\n+\t\tbreak;\n+\t}\n \n-\tcommit = lookup_commit(sha1);\n-\tif (commit && !parse_commit(commit))\n-\t\tpretty_print_commit(CMIT_FMT_ONELINE, commit, ~0,\n-\t\t\t\t    subject, sizeof(subject), 0,\n-\t\t\t\t    NULL, NULL, 0);\n-\telse\n-\t\tstrcpy(subject, \" **** invalid ref ****\");\n+\tc = ' ';\n+\tif (current) {\n+\t\tc = '*';\n+\t\tcolor = COLOR_BRANCH_CURRENT;\n+\t}\n \n-\tprintf(\" %s %s\\n\", find_unique_abbrev(sha1, abbrev), subject);\n+\tif (verbose) {\n+\t\tcommit = lookup_commit(item->sha1);\n+\t\tif (commit && !parse_commit(commit))\n+\t\t\tpretty_print_commit(CMIT_FMT_ONELINE, commit, ~0,\n+\t\t\t\t\t    subject, sizeof(subject), 0,\n+\t\t\t\t\t    NULL, NULL, 0);\n+\t\telse\n+\t\t\tstrcpy(subject, \" **** invalid ref ****\");\n+\t\tprintf(\"%c %s%-*s%s %s %s\\n\", c, branch_get_color(color),\n+\t\t       maxwidth, item->name,\n+\t\t       branch_get_color(COLOR_BRANCH_RESET),\n+\t\t       find_unique_abbrev(item->sha1, abbrev), subject);\n+\t} else {\n+\t\tprintf(\"%c %s%s%s\\n\", c, branch_get_color(color), item->name,\n+\t\t       branch_get_color(COLOR_BRANCH_RESET));\n+\t}\n }\n \n static void print_ref_list(int kinds, int verbose, int abbrev)\n {\n \tint i;\n-\tchar c;\n \tstruct ref_list ref_list;\n-\tint color;\n \n \tmemset(&ref_list, 0, sizeof(ref_list));\n \tref_list.kinds = kinds;\n@@ -262,38 +287,10 @@ static void print_ref_list(int kinds, int verbose, int abbrev)\n \tqsort(ref_list.list, ref_list.index, sizeof(struct ref_item), ref_cmp);\n \n \tfor (i = 0; i < ref_list.index; i++) {\n-\t\tswitch( ref_list.list[i].kind ) {\n-\t\t\tcase REF_LOCAL_BRANCH:\n-\t\t\t\tcolor = COLOR_BRANCH_LOCAL;\n-\t\t\t\tbreak;\n-\t\t\tcase REF_REMOTE_BRANCH:\n-\t\t\t\tcolor = COLOR_BRANCH_REMOTE;\n-\t\t\t\tbreak;\n-\t\t\tdefault:\n-\t\t\t\tcolor = COLOR_BRANCH_PLAIN;\n-\t\t\t\tbreak;\n-\t\t}\n-\n-\t\tc = ' ';\n-\t\tif (ref_list.list[i].kind == REF_LOCAL_BRANCH &&\n-\t\t\t\t!strcmp(ref_list.list[i].name, head)) {\n-\t\t\tc = '*';\n-\t\t\tcolor = COLOR_BRANCH_CURRENT;\n-\t\t}\n-\n-\t\tif (verbose) {\n-\t\t\tprintf(\"%c %s%-*s%s\", c,\n-\t\t\t\t\tbranch_get_color(color),\n-\t\t\t\t\tref_list.maxwidth,\n-\t\t\t\t\tref_list.list[i].name,\n-\t\t\t\t\tbranch_get_color(COLOR_BRANCH_RESET));\n-\t\t\tprint_ref_info(ref_list.list[i].sha1, abbrev);\n-\t\t}\n-\t\telse\n-\t\t\tprintf(\"%c %s%s%s\\n\", c,\n-\t\t\t\t\tbranch_get_color(color),\n-\t\t\t\t\tref_list.list[i].name,\n-\t\t\t\t\tbranch_get_color(COLOR_BRANCH_RESET));\n+\t\tint current = (ref_list.list[i].kind == REF_LOCAL_BRANCH) &&\n+\t\t\t!strcmp(ref_list.list[i].name, head);\n+\t\tprint_ref_item(&ref_list.list[i], ref_list.maxwidth, verbose, \n+\t\t\t       abbrev, current);\n \t}\n \n \tfree_ref_list(&ref_list);\n-- \n1.5.0.rc0.ge900\n"},{"id":"30769","messageId":"11678550122079-git-send-email-hjemli@gmail.com","threadId":"6210","inReplyTo":"11678550103703-git-send-email-hjemli@gmail.com","subject":"[PATCH 2/2] git-branch: show detached HEAD","fromName":"Lars Hjemli","fromEmail":"hjemli@gmail.com","sentAt":"2007-01-03T20:10:10Z","receivedAt":"2007-01-03T20:10:10Z","isPatch":true,"sender":{"key":"hjemli@gmail.com","avatar":null},"body":"This makes git-branch show a detached HEAD as '* (no branch)'.\n\nSigned-off-by: Lars Hjemli <hjemli@gmail.com>\n---\n builtin-branch.c |   23 +++++++++++++++++------\n 1 files changed, 17 insertions(+), 6 deletions(-)\n\ndiff --git a/builtin-branch.c b/builtin-branch.c\nindex b9a8bae..f04718d 100644\n--- a/builtin-branch.c\n+++ b/builtin-branch.c\n@@ -275,7 +275,7 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,\n \t}\n }\n \n-static void print_ref_list(int kinds, int verbose, int abbrev)\n+static void print_ref_list(int kinds, int detached, int verbose, int abbrev)\n {\n \tint i;\n \tstruct ref_list ref_list;\n@@ -286,8 +286,20 @@ static void print_ref_list(int kinds, int verbose, int abbrev)\n \n \tqsort(ref_list.list, ref_list.index, sizeof(struct ref_item), ref_cmp);\n \n+\tdetached = (detached && (kinds & REF_LOCAL_BRANCH));\n+\tif (detached) {\n+\t\tstruct ref_item item;\n+\t\titem.name = \"(no branch)\";\n+\t\titem.kind = REF_LOCAL_BRANCH;\n+\t\thashcpy(item.sha1, head_sha1);\n+\t\tif (strlen(item.name) > ref_list.maxwidth)\n+\t\t\t      ref_list.maxwidth = strlen(item.name);\n+\t\tprint_ref_item(&item, ref_list.maxwidth, verbose, abbrev, 1);\n+\t}\n+\n \tfor (i = 0; i < ref_list.index; i++) {\n-\t\tint current = (ref_list.list[i].kind == REF_LOCAL_BRANCH) &&\n+\t\tint current = !detached &&\n+\t\t\t(ref_list.list[i].kind == REF_LOCAL_BRANCH) &&\n \t\t\t!strcmp(ref_list.list[i].name, head);\n \t\tprint_ref_item(&ref_list.list[i], ref_list.maxwidth, verbose, \n \t\t\t       abbrev, current);\n@@ -377,7 +389,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)\n {\n \tint delete = 0, force_delete = 0, force_create = 0;\n \tint rename = 0, force_rename = 0;\n-\tint verbose = 0, abbrev = DEFAULT_ABBREV;\n+\tint verbose = 0, abbrev = DEFAULT_ABBREV, detached = 0;\n \tint reflog = 0;\n \tint kinds = REF_LOCAL_BRANCH;\n \tint i;\n@@ -455,8 +467,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)\n \tif (!head)\n \t\tdie(\"Failed to resolve HEAD as a valid ref.\");\n \tif (!strcmp(head, \"HEAD\")) {\n-\t\t/* detached HEAD */\n-\t\t;\n+\t\tdetached = 1;\n \t}\n \telse {\n \t\tif (strncmp(head, \"refs/heads/\", 11))\n@@ -467,7 +478,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)\n \tif (delete)\n \t\treturn delete_branches(argc - i, argv + i, force_delete, kinds);\n \telse if (i == argc)\n-\t\tprint_ref_list(kinds, verbose, abbrev);\n+\t\tprint_ref_list(kinds, detached, verbose, abbrev);\n \telse if (rename && (i == argc - 1))\n \t\trename_branch(head, argv[i], force_rename);\n \telse if (rename && (i == argc - 2))\n-- \n1.5.0.rc0.ge900\n"}]}