Merge for-each-ref to sync gitweb fully with 'next'
authorJunio C Hamano <junkio@cox.net>
Wed, 25 Oct 2006 20:29:12 +0000 (13:29 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 25 Oct 2006 20:29:12 +0000 (13:29 -0700)
1  2 
.gitignore
Makefile
builtin.h
git.c
diff --combined .gitignore
index 25eb4637a6f971a4a290ab823a937997c700bd7f,0b08f37622352869f54febcdf5113e2df57fcf35..b670877510ca89bad91bed82e7527d26f2fa9248
@@@ -8,7 -8,6 +8,7 @@@ git-appl
  git-applymbox
  git-applypatch
  git-archimport
 +git-archive
  git-bisect
  git-branch
  git-cat-file
@@@ -37,6 -36,7 +37,7 @@@ git-fetc
  git-fetch-pack
  git-findtags
  git-fmt-merge-msg
+ git-for-each-ref
  git-format-patch
  git-fsck-objects
  git-get-tar-commit-id
@@@ -65,7 -65,6 +66,7 @@@ git-merge-one-fil
  git-merge-ours
  git-merge-recur
  git-merge-recursive
 +git-merge-recursive-old
  git-merge-resolve
  git-merge-stupid
  git-mktag
@@@ -96,7 -95,6 +97,7 @@@ git-rev-lis
  git-rev-parse
  git-revert
  git-rm
 +git-runstatus
  git-send-email
  git-send-pack
  git-sh-setup
@@@ -121,13 -119,14 +122,13 @@@ git-unpack-object
  git-update-index
  git-update-ref
  git-update-server-info
 +git-upload-archive
  git-upload-pack
 -git-upload-tar
  git-var
  git-verify-pack
  git-verify-tag
  git-whatchanged
  git-write-tree
 -git-zip-tree
  git-core-*/?*
  gitweb/gitweb.cgi
  test-date
diff --combined Makefile
index 95f37fe7779deb3901be20cb7a1869b7e2de77b0,f0e2e51c2ff5bfd3716fbb0318d948e4b487546e..2d62efb5c4eb0a84c440e2e75b521b536b790bf9
+++ b/Makefile
@@@ -1,6 -1,11 +1,6 @@@
  # The default target of this Makefile is...
  all:
  
 -# Define MOZILLA_SHA1 environment variable when running make to make use of
 -# a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast
 -# on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default
 -# choice) has very fast version optimized for i586.
 -#
  # Define NO_OPENSSL environment variable if you do not have OpenSSL.
  # This also implies MOZILLA_SHA1.
  #
  # Define ARM_SHA1 environment variable when running make to make use of
  # a bundled SHA1 routine optimized for ARM.
  #
 +# Define MOZILLA_SHA1 environment variable when running make to make use of
 +# a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast
 +# on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default
 +# choice) has very fast version optimized for i586.
 +#
  # Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin).
  #
  # Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
  # Define NO_ACCURATE_DIFF if your diff program at least sometimes misses
  # a missing newline at the end of the file.
  #
 -# Define NO_PYTHON if you want to lose all benefits of the recursive merge.
 -#
  # Define COLLISION_CHECK below if you believe that SHA1's
  # 1461501637330902918203684832716283019655932542976 hashes do not give you
  # sufficient guarantee that no collisions between objects will ever happen.
 -
 +#
  # Define USE_NSEC below if you want git to care about sub-second file mtimes
  # and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and
  # it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely
  # randomly break unless your underlying filesystem supports those sub-second
  # times (my ext3 doesn't).
 -
 +#
  # Define USE_STDEV below if you want git to care about the underlying device
  # change being considered an inode change from the update-cache perspective.
  
@@@ -124,16 -126,12 +124,16 @@@ GITWEB_CONFIG = gitweb_config.per
  GITWEB_HOME_LINK_STR = projects
  GITWEB_SITENAME =
  GITWEB_PROJECTROOT = /pub/git
 +GITWEB_EXPORT_OK =
 +GITWEB_STRICT_EXPORT =
  GITWEB_BASE_URL =
  GITWEB_LIST =
  GITWEB_HOMETEXT = indextext.html
  GITWEB_CSS = gitweb.css
  GITWEB_LOGO = git-logo.png
  GITWEB_FAVICON = git-favicon.png
 +GITWEB_SITE_HEADER =
 +GITWEB_SITE_FOOTER =
  
  export prefix bindir gitexecdir template_dir GIT_PYTHON_DIR
  
@@@ -151,12 -149,6 +151,12 @@@ SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__pow
  
  ### --- END CONFIGURATION SECTION ---
  
 +# Those must not be GNU-specific; they are shared with perl/ which may
 +# be built by a different compiler. (Note that this is an artifact now
 +# but it still might be nice to keep that distinction.)
 +BASIC_CFLAGS =
 +BASIC_LDFLAGS =
 +
  SCRIPT_SH = \
        git-bisect.sh git-branch.sh git-checkout.sh \
        git-cherry.sh git-clean.sh git-clone.sh git-commit.sh \
  SCRIPT_PERL = \
        git-archimport.perl git-cvsimport.perl git-relink.perl \
        git-shortlog.perl git-rerere.perl \
 -      git-annotate.perl git-cvsserver.perl \
 +      git-cvsserver.perl \
        git-svnimport.perl git-cvsexportcommit.perl \
        git-send-email.perl git-svn.perl
  
  SCRIPT_PYTHON = \
 -      git-merge-recursive.py
 +      git-merge-recursive-old.py
  
  SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
          $(patsubst %.perl,%,$(SCRIPT_PERL)) \
@@@ -205,7 -197,7 +205,7 @@@ PROGRAMS = 
        git-upload-pack$X git-verify-pack$X \
        git-pack-redundant$X git-var$X \
        git-describe$X git-merge-tree$X git-blame$X git-imap-send$X \
 -      git-merge-recur$X \
 +      git-merge-recursive$X \
        $(EXTRA_PROGRAMS)
  
  # Empty...
@@@ -217,8 -209,7 +217,8 @@@ BUILT_INS = 
        $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
  
  # what 'all' will build and 'install' will install, in gitexecdir
 -ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS)
 +ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS) \
 +      git-merge-recur$X
  
  # Backward compatibility -- to be removed after 1.0
  PROGRAMS += git-ssh-pull$X git-ssh-push$X
@@@ -241,8 -232,8 +241,8 @@@ LIB_FILE=libgit.
  XDIFF_LIB=xdiff/lib.a
  
  LIB_H = \
 -      blob.h cache.h commit.h csum-file.h delta.h \
 -      diff.h object.h pack.h pkt-line.h quote.h refs.h \
 +      archive.h blob.h cache.h commit.h csum-file.h delta.h grep.h \
 +      diff.h object.h pack.h pkt-line.h quote.h refs.h list-objects.h sideband.h \
        run-command.h strbuf.h tag.h tree.h git-compat-util.h revision.h \
        tree-walk.h log-tree.h dir.h path-list.h unpack-trees.h builtin.h
  
@@@ -253,23 -244,18 +253,23 @@@ DIFF_OBJS = 
  
  LIB_OBJS = \
        blob.o commit.o connect.o csum-file.o cache-tree.o base85.o \
 -      date.o diff-delta.o entry.o exec_cmd.o ident.o lockfile.o \
 -      object.o pack-check.o patch-delta.o path.o pkt-line.o \
 +      date.o diff-delta.o entry.o exec_cmd.o ident.o \
 +      interpolate.o \
 +      lockfile.o \
 +      object.o pack-check.o patch-delta.o path.o pkt-line.o sideband.o \
        quote.o read-cache.o refs.o run-command.o dir.o object-refs.o \
        server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
        tag.o tree.o usage.o config.o environment.o ctype.o copy.o \
        fetch-clone.o revision.o pager.o tree-walk.o xdiff-interface.o \
 -      write_or_die.o trace.o \
 -      alloc.o merge-file.o path-list.o help.o unpack-trees.o $(DIFF_OBJS)
 +      write_or_die.o trace.o list-objects.o grep.o \
 +      alloc.o merge-file.o path-list.o help.o unpack-trees.o $(DIFF_OBJS) \
 +      color.o wt-status.o archive-zip.o archive-tar.o
  
  BUILTIN_OBJS = \
        builtin-add.o \
 +      builtin-annotate.o \
        builtin-apply.o \
 +      builtin-archive.o \
        builtin-cat-file.o \
        builtin-checkout-index.o \
        builtin-check-ref-format.o \
        builtin-diff-stages.o \
        builtin-diff-tree.o \
        builtin-fmt-merge-msg.o \
+       builtin-for-each-ref.o \
        builtin-grep.o \
        builtin-init-db.o \
        builtin-log.o \
        builtin-rev-list.o \
        builtin-rev-parse.o \
        builtin-rm.o \
 +      builtin-runstatus.o \
        builtin-show-branch.o \
        builtin-stripspace.o \
        builtin-symbolic-ref.o \
        builtin-unpack-objects.o \
        builtin-update-index.o \
        builtin-update-ref.o \
 -      builtin-upload-tar.o \
 +      builtin-upload-archive.o \
        builtin-verify-pack.o \
 -      builtin-write-tree.o \
 -      builtin-zip-tree.o
 +      builtin-write-tree.o
  
  GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
 -LIBS = $(GITLIBS) -lz
 +EXTLIBS = -lz
  
  #
  # Platform specific tweaks
@@@ -334,14 -321,14 +335,14 @@@ ifeq ($(uname_S),Darwin
        NO_STRLCPY = YesPlease
        ifndef NO_FINK
                ifeq ($(shell test -d /sw/lib && echo y),y)
 -                      ALL_CFLAGS += -I/sw/include
 -                      ALL_LDFLAGS += -L/sw/lib
 +                      BASIC_CFLAGS += -I/sw/include
 +                      BASIC_LDFLAGS += -L/sw/lib
                endif
        endif
        ifndef NO_DARWIN_PORTS
                ifeq ($(shell test -d /opt/local/lib && echo y),y)
 -                      ALL_CFLAGS += -I/opt/local/include
 -                      ALL_LDFLAGS += -L/opt/local/lib
 +                      BASIC_CFLAGS += -I/opt/local/include
 +                      BASIC_LDFLAGS += -L/opt/local/lib
                endif
        endif
  endif
@@@ -363,7 -350,7 +364,7 @@@ ifeq ($(uname_S),SunOS
        endif
        INSTALL = ginstall
        TAR = gtar
 -      ALL_CFLAGS += -D__EXTENSIONS__
 +      BASIC_CFLAGS += -D__EXTENSIONS__
  endif
  ifeq ($(uname_O),Cygwin)
        NO_D_TYPE_IN_DIRENT = YesPlease
  endif
  ifeq ($(uname_S),FreeBSD)
        NEEDS_LIBICONV = YesPlease
 -      ALL_CFLAGS += -I/usr/local/include
 -      ALL_LDFLAGS += -L/usr/local/lib
 +      BASIC_CFLAGS += -I/usr/local/include
 +      BASIC_LDFLAGS += -L/usr/local/lib
  endif
  ifeq ($(uname_S),OpenBSD)
        NO_STRCASESTR = YesPlease
        NEEDS_LIBICONV = YesPlease
 -      ALL_CFLAGS += -I/usr/local/include
 -      ALL_LDFLAGS += -L/usr/local/lib
 +      BASIC_CFLAGS += -I/usr/local/include
 +      BASIC_LDFLAGS += -L/usr/local/lib
  endif
  ifeq ($(uname_S),NetBSD)
        ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
                NEEDS_LIBICONV = YesPlease
        endif
 -      ALL_CFLAGS += -I/usr/pkg/include
 -      ALL_LDFLAGS += -L/usr/pkg/lib -Wl,-rpath,/usr/pkg/lib
 +      BASIC_CFLAGS += -I/usr/pkg/include
 +      BASIC_LDFLAGS += -L/usr/pkg/lib
 +      ALL_LDFLAGS += -Wl,-rpath,/usr/pkg/lib
  endif
  ifeq ($(uname_S),AIX)
        NO_STRCASESTR=YesPlease
@@@ -410,9 -396,9 +411,9 @@@ ifeq ($(uname_S),IRIX64
        NO_STRLCPY = YesPlease
        NO_SOCKADDR_STORAGE=YesPlease
        SHELL_PATH=/usr/gnu/bin/bash
 -      ALL_CFLAGS += -DPATH_MAX=1024
 +      BASIC_CFLAGS += -DPATH_MAX=1024
        # for now, build 32-bit version
 -      ALL_LDFLAGS += -L/usr/lib32
 +      BASIC_LDFLAGS += -L/usr/lib32
  endif
  ifneq (,$(findstring arm,$(uname_M)))
        ARM_SHA1 = YesPlease
@@@ -434,7 -420,7 +435,7 @@@ endi
  ifndef NO_CURL
        ifdef CURLDIR
                # This is still problematic -- gcc does not always want -R.
 -              ALL_CFLAGS += -I$(CURLDIR)/include
 +              BASIC_CFLAGS += -I$(CURLDIR)/include
                CURL_LIBCURL = -L$(CURLDIR)/lib -R$(CURLDIR)/lib -lcurl
        else
                CURL_LIBCURL = -lcurl
@@@ -455,13 -441,13 +456,13 @@@ ifndef NO_OPENSS
        OPENSSL_LIBSSL = -lssl
        ifdef OPENSSLDIR
                # Again this may be problematic -- gcc does not always want -R.
 -              ALL_CFLAGS += -I$(OPENSSLDIR)/include
 +              BASIC_CFLAGS += -I$(OPENSSLDIR)/include
                OPENSSL_LINK = -L$(OPENSSLDIR)/lib -R$(OPENSSLDIR)/lib
        else
                OPENSSL_LINK =
        endif
  else
 -      ALL_CFLAGS += -DNO_OPENSSL
 +      BASIC_CFLAGS += -DNO_OPENSSL
        MOZILLA_SHA1 = 1
        OPENSSL_LIBSSL =
  endif
@@@ -473,32 -459,32 +474,32 @@@ endi
  ifdef NEEDS_LIBICONV
        ifdef ICONVDIR
                # Again this may be problematic -- gcc does not always want -R.
 -              ALL_CFLAGS += -I$(ICONVDIR)/include
 +              BASIC_CFLAGS += -I$(ICONVDIR)/include
                ICONV_LINK = -L$(ICONVDIR)/lib -R$(ICONVDIR)/lib
        else
                ICONV_LINK =
        endif
 -      LIBS += $(ICONV_LINK) -liconv
 +      EXTLIBS += $(ICONV_LINK) -liconv
  endif
  ifdef NEEDS_SOCKET
 -      LIBS += -lsocket
 +      EXTLIBS += -lsocket
        SIMPLE_LIB += -lsocket
  endif
  ifdef NEEDS_NSL
 -      LIBS += -lnsl
 +      EXTLIBS += -lnsl
        SIMPLE_LIB += -lnsl
  endif
  ifdef NO_D_TYPE_IN_DIRENT
 -      ALL_CFLAGS += -DNO_D_TYPE_IN_DIRENT
 +      BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
  endif
  ifdef NO_D_INO_IN_DIRENT
 -      ALL_CFLAGS += -DNO_D_INO_IN_DIRENT
 +      BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
  endif
  ifdef NO_C99_FORMAT
        ALL_CFLAGS += -DNO_C99_FORMAT
  endif
  ifdef NO_SYMLINK_HEAD
 -      ALL_CFLAGS += -DNO_SYMLINK_HEAD
 +      BASIC_CFLAGS += -DNO_SYMLINK_HEAD
  endif
  ifdef NO_STRCASESTR
        COMPAT_CFLAGS += -DNO_STRCASESTR
@@@ -521,24 -507,21 +522,24 @@@ ifdef NO_MMA
        COMPAT_OBJS += compat/mmap.o
  endif
  ifdef NO_IPV6
 -      ALL_CFLAGS += -DNO_IPV6
 +      BASIC_CFLAGS += -DNO_IPV6
  endif
  ifdef NO_SOCKADDR_STORAGE
  ifdef NO_IPV6
 -      ALL_CFLAGS += -Dsockaddr_storage=sockaddr_in
 +      BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
  else
 -      ALL_CFLAGS += -Dsockaddr_storage=sockaddr_in6
 +      BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
  endif
  endif
  ifdef NO_INET_NTOP
        LIB_OBJS += compat/inet_ntop.o
  endif
 +ifdef NO_INET_PTON
 +      LIB_OBJS += compat/inet_pton.o
 +endif
  
  ifdef NO_ICONV
 -      ALL_CFLAGS += -DNO_ICONV
 +      BASIC_CFLAGS += -DNO_ICONV
  endif
  
  ifdef PPC_SHA1
@@@ -554,12 -537,12 +555,12 @@@ ifdef MOZILLA_SHA
        LIB_OBJS += mozilla-sha1/sha1.o
  else
        SHA1_HEADER = <openssl/sha.h>
 -      LIBS += $(LIB_4_CRYPTO)
 +      EXTLIBS += $(LIB_4_CRYPTO)
  endif
  endif
  endif
  ifdef NO_ACCURATE_DIFF
 -      ALL_CFLAGS += -DNO_ACCURATE_DIFF
 +      BASIC_CFLAGS += -DNO_ACCURATE_DIFF
  endif
  
  # Shell quote (do not use $(call) to accommodate ancient setups);
@@@ -577,23 -560,14 +578,23 @@@ PERL_PATH_SQ = $(subst ','\'',$(PERL_PA
  PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
  GIT_PYTHON_DIR_SQ = $(subst ','\'',$(GIT_PYTHON_DIR))
  
 -ALL_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' $(COMPAT_CFLAGS)
 +LIBS = $(GITLIBS) $(EXTLIBS)
 +
 +BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' $(COMPAT_CFLAGS)
  LIB_OBJS += $(COMPAT_OBJS)
 +
 +ALL_CFLAGS += $(BASIC_CFLAGS)
 +ALL_LDFLAGS += $(BASIC_LDFLAGS)
 +
  export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir
 +
 +
  ### Build rules
  
  all: $(ALL_PROGRAMS) $(BUILT_INS) git$X gitk gitweb/gitweb.cgi
  
 -all:
 +all: perl/Makefile
 +      $(MAKE) -C perl
        $(MAKE) -C templates
  
  strip: $(PROGRAMS) git$X
@@@ -606,9 -580,6 +607,9 @@@ git$X: git.c common-cmds.h $(BUILTIN_OB
  
  help.o: common-cmds.h
  
 +git-merge-recur$X: git-merge-recursive$X
 +      rm -f $@ && ln git-merge-recursive$X $@
 +
  $(BUILT_INS): git$X
        rm -f $@ && ln git$X $@
  
@@@ -627,18 -598,9 +628,18 @@@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %
        chmod +x $@+
        mv $@+ $@
  
 -$(patsubst %.perl,%,$(SCRIPT_PERL)) : % : %.perl
 +$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/Makefile
 +$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
        rm -f $@ $@+
 -      sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
 +      INSTLIBDIR=`$(MAKE) -C perl -s --no-print-directory instlibdir` && \
 +      sed -e '1{' \
 +          -e '        s|#!.*perl|#!$(PERL_PATH_SQ)|' \
 +          -e '        h' \
 +          -e '        s=.*=use lib (split(/:/, $$ENV{GITPERLLIB} || "@@INSTLIBDIR@@"));=' \
 +          -e '        H' \
 +          -e '        x' \
 +          -e '}' \
 +          -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
            -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
            $@.perl >$@+
        chmod +x $@+
@@@ -670,16 -632,12 +671,16 @@@ gitweb/gitweb.cgi: gitweb/gitweb.per
            -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
            -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
            -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
 +          -e 's|++GITWEB_EXPORT_OK++|$(GITWEB_EXPORT_OK)|g' \
 +          -e 's|++GITWEB_STRICT_EXPORT++|$(GITWEB_STRICT_EXPORT)|g' \
            -e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
            -e 's|++GITWEB_LIST++|$(GITWEB_LIST)|g' \
            -e 's|++GITWEB_HOMETEXT++|$(GITWEB_HOMETEXT)|g' \
            -e 's|++GITWEB_CSS++|$(GITWEB_CSS)|g' \
            -e 's|++GITWEB_LOGO++|$(GITWEB_LOGO)|g' \
            -e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
 +          -e 's|++GITWEB_SITE_HEADER++|$(GITWEB_SITE_HEADER)|g' \
 +          -e 's|++GITWEB_SITE_FOOTER++|$(GITWEB_SITE_FOOTER)|g' \
            $< >$@+
        chmod +x $@+
        mv $@+ $@
@@@ -757,6 -715,11 +758,6 @@@ git-http-push$X: revision.o http.o http
        $(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
                $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
  
 -merge-recursive.o path-list.o: path-list.h
 -git-merge-recur$X: merge-recursive.o path-list.o $(GITLIBS)
 -      $(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
 -              $(LIBS)
 -
  $(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
  $(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
  $(DIFF_OBJS): diffcore.h
@@@ -765,17 -728,11 +766,17 @@@ $(LIB_FILE): $(LIB_OBJS
        rm -f $@ && $(AR) rcs $@ $(LIB_OBJS)
  
  XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o
 +$(XDIFF_OBJS): xdiff/xinclude.h xdiff/xmacros.h xdiff/xdiff.h xdiff/xtypes.h \
 +      xdiff/xutils.h xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
  
  $(XDIFF_LIB): $(XDIFF_OBJS)
        rm -f $@ && $(AR) rcs $@ $(XDIFF_OBJS)
  
  
 +perl/Makefile: perl/Git.pm perl/Makefile.PL GIT-CFLAGS
 +      (cd perl && $(PERL_PATH) Makefile.PL \
 +              PREFIX='$(prefix_SQ)')
 +
  doc:
        $(MAKE) -C Documentation all
  
@@@ -838,7 -795,6 +839,7 @@@ install: al
        $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'
        $(INSTALL) git$X gitk '$(DESTDIR_SQ)$(bindir_SQ)'
        $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
 +      $(MAKE) -C perl install
        $(INSTALL) -d -m755 '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
        $(INSTALL) $(PYMODULES) '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
        if test 'z$(bindir_SQ)' != 'z$(gitexecdir_SQ)'; \
@@@ -863,9 -819,8 +864,9 @@@ git.spec: git.spec.i
        mv $@+ $@
  
  GIT_TARNAME=git-$(GIT_VERSION)
 -dist: git.spec git-tar-tree
 -      ./git-tar-tree HEAD^{tree} $(GIT_TARNAME) > $(GIT_TARNAME).tar
 +dist: git.spec git-archive
 +      ./git-archive --format=tar \
 +              --prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
        @mkdir -p $(GIT_TARNAME)
        @cp git.spec $(GIT_TARNAME)
        @echo $(GIT_VERSION) > $(GIT_TARNAME)/version
@@@ -910,9 -865,7 +911,9 @@@ clean
        rm -f $(htmldocs).tar.gz $(manpages).tar.gz
        rm -f gitweb/gitweb.cgi
        $(MAKE) -C Documentation/ clean
 -      $(MAKE) -C templates clean
 +      [ ! -f perl/Makefile ] || $(MAKE) -C perl/ clean || $(MAKE) -C perl/ clean
 +      rm -f perl/ppport.h perl/Makefile.old
 +      $(MAKE) -C templates/ clean
        $(MAKE) -C t/ clean
        rm -f GIT-VERSION-FILE GIT-CFLAGS
  
@@@ -927,7 -880,6 +928,7 @@@ check-docs:
                case "$$v" in \
                git-merge-octopus | git-merge-ours | git-merge-recursive | \
                git-merge-resolve | git-merge-stupid | git-merge-recur | \
 +              git-merge-recursive-old | \
                git-ssh-pull | git-ssh-push ) continue ;; \
                esac ; \
                test -f "Documentation/$$v.txt" || \
diff --combined builtin.h
index 4ac32d7780f3ebaf0bd91b639ed4781a8ab9d0e4,37915bce4faeab22294b1f3d102c85271161117b..708a2f22e8b14f337a0829c53c47e57393c4ee75
+++ b/builtin.h
@@@ -11,12 -11,9 +11,12 @@@ extern int mailinfo(FILE *in, FILE *out
  extern int split_mbox(const char **mbox, const char *dir, int allow_bare, int nr_prec, int skip);
  extern void stripspace(FILE *in, FILE *out);
  extern int write_tree(unsigned char *sha1, int missing_ok, const char *prefix);
 +extern void prune_packed_objects(int);
  
  extern int cmd_add(int argc, const char **argv, const char *prefix);
 +extern int cmd_annotate(int argc, const char **argv, const char *prefix);
  extern int cmd_apply(int argc, const char **argv, const char *prefix);
 +extern int cmd_archive(int argc, const char **argv, const char *prefix);
  extern int cmd_cat_file(int argc, const char **argv, const char *prefix);
  extern int cmd_checkout_index(int argc, const char **argv, const char *prefix);
  extern int cmd_check_ref_format(int argc, const char **argv, const char *prefix);
@@@ -28,6 -25,7 +28,7 @@@ extern int cmd_diff(int argc, const cha
  extern int cmd_diff_stages(int argc, const char **argv, const char *prefix);
  extern int cmd_diff_tree(int argc, const char **argv, const char *prefix);
  extern int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix);
+ extern int cmd_for_each_ref(int argc, const char **argv, const char *prefix);
  extern int cmd_format_patch(int argc, const char **argv, const char *prefix);
  extern int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix);
  extern int cmd_grep(int argc, const char **argv, const char *prefix);
@@@ -49,16 -47,15 +50,16 @@@ extern int cmd_repo_config(int argc, co
  extern int cmd_rev_list(int argc, const char **argv, const char *prefix);
  extern int cmd_rev_parse(int argc, const char **argv, const char *prefix);
  extern int cmd_rm(int argc, const char **argv, const char *prefix);
- extern int cmd_show_branch(int argc, const char **argv, const char *prefix);
 +extern int cmd_runstatus(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);
  extern int cmd_stripspace(int argc, const char **argv, const char *prefix);
  extern int cmd_symbolic_ref(int argc, const char **argv, const char *prefix);
  extern int cmd_tar_tree(int argc, const char **argv, const char *prefix);
 -extern int cmd_zip_tree(int argc, const char **argv, const char *prefix);
  extern int cmd_unpack_objects(int argc, const char **argv, const char *prefix);
  extern int cmd_update_index(int argc, const char **argv, const char *prefix);
  extern int cmd_update_ref(int argc, const char **argv, const char *prefix);
 +extern int cmd_upload_archive(int argc, const char **argv, const char *prefix);
  extern int cmd_upload_tar(int argc, const char **argv, const char *prefix);
  extern int cmd_version(int argc, const char **argv, const char *prefix);
  extern int cmd_whatchanged(int argc, const char **argv, const char *prefix);
diff --combined git.c
index 235b6fea158b6901e55ac7b0560770359711da7c,10db27bca04b4c6e7278d740bc1af254c7247471..6475847b7a06750f8095c363dbc7414213042cca
--- 1/git.c
--- 2/git.c
+++ b/git.c
@@@ -16,7 -16,7 +16,7 @@@
  #include "builtin.h"
  
  const char git_usage_string[] =
 -      "git [--version] [--exec-path[=GIT_EXEC_PATH]] [--help] COMMAND [ ARGS ]";
 +      "git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate] [--bare] [--git-dir=GIT_DIR] [--help] COMMAND [ARGS]";
  
  static void prepend_to_path(const char *dir, int len)
  {
@@@ -219,20 -219,19 +219,21 @@@ static void handle_internal_command(in
                int option;
        } commands[] = {
                { "add", cmd_add, RUN_SETUP },
 +              { "annotate", cmd_annotate, },
                { "apply", cmd_apply },
 +              { "archive", cmd_archive },
                { "cat-file", cmd_cat_file, RUN_SETUP },
                { "checkout-index", cmd_checkout_index, RUN_SETUP },
                { "check-ref-format", cmd_check_ref_format },
                { "commit-tree", cmd_commit_tree, RUN_SETUP },
                { "count-objects", cmd_count_objects, RUN_SETUP },
 -              { "diff", cmd_diff, RUN_SETUP },
 +              { "diff", cmd_diff, RUN_SETUP | USE_PAGER },
                { "diff-files", cmd_diff_files, RUN_SETUP },
                { "diff-index", cmd_diff_index, RUN_SETUP },
                { "diff-stages", cmd_diff_stages, RUN_SETUP },
                { "diff-tree", cmd_diff_tree, RUN_SETUP },
                { "fmt-merge-msg", cmd_fmt_merge_msg, RUN_SETUP },
+               { "for-each-ref", cmd_for_each_ref, RUN_SETUP },
                { "format-patch", cmd_format_patch, RUN_SETUP },
                { "get-tar-commit-id", cmd_get_tar_commit_id },
                { "grep", cmd_grep, RUN_SETUP },
                { "rev-list", cmd_rev_list, RUN_SETUP },
                { "rev-parse", cmd_rev_parse, RUN_SETUP },
                { "rm", cmd_rm, RUN_SETUP },
 +              { "runstatus", cmd_runstatus, RUN_SETUP },
                { "show-branch", cmd_show_branch, RUN_SETUP },
                { "show", cmd_show, RUN_SETUP | USE_PAGER },
                { "stripspace", cmd_stripspace },
                { "symbolic-ref", cmd_symbolic_ref, RUN_SETUP },
 -              { "tar-tree", cmd_tar_tree, RUN_SETUP },
 -              { "zip-tree", cmd_zip_tree, RUN_SETUP },
 +              { "tar-tree", cmd_tar_tree },
                { "unpack-objects", cmd_unpack_objects, RUN_SETUP },
                { "update-index", cmd_update_index, RUN_SETUP },
                { "update-ref", cmd_update_ref, RUN_SETUP },
 -              { "upload-tar", cmd_upload_tar },
 +              { "upload-archive", cmd_upload_archive },
                { "version", cmd_version },
                { "whatchanged", cmd_whatchanged, RUN_SETUP | USE_PAGER },
                { "write-tree", cmd_write_tree, RUN_SETUP },