{"thread":{"id":"22341","subject":"[Patch 0/5] make more commands built-in","startedAt":"2010-01-22T16:22:51Z","lastAt":"2010-01-22T18:26:12Z","messageCount":9,"participants":["Linus Torvalds","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"132398","messageId":"alpine.LFD.2.00.1001220804550.13231@localhost.localdomain","threadId":"22341","inReplyTo":null,"subject":"[Patch 0/5] make more commands built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T16:22:51Z","receivedAt":"2010-01-22T16:22:51Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nOk, so since I was working on this yesterday, I decided to just continue \nuntil I was done with all the trivial files.\n\nThis series makes five more commands built-in: 'merge-index', 'mktag', \n'unpack-file', 'pack-redundant' and 'index-pack'. It further shrinks my \ngit install footprint by about 20%:\n\n\t[torvalds@nehalem git]$ du -s /home/torvalds/libexec/git-core\n\t21424\t/home/torvalds/libexec/git-core (before)\n\t16920\t/home/torvalds/libexec/git-core (after)\n\nand if we didn't default to having debug info enabled, it would look \nalmost acceptable:\n\n\t[torvalds@nehalem git]$ du -s /home/torvalds/libexec/git-core\n\t5728\t/home/torvalds/libexec/git-core (with \"-g\" removed)\n\t5108\t/home/torvalds/libexec/git-core (with -Os and no debugging)\n\nThere still remains a few big git commands after this, but this takes care \nof most of the core ones. \n\nAll of these patches are trivial, the only one that has _any_ changes \napart from the obvious builtin conversion is 'pack-redundant' which \nrequired some of the pack creation interfaces to now take 'const' index \npathnames etc.\n\nBut as you can see, it removes more lines than it adds, and considering \nthat yesterday the 'du' reported ~40MB of disk space for the git install, \nthe shrinking certainly matters (of course, I suspect most distros \nwouldn't ship with debug info, so for most people it's about a few MB \nrather than a few tens of MB, but still).\n\n\t\tLinus\n---\nLinus Torvalds (5):\n  make \"merge-index\" a built-in\n  make \"mktag\" a built-in\n  make \"git unpack-file\" a built-in\n  make \"git pack-redundant\" a built-in\n  make \"index-pack\" a built-in\n\n Makefile                                     |   10 +++++-----\n index-pack.c => builtin-index-pack.c         |   16 +++++++---------\n merge-index.c => builtin-merge-index.c       |    7 ++-----\n mktag.c => builtin-mktag.c                   |    6 +-----\n builtin-pack-objects.c                       |    5 +++--\n pack-redundant.c => builtin-pack-redundant.c |    8 ++------\n unpack-file.c => builtin-unpack-file.c       |    5 +----\n builtin.h                                    |    5 +++++\n git.c                                        |    5 +++++\n pack-write.c                                 |    4 ++--\n pack.h                                       |    2 +-\n 11 files changed, 34 insertions(+), 39 deletions(-)\n rename index-pack.c => builtin-index-pack.c (98%)\n rename merge-index.c => builtin-merge-index.c (94%)\n rename mktag.c => builtin-mktag.c (98%)\n rename pack-redundant.c => builtin-pack-redundant.c (99%)\n rename unpack-file.c => builtin-unpack-file.c (89%)\n"},{"id":"132399","messageId":"alpine.LFD.2.00.1001220822560.13231@localhost.localdomain","threadId":"22341","inReplyTo":"alpine.LFD.2.00.1001220804550.13231@localhost.localdomain","subject":"[PATCH 1/5] make \"merge-index\" a built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T16:25:16Z","receivedAt":"2010-01-22T16:25:16Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nFrom: Linus Torvalds <torvalds@linux-foundation.org>\nDate: Fri, 22 Jan 2010 07:29:21 -0800\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n---\nTotally trivial. Famous last words.\n\n Makefile                               |    2 +-\n merge-index.c => builtin-merge-index.c |    7 ++-----\n builtin.h                              |    1 +\n git.c                                  |    1 +\n 4 files changed, 5 insertions(+), 6 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex e1c7ae5..70ac4b3 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -389,7 +389,6 @@ PROGRAMS += $(EXTRA_PROGRAMS)\n PROGRAMS += git-fast-import$X\n PROGRAMS += git-imap-send$X\n PROGRAMS += git-index-pack$X\n-PROGRAMS += git-merge-index$X\n PROGRAMS += git-mktag$X\n PROGRAMS += git-pack-redundant$X\n PROGRAMS += git-shell$X\n@@ -667,6 +666,7 @@ BUILTIN_OBJS += builtin-mailsplit.o\n BUILTIN_OBJS += builtin-merge.o\n BUILTIN_OBJS += builtin-merge-base.o\n BUILTIN_OBJS += builtin-merge-file.o\n+BUILTIN_OBJS += builtin-merge-index.o\n BUILTIN_OBJS += builtin-merge-ours.o\n BUILTIN_OBJS += builtin-merge-recursive.o\n BUILTIN_OBJS += builtin-merge-tree.o\ndiff --git a/merge-index.c b/builtin-merge-index.c\nsimilarity index 94%\nrename from merge-index.c\nrename to builtin-merge-index.c\nindex 19ddd03..2c4cf5e 100644\n--- a/merge-index.c\n+++ b/builtin-merge-index.c\n@@ -66,7 +66,7 @@ static void merge_all(void)\n \t}\n }\n \n-int main(int argc, char **argv)\n+int cmd_merge_index(int argc, const char **argv, const char *prefix)\n {\n \tint i, force_file = 0;\n \n@@ -78,9 +78,6 @@ int main(int argc, char **argv)\n \tif (argc < 3)\n \t\tusage(\"git merge-index [-o] [-q] <merge-program> (-a | [--] <filename>*)\");\n \n-\tgit_extract_argv0_path(argv[0]);\n-\n-\tsetup_git_directory();\n \tread_cache();\n \n \ti = 1;\n@@ -94,7 +91,7 @@ int main(int argc, char **argv)\n \t}\n \tpgm = argv[i++];\n \tfor (; i < argc; i++) {\n-\t\tchar *arg = argv[i];\n+\t\tconst char *arg = argv[i];\n \t\tif (!force_file && *arg == '-') {\n \t\t\tif (!strcmp(arg, \"--\")) {\n \t\t\t\tforce_file = 1;\ndiff --git a/builtin.h b/builtin.h\nindex cb8489f..e961b33 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -68,6 +68,7 @@ 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(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_index(int argc, const char **argv, const char *prefix);\n extern int cmd_merge_ours(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_merge_recursive(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex b60999c..eae12e3 100644\n--- a/git.c\n+++ b/git.c\n@@ -331,6 +331,7 @@ static void handle_internal_command(int argc, const char **argv)\n \t\t{ \"merge\", cmd_merge, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"merge-base\", cmd_merge_base, RUN_SETUP },\n \t\t{ \"merge-file\", cmd_merge_file },\n+\t\t{ \"merge-index\", cmd_merge_index, RUN_SETUP },\n \t\t{ \"merge-ours\", cmd_merge_ours, RUN_SETUP },\n \t\t{ \"merge-recursive\", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"merge-recursive-ours\", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },\n-- \n1.6.6.1.399.g73128.dirty\n"},{"id":"132400","messageId":"alpine.LFD.2.00.1001220825190.13231@localhost.localdomain","threadId":"22341","inReplyTo":"alpine.LFD.2.00.1001220822560.13231@localhost.localdomain","subject":"PATCH 2/5] make \"mktag\" a built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T16:26:20Z","receivedAt":"2010-01-22T16:26:20Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nFrom: Linus Torvalds <torvalds@linux-foundation.org>\nDate: Fri, 22 Jan 2010 07:34:44 -0800\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n---\nAnother trivial one.\n\n Makefile                   |    2 +-\n mktag.c => builtin-mktag.c |    6 +-----\n builtin.h                  |    1 +\n git.c                      |    1 +\n 4 files changed, 4 insertions(+), 6 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 70ac4b3..c5a1190 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -389,7 +389,6 @@ PROGRAMS += $(EXTRA_PROGRAMS)\n PROGRAMS += git-fast-import$X\n PROGRAMS += git-imap-send$X\n PROGRAMS += git-index-pack$X\n-PROGRAMS += git-mktag$X\n PROGRAMS += git-pack-redundant$X\n PROGRAMS += git-shell$X\n PROGRAMS += git-show-index$X\n@@ -670,6 +669,7 @@ BUILTIN_OBJS += builtin-merge-index.o\n BUILTIN_OBJS += builtin-merge-ours.o\n BUILTIN_OBJS += builtin-merge-recursive.o\n BUILTIN_OBJS += builtin-merge-tree.o\n+BUILTIN_OBJS += builtin-mktag.o\n BUILTIN_OBJS += builtin-mktree.o\n BUILTIN_OBJS += builtin-mv.o\n BUILTIN_OBJS += builtin-name-rev.o\ndiff --git a/mktag.c b/builtin-mktag.c\nsimilarity index 98%\nrename from mktag.c\nrename to builtin-mktag.c\nindex a3b4270..1cb0f3f 100644\n--- a/mktag.c\n+++ b/builtin-mktag.c\n@@ -153,7 +153,7 @@ static int verify_tag(char *buffer, unsigned long size)\n \n #undef PD_FMT\n \n-int main(int argc, char **argv)\n+int cmd_mktag(int argc, const char **argv, const char *prefix)\n {\n \tstruct strbuf buf = STRBUF_INIT;\n \tunsigned char result_sha1[20];\n@@ -161,10 +161,6 @@ int main(int argc, char **argv)\n \tif (argc != 1)\n \t\tusage(\"git mktag < signaturefile\");\n \n-\tgit_extract_argv0_path(argv[0]);\n-\n-\tsetup_git_directory();\n-\n \tif (strbuf_read(&buf, 0, 4096) < 0) {\n \t\tdie_errno(\"could not read from stdin\");\n \t}\ndiff --git a/builtin.h b/builtin.h\nindex e961b33..2aaef74 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -73,6 +73,7 @@ extern int cmd_merge_ours(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_merge_recursive(int argc, const char **argv, const char *prefix);\n extern int cmd_merge_tree(int argc, const char **argv, const char *prefix);\n+extern int cmd_mktag(int argc, const char **argv, const char *prefix);\n extern int cmd_mktree(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 eae12e3..0b8f8a7 100644\n--- a/git.c\n+++ b/git.c\n@@ -338,6 +338,7 @@ static void handle_internal_command(int argc, const char **argv)\n \t\t{ \"merge-recursive-theirs\", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"merge-subtree\", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"merge-tree\", cmd_merge_tree, RUN_SETUP },\n+\t\t{ \"mktag\", cmd_mktag, RUN_SETUP },\n \t\t{ \"mktree\", cmd_mktree, RUN_SETUP },\n \t\t{ \"mv\", cmd_mv, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"name-rev\", cmd_name_rev, RUN_SETUP },\n-- \n1.6.6.1.399.g73128\n"},{"id":"132401","messageId":"alpine.LFD.2.00.1001220826230.13231@localhost.localdomain","threadId":"22341","inReplyTo":"alpine.LFD.2.00.1001220825190.13231@localhost.localdomain","subject":"[PATCH 3/5] make \"git unpack-file\" a built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T16:27:09Z","receivedAt":"2010-01-22T16:27:09Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nFrom: Linus Torvalds <torvalds@linux-foundation.org>\nDate: Fri, 22 Jan 2010 07:38:03 -0800\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n---\nAgain.. No surprises.\n\n Makefile                               |    2 +-\n unpack-file.c => builtin-unpack-file.c |    5 +----\n builtin.h                              |    1 +\n git.c                                  |    1 +\n 4 files changed, 4 insertions(+), 5 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex c5a1190..88e2f8f 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -392,7 +392,6 @@ PROGRAMS += git-index-pack$X\n PROGRAMS += git-pack-redundant$X\n PROGRAMS += git-shell$X\n PROGRAMS += git-show-index$X\n-PROGRAMS += git-unpack-file$X\n PROGRAMS += git-upload-pack$X\n PROGRAMS += git-http-backend$X\n \n@@ -698,6 +697,7 @@ BUILTIN_OBJS += builtin-stripspace.o\n BUILTIN_OBJS += builtin-symbolic-ref.o\n BUILTIN_OBJS += builtin-tag.o\n BUILTIN_OBJS += builtin-tar-tree.o\n+BUILTIN_OBJS += builtin-unpack-file.o\n BUILTIN_OBJS += builtin-unpack-objects.o\n BUILTIN_OBJS += builtin-update-index.o\n BUILTIN_OBJS += builtin-update-ref.o\ndiff --git a/unpack-file.c b/builtin-unpack-file.c\nsimilarity index 89%\nrename from unpack-file.c\nrename to builtin-unpack-file.c\nindex e9d8934..608590a 100644\n--- a/unpack-file.c\n+++ b/builtin-unpack-file.c\n@@ -22,18 +22,15 @@ static char *create_temp_file(unsigned char *sha1)\n \treturn path;\n }\n \n-int main(int argc, char **argv)\n+int cmd_unpack_file(int argc, const char **argv, const char *prefix)\n {\n \tunsigned char sha1[20];\n \n-\tgit_extract_argv0_path(argv[0]);\n-\n \tif (argc != 2 || !strcmp(argv[1], \"-h\"))\n \t\tusage(\"git unpack-file <sha1>\");\n \tif (get_sha1(argv[1], sha1))\n \t\tdie(\"Not a valid object name %s\", argv[1]);\n \n-\tsetup_git_directory();\n \tgit_config(git_default_config, NULL);\n \n \tputs(create_temp_file(sha1));\ndiff --git a/builtin.h b/builtin.h\nindex 2aaef74..d4fec89 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -103,6 +103,7 @@ extern int cmd_stripspace(int argc, const char **argv, const char *prefix);\n extern int cmd_symbolic_ref(int argc, const char **argv, const char *prefix);\n extern int cmd_tag(int argc, const char **argv, const char *prefix);\n extern int cmd_tar_tree(int argc, const char **argv, const char *prefix);\n+extern int cmd_unpack_file(int argc, const char **argv, const char *prefix);\n extern int cmd_unpack_objects(int argc, const char **argv, const char *prefix);\n extern int cmd_update_index(int argc, const char **argv, const char *prefix);\n extern int cmd_update_ref(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex 0b8f8a7..832bd2d 100644\n--- a/git.c\n+++ b/git.c\n@@ -370,6 +370,7 @@ static void handle_internal_command(int argc, const char **argv)\n \t\t{ \"symbolic-ref\", cmd_symbolic_ref, RUN_SETUP },\n \t\t{ \"tag\", cmd_tag, RUN_SETUP },\n \t\t{ \"tar-tree\", cmd_tar_tree },\n+\t\t{ \"unpack-file\", cmd_unpack_file, RUN_SETUP },\n \t\t{ \"unpack-objects\", cmd_unpack_objects, RUN_SETUP },\n \t\t{ \"update-index\", cmd_update_index, RUN_SETUP },\n \t\t{ \"update-ref\", cmd_update_ref, RUN_SETUP },\n-- \n1.6.6.1.399.g73128\n"},{"id":"132402","messageId":"alpine.LFD.2.00.1001220827140.13231@localhost.localdomain","threadId":"22341","inReplyTo":"alpine.LFD.2.00.1001220826230.13231@localhost.localdomain","subject":"[PATCH 4/5] make \"git pack-redundant\" a built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T16:28:28Z","receivedAt":"2010-01-22T16:28:28Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nFrom: Linus Torvalds <torvalds@linux-foundation.org>\nDate: Fri, 22 Jan 2010 07:42:14 -0800\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n---\nThis has one function that now needed a 'const char *' argument \nconversion, but it's the next one that actually affects other files..\n\n Makefile                                     |    2 +-\n pack-redundant.c => builtin-pack-redundant.c |    8 ++------\n builtin.h                                    |    1 +\n git.c                                        |    1 +\n 4 files changed, 5 insertions(+), 7 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 88e2f8f..33f9870 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -389,7 +389,6 @@ PROGRAMS += $(EXTRA_PROGRAMS)\n PROGRAMS += git-fast-import$X\n PROGRAMS += git-imap-send$X\n PROGRAMS += git-index-pack$X\n-PROGRAMS += git-pack-redundant$X\n PROGRAMS += git-shell$X\n PROGRAMS += git-show-index$X\n PROGRAMS += git-upload-pack$X\n@@ -673,6 +672,7 @@ BUILTIN_OBJS += builtin-mktree.o\n BUILTIN_OBJS += builtin-mv.o\n BUILTIN_OBJS += builtin-name-rev.o\n BUILTIN_OBJS += builtin-pack-objects.o\n+BUILTIN_OBJS += builtin-pack-redundant.o\n BUILTIN_OBJS += builtin-pack-refs.o\n BUILTIN_OBJS += builtin-patch-id.o\n BUILTIN_OBJS += builtin-prune-packed.o\ndiff --git a/pack-redundant.c b/builtin-pack-redundant.c\nsimilarity index 99%\nrename from pack-redundant.c\nrename to builtin-pack-redundant.c\nindex 21c61db..41e1615 100644\n--- a/pack-redundant.c\n+++ b/builtin-pack-redundant.c\n@@ -568,7 +568,7 @@ static struct pack_list * add_pack(struct packed_git *p)\n \t\treturn pack_list_insert(&altodb_packs, &l);\n }\n \n-static struct pack_list * add_pack_file(char *filename)\n+static struct pack_list * add_pack_file(const char *filename)\n {\n \tstruct packed_git *p = packed_git;\n \n@@ -593,7 +593,7 @@ static void load_all(void)\n \t}\n }\n \n-int main(int argc, char **argv)\n+int cmd_pack_redundant(int argc, const char **argv, const char *prefix)\n {\n \tint i;\n \tstruct pack_list *min, *red, *pl;\n@@ -601,13 +601,9 @@ int main(int argc, char **argv)\n \tunsigned char *sha1;\n \tchar buf[42]; /* 40 byte sha1 + \\n + \\0 */\n \n-\tgit_extract_argv0_path(argv[0]);\n-\n \tif (argc == 2 && !strcmp(argv[1], \"-h\"))\n \t\tusage(pack_redundant_usage);\n \n-\tsetup_git_directory();\n-\n \tfor (i = 1; i < argc; i++) {\n \t\tconst char *arg = argv[i];\n \t\tif (!strcmp(arg, \"--\")) {\ndiff --git a/builtin.h b/builtin.h\nindex d4fec89..bd7f737 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -78,6 +78,7 @@ extern int cmd_mktree(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);\n extern int cmd_pack_objects(int argc, const char **argv, const char *prefix);\n+extern int cmd_pack_redundant(int argc, const char **argv, const char *prefix);\n extern int cmd_patch_id(int argc, const char **argv, const char *prefix);\n extern int cmd_pickaxe(int argc, const char **argv, const char *prefix);\n extern int cmd_prune(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex 832bd2d..6cc1eba 100644\n--- a/git.c\n+++ b/git.c\n@@ -343,6 +343,7 @@ static void handle_internal_command(int argc, const char **argv)\n \t\t{ \"mv\", cmd_mv, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"name-rev\", cmd_name_rev, RUN_SETUP },\n \t\t{ \"pack-objects\", cmd_pack_objects, RUN_SETUP },\n+\t\t{ \"pack-redundant\", cmd_pack_redundant, RUN_SETUP },\n \t\t{ \"patch-id\", cmd_patch_id },\n \t\t{ \"peek-remote\", cmd_ls_remote },\n \t\t{ \"pickaxe\", cmd_blame, RUN_SETUP },\n-- \n1.6.6.1.399.g73128\n"},{"id":"132403","messageId":"alpine.LFD.2.00.1001220828310.13231@localhost.localdomain","threadId":"22341","inReplyTo":"alpine.LFD.2.00.1001220827140.13231@localhost.localdomain","subject":"[PATCH 5/5] make \"index-pack\" a built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T16:31:52Z","receivedAt":"2010-01-22T16:31:52Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nFrom: Linus Torvalds <torvalds@linux-foundation.org>\nDate: Fri, 22 Jan 2010 07:55:19 -0800\n\nThis required some fairly trivial packfile function 'const' cleanup,\nsince the builtin commands get a const char *argv[] array.\n\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n---\n\nI say \"fairly trivial\", but I have to admit to hating the moron people who \ndecided that 'free()' takes a \"void *\", not a \"const void *\". So now we \nhave three new casts like this\n\n\tfree((void *)ptr)\n\njust to avoid a compiler warning due to incompetent standards people.\n\nOh well. I didn't feel it was worth an 'xfree()'.\n\n Makefile                             |    2 +-\n index-pack.c => builtin-index-pack.c |   16 +++++++---------\n builtin-pack-objects.c               |    5 +++--\n builtin.h                            |    1 +\n git.c                                |    1 +\n pack-write.c                         |    4 ++--\n pack.h                               |    2 +-\n 7 files changed, 16 insertions(+), 15 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 33f9870..c0dbee2 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -388,7 +388,6 @@ EXTRA_PROGRAMS =\n PROGRAMS += $(EXTRA_PROGRAMS)\n PROGRAMS += git-fast-import$X\n PROGRAMS += git-imap-send$X\n-PROGRAMS += git-index-pack$X\n PROGRAMS += git-shell$X\n PROGRAMS += git-show-index$X\n PROGRAMS += git-upload-pack$X\n@@ -653,6 +652,7 @@ BUILTIN_OBJS += builtin-gc.o\n BUILTIN_OBJS += builtin-grep.o\n BUILTIN_OBJS += builtin-hash-object.o\n BUILTIN_OBJS += builtin-help.o\n+BUILTIN_OBJS += builtin-index-pack.o\n BUILTIN_OBJS += builtin-init-db.o\n BUILTIN_OBJS += builtin-log.o\n BUILTIN_OBJS += builtin-ls-files.o\ndiff --git a/index-pack.c b/builtin-index-pack.c\nsimilarity index 98%\nrename from index-pack.c\nrename to builtin-index-pack.c\nindex 190f372..b4cf8c5 100644\n--- a/index-pack.c\n+++ b/builtin-index-pack.c\n@@ -166,7 +166,7 @@ static void use(int bytes)\n \tconsumed_bytes += bytes;\n }\n \n-static char *open_pack_file(char *pack_name)\n+static const char *open_pack_file(const char *pack_name)\n {\n \tif (from_stdin) {\n \t\tinput_fd = 0;\n@@ -870,18 +870,16 @@ static int git_index_pack_config(const char *k, const char *v, void *cb)\n \treturn git_default_config(k, v, cb);\n }\n \n-int main(int argc, char **argv)\n+int cmd_index_pack(int argc, const char **argv, const char *prefix)\n {\n \tint i, fix_thin_pack = 0;\n-\tchar *curr_pack, *pack_name = NULL;\n-\tchar *curr_index, *index_name = NULL;\n+\tconst char *curr_pack, *curr_index;\n+\tconst char *index_name = NULL, *pack_name = NULL;\n \tconst char *keep_name = NULL, *keep_msg = NULL;\n \tchar *index_name_buf = NULL, *keep_name_buf = NULL;\n \tstruct pack_idx_entry **idx_objects;\n \tunsigned char pack_sha1[20];\n \n-\tgit_extract_argv0_path(argv[0]);\n-\n \tif (argc == 2 && !strcmp(argv[1], \"-h\"))\n \t\tusage(index_pack_usage);\n \n@@ -906,7 +904,7 @@ int main(int argc, char **argv)\n \t}\n \n \tfor (i = 1; i < argc; i++) {\n-\t\tchar *arg = argv[i];\n+\t\tconst char *arg = argv[i];\n \n \t\tif (*arg == '-') {\n \t\t\tif (!strcmp(arg, \"--stdin\")) {\n@@ -1039,9 +1037,9 @@ int main(int argc, char **argv)\n \tfree(index_name_buf);\n \tfree(keep_name_buf);\n \tif (pack_name == NULL)\n-\t\tfree(curr_pack);\n+\t\tfree((void *) curr_pack);\n \tif (index_name == NULL)\n-\t\tfree(curr_index);\n+\t\tfree((void *) curr_index);\n \n \treturn 0;\n }\ndiff --git a/builtin-pack-objects.c b/builtin-pack-objects.c\nindex 59b07fe..b0887d7 100644\n--- a/builtin-pack-objects.c\n+++ b/builtin-pack-objects.c\n@@ -525,7 +525,8 @@ static void write_pack_file(void)\n \t\tif (!pack_to_stdout) {\n \t\t\tmode_t mode = umask(0);\n \t\t\tstruct stat st;\n-\t\t\tchar *idx_tmp_name, tmpname[PATH_MAX];\n+\t\t\tconst char *idx_tmp_name;\n+\t\t\tchar tmpname[PATH_MAX];\n \n \t\t\tumask(mode);\n \t\t\tmode = 0444 & ~mode;\n@@ -569,7 +570,7 @@ static void write_pack_file(void)\n \t\t\tif (rename(idx_tmp_name, tmpname))\n \t\t\t\tdie_errno(\"unable to rename temporary index file\");\n \n-\t\t\tfree(idx_tmp_name);\n+\t\t\tfree((void *) idx_tmp_name);\n \t\t\tfree(pack_tmp_name);\n \t\t\tputs(sha1_to_hex(sha1));\n \t\t}\ndiff --git a/builtin.h b/builtin.h\nindex bd7f737..e8202f3 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -58,6 +58,7 @@ extern int cmd_grep(int argc, const char **argv, const char *prefix);\n extern int cmd_hash_object(int argc, const char **argv, const char *prefix);\n extern int cmd_help(int argc, const char **argv, const char *prefix);\n extern int cmd_http_fetch(int argc, const char **argv, const char *prefix);\n+extern int cmd_index_pack(int argc, const char **argv, const char *prefix);\n extern int cmd_init_db(int argc, const char **argv, const char *prefix);\n extern int cmd_log(int argc, const char **argv, const char *prefix);\n extern int cmd_log_reflog(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex 6cc1eba..b3e23f1 100644\n--- a/git.c\n+++ b/git.c\n@@ -320,6 +320,7 @@ static void handle_internal_command(int argc, const char **argv)\n \t\t{ \"grep\", cmd_grep, USE_PAGER },\n \t\t{ \"hash-object\", cmd_hash_object },\n \t\t{ \"help\", cmd_help },\n+\t\t{ \"index-pack\", cmd_index_pack },\n \t\t{ \"init\", cmd_init_db },\n \t\t{ \"init-db\", cmd_init_db },\n \t\t{ \"log\", cmd_log, RUN_SETUP | USE_PAGER },\ndiff --git a/pack-write.c b/pack-write.c\nindex 741efcd..9f47cf9 100644\n--- a/pack-write.c\n+++ b/pack-write.c\n@@ -17,8 +17,8 @@ static int sha1_compare(const void *_a, const void *_b)\n  * the SHA1 hash of sorted object names. The objects array passed in\n  * will be sorted by SHA1 on exit.\n  */\n-char *write_idx_file(char *index_name, struct pack_idx_entry **objects,\n-\t\t     int nr_objects, unsigned char *sha1)\n+const char *write_idx_file(const char *index_name, struct pack_idx_entry **objects,\n+\t\t\t   int nr_objects, unsigned char *sha1)\n {\n \tstruct sha1file *f;\n \tstruct pack_idx_entry **sorted_by_sha, **list, **last;\ndiff --git a/pack.h b/pack.h\nindex a883334..b759a23 100644\n--- a/pack.h\n+++ b/pack.h\n@@ -55,7 +55,7 @@ struct pack_idx_entry {\n \toff_t offset;\n };\n \n-extern char *write_idx_file(char *index_name, struct pack_idx_entry **objects, int nr_objects, unsigned char *sha1);\n+extern const char *write_idx_file(const char *index_name, struct pack_idx_entry **objects, int nr_objects, unsigned char *sha1);\n extern int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr);\n extern int verify_pack(struct packed_git *);\n extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);\n-- \n1.6.6.1.399.g73128\n"},{"id":"132404","messageId":"alpine.LFD.2.00.1001220832300.13231@localhost.localdomain","threadId":"22341","inReplyTo":"alpine.LFD.2.00.1001220825190.13231@localhost.localdomain","subject":"Re: PATCH 2/5] make \"mktag\" a built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T16:33:35Z","receivedAt":"2010-01-22T16:33:35Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nOops, I screwed up the subject line on this one (obvious missing opening \nbrace, since I'm a tool and can't cut-and-paste correctly). So please fix \nthat before applying.\n\n\t\tLinus\n"},{"id":"132410","messageId":"7vmy06vwvy.fsf@alter.siamese.dyndns.org","threadId":"22341","inReplyTo":"alpine.LFD.2.00.1001220826230.13231@localhost.localdomain","subject":"Re: [PATCH 3/5] make \"git unpack-file\" a built-in","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-22T18:04:49Z","receivedAt":"2010-01-22T18:04:49Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Linus Torvalds <torvalds@linux-foundation.org> writes:\n\n> From: Linus Torvalds <torvalds@linux-foundation.org>\n> Date: Fri, 22 Jan 2010 07:38:03 -0800\n>\n> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n> ---\n> Again.. No surprises.\n> ...\n> diff --git a/unpack-file.c b/builtin-unpack-file.c\n> similarity index 89%\n> rename from unpack-file.c\n> rename to builtin-unpack-file.c\n> index e9d8934..608590a 100644\n> --- a/unpack-file.c\n> +++ b/builtin-unpack-file.c\n> @@ -22,18 +22,15 @@ static char *create_temp_file(unsigned char *sha1)\n>  \treturn path;\n>  }\n>  \n> -int main(int argc, char **argv)\n> +int cmd_unpack_file(int argc, const char **argv, const char *prefix)\n>  {\n>  \tunsigned char sha1[20];\n>  \n> -\tgit_extract_argv0_path(argv[0]);\n> -\n>  \tif (argc != 2 || !strcmp(argv[1], \"-h\"))\n>  \t\tusage(\"git unpack-file <sha1>\");\n>  \tif (get_sha1(argv[1], sha1))\n>  \t\tdie(\"Not a valid object name %s\", argv[1]);\n>  \n> -\tsetup_git_directory();\n\nThis will now require \"git unpack-file -h\" to be run in a git controlled\ndirectory, so strictly speaking it changes behaviour.\n\nNot that anybody would care that much, though.\n"},{"id":"132412","messageId":"alpine.LFD.2.00.1001221022121.13231@localhost.localdomain","threadId":"22341","inReplyTo":"7vmy06vwvy.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 3/5] make \"git unpack-file\" a built-in","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2010-01-22T18:26:12Z","receivedAt":"2010-01-22T18:26:12Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Fri, 22 Jan 2010, Junio C Hamano wrote:\n> >  {\n> >  \tunsigned char sha1[20];\n> >  \n> > -\tgit_extract_argv0_path(argv[0]);\n> > -\n> >  \tif (argc != 2 || !strcmp(argv[1], \"-h\"))\n> >  \t\tusage(\"git unpack-file <sha1>\");\n> >  \tif (get_sha1(argv[1], sha1))\n> >  \t\tdie(\"Not a valid object name %s\", argv[1]);\n> >  \n> > -\tsetup_git_directory();\n> \n> This will now require \"git unpack-file -h\" to be run in a git controlled\n> directory, so strictly speaking it changes behaviour.\n> \n> Not that anybody would care that much, though.\n\nHeh. You didn't notice the same change in the merge-tree conversion that \nyou already accepted ;)\n\nYeah, any usage messages will now run after setup for the commands that do \nthe whole RUN_SETUP thing. That's pack-redundant, unpack-file, mktag, \nmerge-index and merge-tree. So they'll now report \"Not a git repository\" \nbefore they report invalid arguments.\n\n\t\t\tLinus\n"}]}