{"thread":{"id":"10514","subject":"[PATCH 3/4] Build-in send-pack, with an API for other programs to call.","startedAt":"2007-10-30T01:05:46Z","lastAt":"2007-10-30T01:19:51Z","messageCount":4,"participants":["Daniel Barkalow","Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":4},"messages":[{"id":"57503","messageId":"Pine.LNX.4.64.0710292049350.7357@iabervon.org","threadId":"10514","inReplyTo":null,"subject":"[PATCH 3/4] Build-in send-pack, with an API for other programs to call.","fromName":"Daniel Barkalow","fromEmail":"barkalow@iabervon.org","sentAt":"2007-10-30T01:05:46Z","receivedAt":"2007-10-30T01:05:46Z","isPatch":true,"sender":{"key":"barkalow@iabervon.org","avatar":"https://avatars.githubusercontent.com/u/55364219?v=4"},"body":"Also marks some more things as const, as needed.\n\nSigned-off-by: Daniel Barkalow <barkalow@iabervon.org>\n---\n Makefile                           |    1 +\n send-pack.c => builtin-send-pack.c |   40 +++++++++++++++++++++++++----------\n builtin.h                          |    1 +\n git.c                              |    1 +\n send-pack.h                        |   18 ++++++++++++++++\n 5 files changed, 49 insertions(+), 12 deletions(-)\n rename send-pack.c => builtin-send-pack.c (93%)\n create mode 100644 send-pack.h\n\ndiff --git a/Makefile b/Makefile\nindex 64ad297..8b0c8cd 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -359,6 +359,7 @@ BUILTIN_OBJS = \\\n \tbuiltin-push.o \\\n \tbuiltin-read-tree.o \\\n \tbuiltin-reflog.o \\\n+\tbuiltin-send-pack.o \\\n \tbuiltin-config.o \\\n \tbuiltin-rerere.o \\\n \tbuiltin-reset.o \\\ndiff --git a/send-pack.c b/builtin-send-pack.c\nsimilarity index 93%\nrename from send-pack.c\nrename to builtin-send-pack.c\nindex fe56617..931f994 100644\n--- a/send-pack.c\n+++ b/builtin-send-pack.c\n@@ -5,6 +5,7 @@\n #include \"pkt-line.h\"\n #include \"run-command.h\"\n #include \"remote.h\"\n+#include \"send-pack.h\"\n \n static const char send_pack_usage[] =\n \"git-send-pack [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]\\n\"\n@@ -178,7 +179,7 @@ static int receive_status(int in)\n \treturn ret;\n }\n \n-static int send_pack(int in, int out, struct remote *remote, int nr_refspec, const char **refspec)\n+static int do_send_pack(int in, int out, struct remote *remote, int nr_refspec, const char **refspec)\n {\n \tstruct ref *ref;\n \tint new_refs;\n@@ -360,22 +361,27 @@ static void verify_remote_names(int nr_heads, const char **heads)\n \t}\n }\n \n-int main(int argc, char **argv)\n+void setup_send_pack(struct send_pack_args *args)\n+{\n+\treceivepack = args->receivepack;\n+\tverbose = args->verbose;\n+\tsend_all = args->send_all;\n+\tforce_update = args->force_update;\n+\tuse_thin_pack = args->use_thin_pack;\n+\tdry_run = args->dry_run;\n+}\n+\n+int cmd_send_pack(int argc, const char **argv, const char *prefix)\n {\n \tint i, nr_heads = 0;\n-\tchar *dest = NULL;\n \tconst char **heads = NULL;\n-\tint fd[2], ret;\n-\tpid_t pid;\n-\tchar *remote_name = NULL;\n+\tconst char *remote_name = NULL;\n \tstruct remote *remote = NULL;\n-\n-\tsetup_git_directory();\n-\tgit_config(git_default_config);\n+\tconst char *dest = NULL;\n \n \targv++;\n \tfor (i = 1; i < argc; i++, argv++) {\n-\t\tchar *arg = *argv;\n+\t\tconst char *arg = *argv;\n \n \t\tif (*arg == '-') {\n \t\t\tif (!prefixcmp(arg, \"--receive-pack=\")) {\n@@ -424,7 +430,6 @@ int main(int argc, char **argv)\n \t\tusage(send_pack_usage);\n \tif (heads && send_all)\n \t\tusage(send_pack_usage);\n-\tverify_remote_names(nr_heads, heads);\n \n \tif (remote_name) {\n \t\tremote = remote_get(remote_name);\n@@ -434,10 +439,21 @@ int main(int argc, char **argv)\n \t\t}\n \t}\n \n+\treturn send_pack(dest, remote, nr_heads, heads);\n+}\n+\n+int send_pack(const char *dest, struct remote *remote,\n+\t      int nr_heads, const char **heads)\n+{\n+\tint fd[2], ret;\n+\tpid_t pid;\n+\n+\tverify_remote_names(nr_heads, heads);\n+\n \tpid = git_connect(fd, dest, receivepack, verbose ? CONNECT_VERBOSE : 0);\n \tif (pid < 0)\n \t\treturn 1;\n-\tret = send_pack(fd[0], fd[1], remote, nr_heads, heads);\n+\tret = do_send_pack(fd[0], fd[1], remote, nr_heads, heads);\n \tclose(fd[0]);\n \tclose(fd[1]);\n \tret |= finish_connect(pid);\ndiff --git a/builtin.h b/builtin.h\nindex ff84835..51747c7 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -69,6 +69,7 @@ extern int cmd_rev_parse(int argc, const char **argv, const char *prefix);\n extern int cmd_revert(int argc, const char **argv, const char *prefix);\n extern int cmd_rm(int argc, const char **argv, const char *prefix);\n extern int cmd_runstatus(int argc, const char **argv, const char *prefix);\n+extern int cmd_send_pack(int argc, const char **argv, const char *prefix);\n extern int cmd_shortlog(int argc, const char **argv, const char *prefix);\n extern int cmd_show(int argc, const char **argv, const char *prefix);\n extern int cmd_show_branch(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex 1b182e2..4893a85 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{ \"revert\", cmd_revert, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"rm\", cmd_rm, RUN_SETUP | NEED_WORK_TREE },\n \t\t{ \"runstatus\", cmd_runstatus, RUN_SETUP | NEED_WORK_TREE },\n+\t\t{ \"send-pack\", cmd_send_pack, RUN_SETUP },\n \t\t{ \"shortlog\", cmd_shortlog, RUN_SETUP | USE_PAGER },\n \t\t{ \"show-branch\", cmd_show_branch, RUN_SETUP },\n \t\t{ \"show\", cmd_show, RUN_SETUP | USE_PAGER },\ndiff --git a/send-pack.h b/send-pack.h\nnew file mode 100644\nindex 0000000..22b0624\n--- /dev/null\n+++ b/send-pack.h\n@@ -0,0 +1,18 @@\n+#ifndef SEND_PACK_H\n+#define SEND_PACK_H\n+\n+struct send_pack_args {\n+\tconst char *receivepack;\n+\tint verbose;\n+\tint send_all;\n+\tint force_update;\n+\tint use_thin_pack;\n+\tint dry_run;\n+};\n+\n+void setup_send_pack(struct send_pack_args *args);\n+\n+int send_pack(const char *dest, struct remote *remote,\n+\t      int nr_heads, const char **heads);\n+\n+#endif\n-- \n1.5.3.4.1206.g5f96\n"},{"id":"57507","messageId":"20071030011401.GU14735@spearce.org","threadId":"10514","inReplyTo":"Pine.LNX.4.64.0710292049350.7357@iabervon.org","subject":"Re: [PATCH 3/4] Build-in send-pack, with an API for other programs to call.","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2007-10-30T01:14:01Z","receivedAt":"2007-10-30T01:14:01Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Daniel Barkalow <barkalow@iabervon.org> wrote:\n> -int main(int argc, char **argv)\n> +void setup_send_pack(struct send_pack_args *args)\n> +{\n> +\treceivepack = args->receivepack;\n> +\tverbose = args->verbose;\n> +\tsend_all = args->send_all;\n> +\tforce_update = args->force_update;\n> +\tuse_thin_pack = args->use_thin_pack;\n> +\tdry_run = args->dry_run;\n> +}\n...\n> +struct send_pack_args {\n> +\tconst char *receivepack;\n> +\tint verbose;\n> +\tint send_all;\n> +\tint force_update;\n> +\tint use_thin_pack;\n> +\tint dry_run;\n> +};\n> +\n\nIck.  How about doing what I did with builtin-fetch-pack.c which\nwas to copy the args into a global \"static struct fetch_pack_args\"\nand make the struct a bitfield with these boolean items as \":1\"\nrather than a full int?\n\n-- \nShawn.\n"},{"id":"57508","messageId":"20071030011838.GV14735@spearce.org","threadId":"10514","inReplyTo":"20071030011401.GU14735@spearce.org","subject":"Re: [PATCH 3/4] Build-in send-pack, with an API for other programs to call.","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2007-10-30T01:18:38Z","receivedAt":"2007-10-30T01:18:38Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> wrote:\n> Daniel Barkalow <barkalow@iabervon.org> wrote:\n> > -int main(int argc, char **argv)\n> > +void setup_send_pack(struct send_pack_args *args)\n> > +{\n> > +\treceivepack = args->receivepack;\n> > +\tverbose = args->verbose;\n> > +\tsend_all = args->send_all;\n> > +\tforce_update = args->force_update;\n> > +\tuse_thin_pack = args->use_thin_pack;\n> > +\tdry_run = args->dry_run;\n> > +}\n> ...\n> > +struct send_pack_args {\n> > +\tconst char *receivepack;\n> > +\tint verbose;\n> > +\tint send_all;\n> > +\tint force_update;\n> > +\tint use_thin_pack;\n> > +\tint dry_run;\n> > +};\n> > +\n> \n> Ick.  How about doing what I did with builtin-fetch-pack.c [...]\n\nTo be more precise please refer to the following fetch-pack changes:\n\n  fa74052922: Always obtain fetch-pack arguments from struct fetch_pack_args\n  bbaf458428: Use 'unsigned:1' when we mean boolean options\n\n-- \nShawn.\n"},{"id":"57509","messageId":"Pine.LNX.4.64.0710292119080.7357@iabervon.org","threadId":"10514","inReplyTo":"20071030011401.GU14735@spearce.org","subject":"Re: [PATCH 3/4] Build-in send-pack, with an API for other programs to call.","fromName":"Daniel Barkalow","fromEmail":"barkalow@iabervon.org","sentAt":"2007-10-30T01:19:51Z","receivedAt":"2007-10-30T01:19:51Z","isPatch":true,"sender":{"key":"barkalow@iabervon.org","avatar":"https://avatars.githubusercontent.com/u/55364219?v=4"},"body":"On Mon, 29 Oct 2007, Shawn O. Pearce wrote:\n\n> Daniel Barkalow <barkalow@iabervon.org> wrote:\n> > -int main(int argc, char **argv)\n> > +void setup_send_pack(struct send_pack_args *args)\n> > +{\n> > +\treceivepack = args->receivepack;\n> > +\tverbose = args->verbose;\n> > +\tsend_all = args->send_all;\n> > +\tforce_update = args->force_update;\n> > +\tuse_thin_pack = args->use_thin_pack;\n> > +\tdry_run = args->dry_run;\n> > +}\n> ...\n> > +struct send_pack_args {\n> > +\tconst char *receivepack;\n> > +\tint verbose;\n> > +\tint send_all;\n> > +\tint force_update;\n> > +\tint use_thin_pack;\n> > +\tint dry_run;\n> > +};\n> > +\n> \n> Ick.  How about doing what I did with builtin-fetch-pack.c which\n> was to copy the args into a global \"static struct fetch_pack_args\"\n> and make the struct a bitfield with these boolean items as \":1\"\n> rather than a full int?\n\nYeah, that's better. I'll respin parts 3 and 4 that way.\n\n\t-Daniel\n*This .sig left intentionally blank*\n"}]}