{"thread":{"id":"6300","subject":"[PATCH 5/6] Make merge-base a built-in.","startedAt":"2007-01-09T10:41:29Z","lastAt":"2007-01-09T21:22:53Z","messageCount":3,"participants":["Junio C Hamano","Johannes Schindelin"],"isPatch":true,"patchVersion":1,"patchTotal":6},"messages":[{"id":"31225","messageId":"7vd55oo52e.fsf@assigned-by-dhcp.cox.net","threadId":"6300","inReplyTo":null,"subject":"[PATCH 5/6] Make merge-base a built-in.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-09T10:41:29Z","receivedAt":"2007-01-09T10:41:29Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\nSigned-off-by: Junio C Hamano <junkio@cox.net>\n---\n Makefile             |    2 +-\n builtin-merge-base.c |   87 +++++++++++++++++++++++++++++++++++++++++++++++++\n builtin.h            |    1 +\n git.c                |    1 +\n merge-base.c         |   88 --------------------------------------------------\n 5 files changed, 90 insertions(+), 89 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 6c12bc6..7fcc3ff 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -191,7 +191,6 @@ SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \\\n PROGRAMS = \\\n \tgit-convert-objects$X git-fetch-pack$X git-fsck-objects$X \\\n \tgit-hash-object$X git-index-pack$X git-local-fetch$X \\\n-\tgit-merge-base$X \\\n \tgit-daemon$X \\\n \tgit-merge-index$X git-mktag$X git-mktree$X git-patch-id$X \\\n \tgit-peek-remote$X git-receive-pack$X \\\n@@ -286,6 +285,7 @@ BUILTIN_OBJS = \\\n \tbuiltin-ls-tree.o \\\n \tbuiltin-mailinfo.o \\\n \tbuiltin-mailsplit.o \\\n+\tbuiltin-merge-base.o \\\n \tbuiltin-merge-file.o \\\n \tbuiltin-mv.o \\\n \tbuiltin-name-rev.o \\\ndiff --git a/builtin-merge-base.c b/builtin-merge-base.c\nnew file mode 100644\nindex 0000000..fa07352\n--- /dev/null\n+++ b/builtin-merge-base.c\n@@ -0,0 +1,87 @@\n+#include \"cache.h\"\n+#include \"commit.h\"\n+\n+static const char merge_base_usage[] =\n+\"git-merge-base [--all] <commit> <commit> | --check-ancestry <commit> <commit>...\";\n+\n+static int show_merge_base(struct commit *rev1, struct commit *rev2, int show_all)\n+{\n+\tstruct commit_list *result = get_merge_bases(rev1, rev2, 0);\n+\n+\tif (!result)\n+\t\treturn 1;\n+\n+\twhile (result) {\n+\t\tprintf(\"%s\\n\", sha1_to_hex(result->item->object.sha1));\n+\t\tif (!show_all)\n+\t\t\treturn 0;\n+\t\tresult = result->next;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int check_ancestry(int argc, const char **argv)\n+{\n+\tstruct commit *one, *two, **reference;\n+\tunsigned char sha1[20];\n+\tint i;\n+\n+\tif (argc < 2)\n+\t\tusage(merge_base_usage);\n+\tif (get_sha1(argv[0], sha1))\n+\t\tdie(\"Not a valid object name %s\", argv[0]);\n+\tone = lookup_commit_reference(sha1);\n+\tif (!one)\n+\t\treturn 1;\n+\n+\treference = xcalloc(argc - 1, sizeof(struct commit *));\n+\tfor (i = 1; i < argc; i++) {\n+\t\tif (get_sha1(argv[i], sha1))\n+\t\t\tdie(\"Not a valid object name %s\", argv[i]);\n+\t\ttwo = lookup_commit_reference(sha1);\n+\t\tif (!two)\n+\t\t\treturn 1;\n+\t\treference[i - 1] = two;\n+\t}\n+\treturn !!in_merge_bases(one, reference, argc - 1);\n+}\n+\n+int cmd_merge_base(int argc, const char **argv, const char *prefix)\n+{\n+\tstruct commit *rev1, *rev2;\n+\tunsigned char rev1key[20], rev2key[20];\n+\tint show_all = 0;\n+\tint check = 0;\n+\n+\tgit_config(git_default_config);\n+\n+\twhile (1 < argc && argv[1][0] == '-') {\n+\t\tconst char *arg = argv[1];\n+\t\tif (!strcmp(arg, \"-a\") || !strcmp(arg, \"--all\"))\n+\t\t\tshow_all = 1;\n+\t\telse if (!strcmp(arg, \"-c\") || !strcmp(arg, \"--check-ancestry\"))\n+\t\t\tcheck = 1;\n+\t\telse\n+\t\t\tusage(merge_base_usage);\n+\t\targc--; argv++;\n+\t}\n+\n+\tif (check) {\n+\t\tif (show_all)\n+\t\t\tdie(\"--all and --check-ancestry are mutually incompatible\");\n+\t\treturn check_ancestry(argc - 1, argv + 1);\n+\t}\n+\n+\tif (argc != 3)\n+\t\tusage(merge_base_usage);\n+\tif (get_sha1(argv[1], rev1key))\n+\t\tdie(\"Not a valid object name %s\", argv[1]);\n+\tif (get_sha1(argv[2], rev2key))\n+\t\tdie(\"Not a valid object name %s\", argv[2]);\n+\trev1 = lookup_commit_reference(rev1key);\n+\trev2 = lookup_commit_reference(rev2key);\n+\tif (!rev1 || !rev2)\n+\t\treturn 1;\n+\treturn show_merge_base(rev1, rev2, show_all);\n+}\ndiff --git a/builtin.h b/builtin.h\nindex df72d09..ae32993 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -42,6 +42,7 @@ extern int cmd_ls_files(int argc, const char **argv, const char *prefix);\n extern int cmd_ls_tree(int argc, const char **argv, const char *prefix);\n extern int cmd_mailinfo(int argc, const char **argv, const char *prefix);\n extern int cmd_mailsplit(int argc, const char **argv, const char *prefix);\n+extern int cmd_merge_base(int argc, const char **argv, const char *prefix);\n extern int cmd_merge_file(int argc, const char **argv, const char *prefix);\n extern int cmd_mv(int argc, const char **argv, const char *prefix);\n extern int cmd_name_rev(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex bf55499..e7bc79a 100644\n--- a/git.c\n+++ b/git.c\n@@ -238,6 +238,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp)\n \t\t{ \"ls-tree\", cmd_ls_tree, RUN_SETUP },\n \t\t{ \"mailinfo\", cmd_mailinfo },\n \t\t{ \"mailsplit\", cmd_mailsplit },\n+\t\t{ \"merge-base\", cmd_merge_base, RUN_SETUP },\n \t\t{ \"merge-file\", cmd_merge_file },\n \t\t{ \"mv\", cmd_mv, RUN_SETUP },\n \t\t{ \"name-rev\", cmd_name_rev, RUN_SETUP },\ndiff --git a/merge-base.c b/merge-base.c\ndeleted file mode 100644\nindex bc478eb..0000000\n--- a/merge-base.c\n+++ /dev/null\n@@ -1,88 +0,0 @@\n-#include \"cache.h\"\n-#include \"commit.h\"\n-\n-static int show_all;\n-static const char merge_base_usage[] =\n-\"git-merge-base [--all] <commit> <commit> | --check-ancestry <commit> <commit>...\";\n-\n-static int merge_base(struct commit *rev1, struct commit *rev2)\n-{\n-\tstruct commit_list *result = get_merge_bases(rev1, rev2, 0);\n-\n-\tif (!result)\n-\t\treturn 1;\n-\n-\twhile (result) {\n-\t\tprintf(\"%s\\n\", sha1_to_hex(result->item->object.sha1));\n-\t\tif (!show_all)\n-\t\t\treturn 0;\n-\t\tresult = result->next;\n-\t}\n-\n-\treturn 0;\n-}\n-\n-static int check_ancestry(int argc, char **argv)\n-{\n-\tstruct commit *one, *two, **reference;\n-\tunsigned char sha1[20];\n-\tint i;\n-\n-\tif (argc < 2)\n-\t\tusage(merge_base_usage);\n-\tif (get_sha1(argv[0], sha1))\n-\t\tdie(\"Not a valid object name %s\", argv[0]);\n-\tone = lookup_commit_reference(sha1);\n-\tif (!one)\n-\t\treturn 1;\n-\n-\treference = xcalloc(argc - 1, sizeof(struct commit *));\n-\tfor (i = 1; i < argc; i++) {\n-\t\tif (get_sha1(argv[i], sha1))\n-\t\t\tdie(\"Not a valid object name %s\", argv[i]);\n-\t\ttwo = lookup_commit_reference(sha1);\n-\t\tif (!two)\n-\t\t\treturn 1;\n-\t\treference[i - 1] = two;\n-\t}\n-\treturn !!in_merge_bases(one, reference, argc - 1);\n-}\n-\n-int main(int argc, char **argv)\n-{\n-\tstruct commit *rev1, *rev2;\n-\tunsigned char rev1key[20], rev2key[20];\n-\tint check = 0;\n-\n-\tsetup_git_directory();\n-\tgit_config(git_default_config);\n-\n-\twhile (1 < argc && argv[1][0] == '-') {\n-\t\tchar *arg = argv[1];\n-\t\tif (!strcmp(arg, \"-a\") || !strcmp(arg, \"--all\"))\n-\t\t\tshow_all = 1;\n-\t\telse if (!strcmp(arg, \"-c\") || !strcmp(arg, \"--check-ancestry\"))\n-\t\t\tcheck = 1;\n-\t\telse\n-\t\t\tusage(merge_base_usage);\n-\t\targc--; argv++;\n-\t}\n-\n-\tif (check) {\n-\t\tif (show_all)\n-\t\t\tdie(\"--all and --check-ancestry are mutually incompatible\");\n-\t\treturn check_ancestry(argc - 1, argv + 1);\n-\t}\n-\n-\tif (argc != 3)\n-\t\tusage(merge_base_usage);\n-\tif (get_sha1(argv[1], rev1key))\n-\t\tdie(\"Not a valid object name %s\", argv[1]);\n-\tif (get_sha1(argv[2], rev2key))\n-\t\tdie(\"Not a valid object name %s\", argv[2]);\n-\trev1 = lookup_commit_reference(rev1key);\n-\trev2 = lookup_commit_reference(rev2key);\n-\tif (!rev1 || !rev2)\n-\t\treturn 1;\n-\treturn merge_base(rev1, rev2);\n-}\n-- \n1.4.4.4.g564d\n"},{"id":"31233","messageId":"Pine.LNX.4.63.0701091202560.22628@wbgn013.biozentrum.uni-wuerzburg.de","threadId":"6300","inReplyTo":"7vd55oo52e.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH 5/6] Make merge-base a built-in.","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-01-09T11:05:42Z","receivedAt":"2007-01-09T11:05:42Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 9 Jan 2007, Junio C Hamano wrote:\n\n>  builtin-merge-base.c |   87 +++++++++++++++++++++++++++++++++++++++++++++++++\n>  merge-base.c         |   88 --------------------------------------------------\n\nHmm. I wonder if we should make \"-M\" a default for format-patch... But \nthen, some use git to develop against a non-git upstream, and sending such \npatches might upset the upstream maintainers...\n\nAnyway, I think this series is sane (i.e. I did not find obvious flaws \nreading them).\n\nCiao,\nDscho\n"},{"id":"31285","messageId":"7vd55nki8i.fsf@assigned-by-dhcp.cox.net","threadId":"6300","inReplyTo":"Pine.LNX.4.63.0701091202560.22628@wbgn013.biozentrum.uni-wuerzburg.de","subject":"Re: [PATCH 5/6] Make merge-base a built-in.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-09T21:22:53Z","receivedAt":"2007-01-09T21:22:53Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> Anyway, I think this series is sane (i.e. I did not find obvious flaws \n> reading them).\n\nHeh, there were a few \"easter eggs\" in the one that are\ncurrently sitting on 'pu', but don't waste your time go hunting\nsince I've fixed them up in my tree over lunch break.\n"}]}