{"thread":{"id":"6885","subject":"[PATCH] name-rev: avoid \"^0\" when unneeded","startedAt":"2007-02-20T00:08:48Z","lastAt":"2007-02-20T00:08:48Z","messageCount":1,"participants":["Johannes Schindelin"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"35047","messageId":"Pine.LNX.4.63.0702200108250.22628@wbgn013.biozentrum.uni-wuerzburg.de","threadId":"6885","inReplyTo":null,"subject":"[PATCH] name-rev: avoid \"^0\" when unneeded","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-02-20T00:08:48Z","receivedAt":"2007-02-20T00:08:48Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nWhen naming by a tag, we used to add \"^0\" even if this was not really\nnecessary. For example, `git name-rev de6f0def` now outputs\n\n\tde6f0def tags/v1.5.0.1~9\n\ninstead of\n\n\tde6f0def tags/v1.5.0.1^0~9\n\nSigned-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>\n---\n builtin-name-rev.c |   23 ++++++++++++++++-------\n 1 files changed, 16 insertions(+), 7 deletions(-)\n\ndiff --git a/builtin-name-rev.c b/builtin-name-rev.c\nindex bb6cfe7..cf666d1 100644\n--- a/builtin-name-rev.c\n+++ b/builtin-name-rev.c\n@@ -58,13 +58,17 @@ copy_data:\n \t\t\tparents;\n \t\t\tparents = parents->next, parent_number++) {\n \t\tif (parent_number > 1) {\n-\t\t\tchar *new_name = xmalloc(strlen(tip_name)+8);\n+\t\t\tint len = strlen(tip_name);\n+\t\t\tchar *new_name = xmalloc(len + 8);\n \n+\t\t\tif (len > 2 && !strcmp(tip_name + len - 2, \"^0\"))\n+\t\t\t\tlen -= 2;\n \t\t\tif (generation > 0)\n-\t\t\t\tsprintf(new_name, \"%s~%d^%d\", tip_name,\n+\t\t\t\tsprintf(new_name, \"%.*s~%d^%d\", len, tip_name,\n \t\t\t\t\t\tgeneration, parent_number);\n \t\t\telse\n-\t\t\t\tsprintf(new_name, \"%s^%d\", tip_name, parent_number);\n+\t\t\t\tsprintf(new_name, \"%.*s^%d\", len, tip_name,\n+\t\t\t\t\t\tparent_number);\n \n \t\t\tname_rev(parents->item, new_name,\n \t\t\t\tmerge_traversals + 1 , 0, 0);\n@@ -128,10 +132,15 @@ static const char* get_rev_name(struct object *o)\n \n \tif (!n->generation)\n \t\treturn n->tip_name;\n-\n-\tsnprintf(buffer, sizeof(buffer), \"%s~%d\", n->tip_name, n->generation);\n-\n-\treturn buffer;\n+\telse {\n+\t\tint len = strlen(n->tip_name);\n+\t\tif (len > 2 && !strcmp(n->tip_name + len - 2, \"^0\"))\n+\t\t\tlen -= 2;\n+\t\tsnprintf(buffer, sizeof(buffer), \"%.*s~%d\", len, n->tip_name,\n+\t\t\t\tn->generation);\n+\n+\t\treturn buffer;\n+\t}\n }\n \n int cmd_name_rev(int argc, const char **argv, const char *prefix)\n-- \n1.5.0.1.2139.ge3fc7\n"}]}