Subject: [PATCH 9/3] Move non-builtin git commands and script libraries to a subdirectory

From: Jonathan Nieder <[email-masked]>
Date: Thu, 17 Feb 2011 23:04:05 -0600

Create a nonbuiltin/ directory for the standalone programs, scripts,
and script libraries that are installed in gitexecdir and implement
non-builtin git commands.

So now each file git-subcommand in /usr/libexec/git-core is a hard
link to git, a copy of scripts/unimplemented.sh, or builtin from a
file named nonbuiltin/subcommand.<something>, where <something> is c,
sh, or perl.

Signed-off-by: Jonathan Nieder <[email-masked]>
---
The patch would probably be cleaner if

	BUILT_SCRIPT_SH := $(patsubst %.sh,%,$(SCRIPT_SH))

et al were factored out first.

 Makefile                                           |  137 ++++++++++----------
 [ ... and a bunch of renames ... ]
 44 files changed, 70 insertions(+), 67 deletions(-)

diff --git a/Makefile b/Makefile
index 1c10e29..6f8a11c 100644
--- a/Makefile
+++ b/Makefile
@@ -358,44 +358,44 @@ TEST_PROGRAMS_NEED_X =
 # interactive shell sessions without exporting it.
 unexport CDPATH
 
-SCRIPT_SH += git-am.sh
-SCRIPT_SH += git-bisect.sh
-SCRIPT_SH += git-difftool--helper.sh
-SCRIPT_SH += git-filter-branch.sh
-SCRIPT_SH += git-lost-found.sh
-SCRIPT_SH += git-merge-octopus.sh
-SCRIPT_SH += git-merge-one-file.sh
-SCRIPT_SH += git-merge-resolve.sh
-SCRIPT_SH += git-mergetool.sh
-SCRIPT_SH += git-pull.sh
-SCRIPT_SH += git-quiltimport.sh
-SCRIPT_SH += git-rebase--interactive.sh
-SCRIPT_SH += git-rebase.sh
-SCRIPT_SH += git-repack.sh
-SCRIPT_SH += git-request-pull.sh
-SCRIPT_SH += git-stash.sh
-SCRIPT_SH += git-submodule.sh
-SCRIPT_SH += git-web--browse.sh
+SCRIPT_SH += nonbuiltin/am.sh
+SCRIPT_SH += nonbuiltin/bisect.sh
+SCRIPT_SH += nonbuiltin/difftool--helper.sh
+SCRIPT_SH += nonbuiltin/filter-branch.sh
+SCRIPT_SH += nonbuiltin/lost-found.sh
+SCRIPT_SH += nonbuiltin/merge-octopus.sh
+SCRIPT_SH += nonbuiltin/merge-one-file.sh
+SCRIPT_SH += nonbuiltin/merge-resolve.sh
+SCRIPT_SH += nonbuiltin/mergetool.sh
+SCRIPT_SH += nonbuiltin/pull.sh
+SCRIPT_SH += nonbuiltin/quiltimport.sh
+SCRIPT_SH += nonbuiltin/rebase--interactive.sh
+SCRIPT_SH += nonbuiltin/rebase.sh
+SCRIPT_SH += nonbuiltin/repack.sh
+SCRIPT_SH += nonbuiltin/request-pull.sh
+SCRIPT_SH += nonbuiltin/stash.sh
+SCRIPT_SH += nonbuiltin/submodule.sh
+SCRIPT_SH += nonbuiltin/web--browse.sh
 
 SCRIPT_LIB += git-mergetool--lib
 SCRIPT_LIB += git-parse-remote
 SCRIPT_LIB += git-sh-setup
 
-SCRIPT_PERL += git-add--interactive.perl
-SCRIPT_PERL += git-difftool.perl
-SCRIPT_PERL += git-archimport.perl
-SCRIPT_PERL += git-cvsexportcommit.perl
-SCRIPT_PERL += git-cvsimport.perl
-SCRIPT_PERL += git-cvsserver.perl
-SCRIPT_PERL += git-relink.perl
-SCRIPT_PERL += git-send-email.perl
-SCRIPT_PERL += git-svn.perl
+SCRIPT_PERL += nonbuiltin/add--interactive.perl
+SCRIPT_PERL += nonbuiltin/difftool.perl
+SCRIPT_PERL += nonbuiltin/archimport.perl
+SCRIPT_PERL += nonbuiltin/cvsexportcommit.perl
+SCRIPT_PERL += nonbuiltin/cvsimport.perl
+SCRIPT_PERL += nonbuiltin/cvsserver.perl
+SCRIPT_PERL += nonbuiltin/relink.perl
+SCRIPT_PERL += nonbuiltin/send-email.perl
+SCRIPT_PERL += nonbuiltin/svn.perl
 
-SCRIPT_PYTHON += git-remote-testgit.py
+SCRIPT_PYTHON += nonbuiltin/remote-testgit.py
 
-SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
-	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
-	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
+SCRIPTS = $(patsubst nonbuiltin/%.sh,git-%,$(SCRIPT_SH)) \
+	  $(patsubst nonbuiltin/%.perl,git-%,$(SCRIPT_PERL)) \
+	  $(patsubst nonbuiltin/%.py,git-%,$(SCRIPT_PYTHON)) \
 	  git-instaweb
 
 ETAGS_TARGET = TAGS
@@ -406,15 +406,15 @@ EXTRA_PROGRAMS =
 # ... and all the rest that could be moved out of bindir to gitexecdir
 PROGRAMS += $(EXTRA_PROGRAMS)
 
-PROGRAM_OBJS += daemon.o
-PROGRAM_OBJS += fast-import.o
-PROGRAM_OBJS += imap-send.o
-PROGRAM_OBJS += shell.o
-PROGRAM_OBJS += show-index.o
-PROGRAM_OBJS += upload-pack.o
-PROGRAM_OBJS += http-backend.o
+PROGRAM_OBJS += nonbuiltin/daemon.o
+PROGRAM_OBJS += nonbuiltin/fast-import.o
+PROGRAM_OBJS += nonbuiltin/imap-send.o
+PROGRAM_OBJS += nonbuiltin/shell.o
+PROGRAM_OBJS += nonbuiltin/show-index.o
+PROGRAM_OBJS += nonbuiltin/upload-pack.o
+PROGRAM_OBJS += nonbuiltin/http-backend.o
 
-PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
+PROGRAMS += $(patsubst nonbuiltin/%.o,git-%$X,$(PROGRAM_OBJS))
 
 TEST_PROGRAMS_NEED_X += test-chmtime
 TEST_PROGRAMS_NEED_X += test-ctype
@@ -1267,12 +1267,12 @@ else
 	REMOTE_CURL_PRIMARY = git-remote-http$X
 	REMOTE_CURL_ALIASES = git-remote-https$X git-remote-ftp$X git-remote-ftps$X
 	REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
-	PROGRAM_OBJS += http-fetch.o
+	PROGRAM_OBJS += nonbuiltin/http-fetch.o
 	PROGRAMS += $(REMOTE_CURL_NAMES)
 	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
 	ifeq "$(curl_check)" "070908"
 		ifndef NO_EXPAT
-			PROGRAM_OBJS += http-push.o
+			PROGRAM_OBJS += nonbuiltin/http-push.o
 		endif
 	endif
 	ifndef NO_EXPAT
@@ -1710,25 +1710,25 @@ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
     -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
     -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
     -e $(BROKEN_PATH_FIX) \
-    $@.sh >$@+
+    $< >$@+
 endef
 
-$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
+$(patsubst nonbuiltin/%.sh,git-%,$(SCRIPT_SH)) : git-% : nonbuiltin/%.sh
 	$(QUIET_GEN)$(cmd_munge_script) && \
 	chmod +x $@+ && \
 	mv $@+ $@
 
-$(SCRIPT_LIB) : % : %.sh
+$(SCRIPT_LIB) : git-% : nonbuiltin/%.sh
 	$(QUIET_GEN)$(cmd_munge_script) && \
 	mv $@+ $@
 
 ifndef NO_PERL
-$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak
+$(patsubst nonbuiltin/%.perl,git-%,$(SCRIPT_PERL)): perl/perl.mak
 
 perl/perl.mak: GIT-CFLAGS perl/Makefile perl/Makefile.PL
 	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' $(@F)
 
-$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
+$(patsubst nonbuiltin/%.perl,git-%,$(SCRIPT_PERL)): git-% : nonbuiltin/%.perl
 	$(QUIET_GEN)$(RM) $@ $@+ && \
 	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
 	sed -e '1{' \
@@ -1739,7 +1739,7 @@ $(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
 	    -e '	x' \
 	    -e '}' \
 	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
-	    $@.perl >$@+ && \
+	    $< >$@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
 
@@ -1774,18 +1774,18 @@ gitweb/static/gitweb.min.css: gitweb/static/gitweb.css
 endif # CSSMIN

-git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/static/gitweb.css gitweb/static/gitweb.js
+git-instaweb: nonbuiltin/instaweb.sh gitweb/gitweb.cgi gitweb/static/gitweb.css gitweb/static/gitweb.js
 	$(QUIET_GEN)$(RM) $@ $@+ && \
 	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
 	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
 	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
 	    -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
 	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
-	    $@.sh > $@+ && \
+	    $< >$@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
 else # NO_PERL
-$(patsubst %.perl,%,$(SCRIPT_PERL)) git-instaweb: % : scripts/unimplemented.sh
+$(patsubst nonbuiltin/%.perl,git-%,$(SCRIPT_PERL)) git-instaweb: git-% : scripts/unimplemented.sh
 	$(QUIET_GEN)$(RM) $@ $@+ && \
 	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
 	    -e 's|@@REASON@@|NO_PERL=$(NO_PERL)|g' \
@@ -1795,8 +1795,8 @@ $(patsubst %.perl,%,$(SCRIPT_PERL)) git-instaweb: % : scripts/unimplemented.sh
 endif # NO_PERL
 
 ifndef NO_PYTHON
-$(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS
-$(patsubst %.py,%,$(SCRIPT_PYTHON)): % : %.py
+$(patsubst nonbuiltin/%.py,git-%,$(SCRIPT_PYTHON)): GIT-CFLAGS
+$(patsubst nonbuiltin/%.py,git-%,$(SCRIPT_PYTHON)): git-% : nonbuiltin/%.py
 	$(QUIET_GEN)$(RM) $@ $@+ && \
 	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C git_remote_helpers -s \
 		--no-print-directory prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' \
@@ -1804,11 +1804,11 @@ $(patsubst %.py,%,$(SCRIPT_PYTHON)): % : %.py
 	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
 	    -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
 	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
-	    $@.py >$@+ && \
+	    $< >$@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
 else # NO_PYTHON
-$(patsubst %.py,%,$(SCRIPT_PYTHON)): % : scripts/unimplemented.sh
+$(patsubst nonbuiltin/%.py,git-%,$(SCRIPT_PYTHON)): git-% : scripts/unimplemented.sh
 	$(QUIET_GEN)$(RM) $@ $@+ && \
 	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
 	    -e 's|@@REASON@@|NO_PYTHON=$(NO_PYTHON)|g' \
@@ -1826,15 +1826,15 @@ configure: configure.ac
 
 # These can record GIT_VERSION
 git.o git.spec \
-	$(patsubst %.sh,%,$(SCRIPT_SH)) \
-	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
+	$(patsubst nonbuiltin/%.sh,git-%,$(SCRIPT_SH)) \
+	$(patsubst nonbuiltin/%.perl,git-%,$(SCRIPT_PERL)) \
 	: GIT-VERSION-FILE
 
 TEST_OBJS := $(patsubst test-%$X,test-programs/test-%.o,$(TEST_PROGRAMS))
 GIT_OBJS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
 	git.o
 ifndef NO_CURL
-	GIT_OBJS += http.o http-walker.o remote-curl.o
+	GIT_OBJS += http.o http-walker.o nonbuiltin/remote-curl.o
 endif
 XDIFF_OBJS = xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
 	xdiff/xmerge.o xdiff/xpatience.o
@@ -1960,9 +1960,11 @@ builtin/log.o builtin/shortlog.o: include/shortlog.h
 builtin/prune.o builtin/reflog.o libgit/reachable.o: include/reachable.h
 builtin/commit.o builtin/revert.o libgit/wt-status.o: include/wt-status.h
 builtin/tar-tree.o libgit/archive-tar.o: include/tar.h
-libgit/connect.o libgit/transport.o http-backend.o: include/url.h
-http-fetch.o http-walker.o remote-curl.o libgit/transport.o libgit/walker.o: include/walker.h
-http.o http-walker.o http-push.o http-fetch.o remote-curl.o: include/http.h include/url.h
+libgit/connect.o libgit/transport.o nonbuiltin/http-backend.o: include/url.h
+nonbuiltin/http-fetch.o nonbuiltin/remote-curl.o http-walker.o: include/walker.h
+libgit/transport.o libgit/walker.o: include/walker.h
+nonbuiltin/http-push.o nonbuiltin/http-fetch.o: include/http.h include/url.h
+nonbuiltin/remote-curl.o http.o http-walker.o: include/http.h include/url.h
 
 libgit/xdiff-interface.o $(XDIFF_OBJS): \
 	xdiff/xinclude.h xdiff/xmacros.h xdiff/xdiff.h xdiff/xtypes.h \
@@ -2005,17 +2007,17 @@ compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
 	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
 endif
 
-git-%$X: %.o $(GITLIBS)
+git-%$X: nonbuiltin/%.o $(GITLIBS)
 	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
 
-git-imap-send$X: imap-send.o $(GITLIBS)
+git-imap-send$X: nonbuiltin/imap-send.o $(GITLIBS)
 	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
 		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
 
-git-http-fetch$X: libgit/revision.o http.o http-walker.o http-fetch.o $(GITLIBS)
+git-http-fetch$X: libgit/revision.o http.o http-walker.o nonbuiltin/http-fetch.o $(GITLIBS)
 	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
 		$(LIBS) $(CURL_LIBCURL)
-git-http-push$X: libgit/revision.o http.o http-push.o $(GITLIBS)
+git-http-push$X: libgit/revision.o http.o nonbuiltin/http-push.o $(GITLIBS)
 	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
 		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
 
@@ -2025,7 +2027,7 @@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
 	ln -s $< $@ 2>/dev/null || \
 	cp $< $@
 
-$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o $(GITLIBS)
+$(REMOTE_CURL_PRIMARY): nonbuiltin/remote-curl.o http.o http-walker.o $(GITLIBS)
 	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
 		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
 
@@ -2321,8 +2323,9 @@ distclean: clean
 	$(RM) configure
 
 clean:
-	$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
-		libgit/*.o builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
+	$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o
+	$(RM) libgit/*.o builtin/*.o nonbuiltin/*.o
+	$(RM) $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
 	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
 	$(RM) test-programs/*.o $(TEST_PROGRAMS)
 	$(RM) -r bin-wrappers
diff --git a/git-add--interactive.perl b/nonbuiltin/add--interactive.perl
similarity index 100%
rename from git-add--interactive.perl
rename to nonbuiltin/add--interactive.perl
diff --git a/git-am.sh b/nonbuiltin/am.sh
similarity index 100%
rename from git-am.sh
rename to nonbuiltin/am.sh
diff --git a/git-archimport.perl b/nonbuiltin/archimport.perl
similarity index 100%
rename from git-archimport.perl
rename to nonbuiltin/archimport.perl
diff --git a/git-bisect.sh b/nonbuiltin/bisect.sh
similarity index 100%
rename from git-bisect.sh
rename to nonbuiltin/bisect.sh
diff --git a/check-racy.c b/nonbuiltin/check-racy.c
similarity index 100%
rename from check-racy.c
rename to nonbuiltin/check-racy.c
diff --git a/git-cvsexportcommit.perl b/nonbuiltin/cvsexportcommit.perl
similarity index 100%
rename from git-cvsexportcommit.perl
rename to nonbuiltin/cvsexportcommit.perl
diff --git a/git-cvsimport.perl b/nonbuiltin/cvsimport.perl
similarity index 100%
rename from git-cvsimport.perl
rename to nonbuiltin/cvsimport.perl
diff --git a/git-cvsserver.perl b/nonbuiltin/cvsserver.perl
similarity index 100%
rename from git-cvsserver.perl
rename to nonbuiltin/cvsserver.perl
diff --git a/daemon.c b/nonbuiltin/daemon.c
similarity index 100%
rename from daemon.c
rename to nonbuiltin/daemon.c
diff --git a/git-difftool--helper.sh b/nonbuiltin/difftool--helper.sh
similarity index 100%
rename from git-difftool--helper.sh
rename to nonbuiltin/difftool--helper.sh
diff --git a/git-difftool.perl b/nonbuiltin/difftool.perl
similarity index 100%
rename from git-difftool.perl
rename to nonbuiltin/difftool.perl
diff --git a/fast-import.c b/nonbuiltin/fast-import.c
similarity index 100%
rename from fast-import.c
rename to nonbuiltin/fast-import.c
diff --git a/git-filter-branch.sh b/nonbuiltin/filter-branch.sh
similarity index 100%
rename from git-filter-branch.sh
rename to nonbuiltin/filter-branch.sh
diff --git a/http-backend.c b/nonbuiltin/http-backend.c
similarity index 100%
rename from http-backend.c
rename to nonbuiltin/http-backend.c
diff --git a/http-fetch.c b/nonbuiltin/http-fetch.c
similarity index 100%
rename from http-fetch.c
rename to nonbuiltin/http-fetch.c
diff --git a/http-push.c b/nonbuiltin/http-push.c
similarity index 100%
rename from http-push.c
rename to nonbuiltin/http-push.c
diff --git a/imap-send.c b/nonbuiltin/imap-send.c
similarity index 100%
rename from imap-send.c
rename to nonbuiltin/imap-send.c
diff --git a/git-instaweb.sh b/nonbuiltin/instaweb.sh
similarity index 100%
rename from git-instaweb.sh
rename to nonbuiltin/instaweb.sh
diff --git a/git-lost-found.sh b/nonbuiltin/lost-found.sh
similarity index 100%
rename from git-lost-found.sh
rename to nonbuiltin/lost-found.sh
diff --git a/git-merge-octopus.sh b/nonbuiltin/merge-octopus.sh
similarity index 100%
rename from git-merge-octopus.sh
rename to nonbuiltin/merge-octopus.sh
diff --git a/git-merge-one-file.sh b/nonbuiltin/merge-one-file.sh
similarity index 100%
rename from git-merge-one-file.sh
rename to nonbuiltin/merge-one-file.sh
diff --git a/git-merge-resolve.sh b/nonbuiltin/merge-resolve.sh
similarity index 100%
rename from git-merge-resolve.sh
rename to nonbuiltin/merge-resolve.sh
diff --git a/git-mergetool--lib.sh b/nonbuiltin/mergetool--lib.sh
similarity index 100%
rename from git-mergetool--lib.sh
rename to nonbuiltin/mergetool--lib.sh
diff --git a/git-mergetool.sh b/nonbuiltin/mergetool.sh
similarity index 100%
rename from git-mergetool.sh
rename to nonbuiltin/mergetool.sh
diff --git a/git-parse-remote.sh b/nonbuiltin/parse-remote.sh
similarity index 100%
rename from git-parse-remote.sh
rename to nonbuiltin/parse-remote.sh
diff --git a/git-pull.sh b/nonbuiltin/pull.sh
similarity index 100%
rename from git-pull.sh
rename to nonbuiltin/pull.sh
diff --git a/git-quiltimport.sh b/nonbuiltin/quiltimport.sh
similarity index 100%
rename from git-quiltimport.sh
rename to nonbuiltin/quiltimport.sh
diff --git a/git-rebase--interactive.sh b/nonbuiltin/rebase--interactive.sh
similarity index 100%
rename from git-rebase--interactive.sh
rename to nonbuiltin/rebase--interactive.sh
diff --git a/git-rebase.sh b/nonbuiltin/rebase.sh
similarity index 100%
rename from git-rebase.sh
rename to nonbuiltin/rebase.sh
diff --git a/git-relink.perl b/nonbuiltin/relink.perl
similarity index 100%
rename from git-relink.perl
rename to nonbuiltin/relink.perl
diff --git a/remote-curl.c b/nonbuiltin/remote-curl.c
similarity index 100%
rename from remote-curl.c
rename to nonbuiltin/remote-curl.c
diff --git a/git-remote-testgit.py b/nonbuiltin/remote-testgit.py
similarity index 100%
rename from git-remote-testgit.py
rename to nonbuiltin/remote-testgit.py
diff --git a/git-repack.sh b/nonbuiltin/repack.sh
similarity index 100%
rename from git-repack.sh
rename to nonbuiltin/repack.sh
diff --git a/git-request-pull.sh b/nonbuiltin/request-pull.sh
similarity index 100%
rename from git-request-pull.sh
rename to nonbuiltin/request-pull.sh
diff --git a/git-send-email.perl b/nonbuiltin/send-email.perl
similarity index 100%
rename from git-send-email.perl
rename to nonbuiltin/send-email.perl
diff --git a/git-sh-setup.sh b/nonbuiltin/sh-setup.sh
similarity index 100%
rename from git-sh-setup.sh
rename to nonbuiltin/sh-setup.sh
diff --git a/shell.c b/nonbuiltin/shell.c
similarity index 100%
rename from shell.c
rename to nonbuiltin/shell.c
diff --git a/show-index.c b/nonbuiltin/show-index.c
similarity index 100%
rename from show-index.c
rename to nonbuiltin/show-index.c
diff --git a/git-stash.sh b/nonbuiltin/stash.sh
similarity index 100%
rename from git-stash.sh
rename to nonbuiltin/stash.sh
diff --git a/git-submodule.sh b/nonbuiltin/submodule.sh
similarity index 100%
rename from git-submodule.sh
rename to nonbuiltin/submodule.sh
diff --git a/git-svn.perl b/nonbuiltin/svn.perl
similarity index 100%
rename from git-svn.perl
rename to nonbuiltin/svn.perl
diff --git a/upload-pack.c b/nonbuiltin/upload-pack.c
similarity index 100%
rename from upload-pack.c
rename to nonbuiltin/upload-pack.c
diff --git a/git-web--browse.sh b/nonbuiltin/web--browse.sh
similarity index 100%
rename from git-web--browse.sh
rename to nonbuiltin/web--browse.sh
-- 
1.7.4.1