From 4cfc24afc9ffa4d3f1623be8990eea118e82d4fd Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 19 Aug 2008 18:05:39 -0700 Subject: [PATCH 1/2] shell: do not play duplicated definition games to shrink the executable Playing with linker games to shrink git-shell did not go well with various other platforms and compilers. Signed-off-by: Junio C Hamano --- Makefile | 9 +-------- shell.c | 8 -------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 53ab4b5536..71339e1098 100644 --- a/Makefile +++ b/Makefile @@ -333,7 +333,6 @@ endif export PERL_PATH LIB_FILE=libgit.a -COMPAT_LIB = compat/lib.a XDIFF_LIB=xdiff/lib.a LIB_H += archive.h @@ -1223,12 +1222,6 @@ git-http-push$X: revision.o http.o http-push.o $(GITLIBS) $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \ $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) -$(COMPAT_LIB): $(COMPAT_OBJS) - $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(COMPAT_OBJS) - -git-shell$X: abspath.o ctype.o exec_cmd.o quote.o strbuf.o usage.o wrapper.o shell.o $(COMPAT_LIB) - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(COMPAT_LIB) - $(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H) $(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h) builtin-revert.o wt-status.o: wt-status.h @@ -1441,7 +1434,7 @@ distclean: clean clean: $(RM) *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o xdiff/*.o \ - $(LIB_FILE) $(XDIFF_LIB) $(COMPAT_LIB) + $(LIB_FILE) $(XDIFF_LIB) $(RM) $(ALL_PROGRAMS) $(BUILT_INS) git$X $(RM) $(TEST_PROGRAMS) $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope* diff --git a/shell.c b/shell.c index 6a48de05ff..0f6a727a8c 100644 --- a/shell.c +++ b/shell.c @@ -3,14 +3,6 @@ #include "exec_cmd.h" #include "strbuf.h" -/* Stubs for functions that make no sense for git-shell. These stubs - * are provided here to avoid linking in external redundant modules. - */ -void release_pack_memory(size_t need, int fd){} -void trace_argv_printf(const char **argv, const char *fmt, ...){} -void trace_printf(const char *fmt, ...){} - - static int do_generic_cmd(const char *me, char *arg) { const char *my_argv[4]; From daa0cc9a92c9c2c714aa5f7da6d0ff65b93e0698 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 19 Aug 2008 18:05:43 -0700 Subject: [PATCH 2/2] Build-in "git-shell" This trivially makes "git-shell" a built-in. It makes the executable even fatter, though. And MinGW removed git-shell only because of the funny dependencies; there is no reason to do so anymore. Signed-off-by: Junio C Hamano Tested-on-MinGW-by: Johannes Sixt --- Makefile | 2 +- shell.c => builtin-shell.c | 5 +++-- builtin.h | 1 + git.c | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) rename shell.c => builtin-shell.c (94%) diff --git a/Makefile b/Makefile index 71339e1098..7c585e866c 100644 --- a/Makefile +++ b/Makefile @@ -546,6 +546,7 @@ BUILTIN_OBJS += builtin-rev-parse.o BUILTIN_OBJS += builtin-revert.o BUILTIN_OBJS += builtin-rm.o BUILTIN_OBJS += builtin-send-pack.o +BUILTIN_OBJS += builtin-shell.o BUILTIN_OBJS += builtin-shortlog.o BUILTIN_OBJS += builtin-show-branch.o BUILTIN_OBJS += builtin-show-ref.o @@ -821,7 +822,6 @@ EXTLIBS += -lz ifndef NO_POSIX_ONLY_PROGRAMS PROGRAMS += git-daemon$X PROGRAMS += git-imap-send$X - PROGRAMS += git-shell$X endif ifndef NO_OPENSSL OPENSSL_LIBSSL = -lssl diff --git a/shell.c b/builtin-shell.c similarity index 94% rename from shell.c rename to builtin-shell.c index 0f6a727a8c..3cf97d4f5d 100644 --- a/shell.c +++ b/builtin-shell.c @@ -2,6 +2,7 @@ #include "quote.h" #include "exec_cmd.h" #include "strbuf.h" +#include "builtin.h" static int do_generic_cmd(const char *me, char *arg) { @@ -44,7 +45,7 @@ static struct commands { { NULL }, }; -int main(int argc, char **argv) +int cmd_shell(int argc, const char **argv, const char *prefix) { char *prog; struct commands *cmd; @@ -62,7 +63,7 @@ int main(int argc, char **argv) else if (argc != 3 || strcmp(argv[1], "-c")) die("What do you think I am? A shell?"); - prog = argv[2]; + prog = xstrdup(argv[2]); if (!strncmp(prog, "git", 3) && isspace(prog[3])) /* Accept "git foo" as if the caller said "git-foo". */ prog[3] = '-'; diff --git a/builtin.h b/builtin.h index f3502d305e..2b57a5eb6b 100644 --- a/builtin.h +++ b/builtin.h @@ -88,6 +88,7 @@ extern int cmd_rev_parse(int argc, const char **argv, const char *prefix); extern int cmd_revert(int argc, const char **argv, const char *prefix); extern int cmd_rm(int argc, const char **argv, const char *prefix); extern int cmd_send_pack(int argc, const char **argv, const char *prefix); +extern int cmd_shell(int argc, const char **argv, const char *prefix); extern int cmd_shortlog(int argc, const char **argv, const char *prefix); extern int cmd_show(int argc, const char **argv, const char *prefix); extern int cmd_show_branch(int argc, const char **argv, const char *prefix); diff --git a/git.c b/git.c index 37b1d76a08..89e4645736 100644 --- a/git.c +++ b/git.c @@ -338,6 +338,7 @@ static void handle_internal_command(int argc, const char **argv) { "revert", cmd_revert, RUN_SETUP | NEED_WORK_TREE }, { "rm", cmd_rm, RUN_SETUP }, { "send-pack", cmd_send_pack, RUN_SETUP }, + { "shell", cmd_shell }, { "shortlog", cmd_shortlog, USE_PAGER }, { "show-branch", cmd_show_branch, RUN_SETUP }, { "show", cmd_show, RUN_SETUP | USE_PAGER },