Merge branch 'master' into cc/help
authorJunio C Hamano <gitster@pobox.com>
Mon, 10 Dec 2007 09:22:42 +0000 (01:22 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 10 Dec 2007 09:22:42 +0000 (01:22 -0800)
This is to primarily pull in MANPATH tweak and help.txt formatting fix
from the master branch.

1  2 
Documentation/Makefile
Documentation/git-help.txt
Documentation/git.txt
Makefile
help.c
diff --combined Documentation/Makefile
index f0df0b0d28e70ac6b7981f883bf6bc547f3fdf96,1b5802456dea9dec329cba19eddb6ef6ea45a090..9f0f9d70f6decd721141b48f9be2f0a8da429bcb
@@@ -29,7 -29,6 +29,7 @@@ DOC_MAN7=$(patsubst %.txt,%.7,$(MAN7_TX
  
  prefix?=$(HOME)
  bindir?=$(prefix)/bin
 +htmldir?=$(prefix)/share/doc/git-doc
  mandir?=$(prefix)/share/man
  man1dir=$(mandir)/man1
  man5dir=$(mandir)/man5
@@@ -46,6 -45,9 +46,9 @@@ infodir?=$(prefix)/share/inf
  MAKEINFO=makeinfo
  INSTALL_INFO=install-info
  DOCBOOK2X_TEXI=docbook2x-texi
+ ifndef PERL_PATH
+       PERL_PATH = /usr/bin/perl
+ endif
  
  -include ../config.mak.autogen
  -include ../config.mak
@@@ -80,25 -82,22 +83,25 @@@ man7: $(DOC_MAN7
  info: git.info
  
  install: man
-       $(INSTALL) -d -m755 $(DESTDIR)$(man1dir)
-       $(INSTALL) -d -m755 $(DESTDIR)$(man5dir)
-       $(INSTALL) -d -m755 $(DESTDIR)$(man7dir)
-       $(INSTALL) -m644 $(DOC_MAN1) $(DESTDIR)$(man1dir)
-       $(INSTALL) -m644 $(DOC_MAN5) $(DESTDIR)$(man5dir)
-       $(INSTALL) -m644 $(DOC_MAN7) $(DESTDIR)$(man7dir)
+       $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir)
+       $(INSTALL) -d -m 755 $(DESTDIR)$(man5dir)
+       $(INSTALL) -d -m 755 $(DESTDIR)$(man7dir)
+       $(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir)
+       $(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir)
+       $(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir)
  
  install-info: info
-       $(INSTALL) -d -m755 $(DESTDIR)$(infodir)
-       $(INSTALL) -m644 git.info $(DESTDIR)$(infodir)
+       $(INSTALL) -d -m 755 $(DESTDIR)$(infodir)
+       $(INSTALL) -m 644 git.info $(DESTDIR)$(infodir)
        if test -r $(DESTDIR)$(infodir)/dir; then \
          $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) git.info ;\
        else \
          echo "No directory found in $(DESTDIR)$(infodir)" >&2 ; \
        fi
  
 +install-html: html
 +      sh ./install-webdoc.sh $(DESTDIR)$(htmldir)
 +
  ../GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
        $(MAKE) -C ../ GIT-VERSION-FILE
  
  #
  doc.dep : $(wildcard *.txt) build-docdep.perl
        $(RM) $@+ $@
-       perl ./build-docdep.perl >$@+
+       $(PERL_PATH) ./build-docdep.perl >$@+
        mv $@+ $@
  
  -include doc.dep
@@@ -128,7 -127,7 +131,7 @@@ $(cmds_txt): cmd-list.mad
  
  cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)
        $(RM) $@
-       perl ./cmd-list.perl ../command-list.txt
+       $(PERL_PATH) ./cmd-list.perl ../command-list.txt
        date >$@
  
  git.7 git.html: git.txt
@@@ -165,7 -164,7 +168,7 @@@ user-manual.html: user-manual.xm
  git.info: user-manual.xml
        $(RM) $@ $*.texi $*.texi+
        $(DOCBOOK2X_TEXI) user-manual.xml --to-stdout >$*.texi+
-       perl fix-texi.perl <$*.texi+ >$*.texi
+       $(PERL_PATH) fix-texi.perl <$*.texi+ >$*.texi
        $(MAKEINFO) --no-split $*.texi
        $(RM) $*.texi $*.texi+
  
index 0e873fde280f0df9b807440290831797b01331fa,7ddbf467dfdf1d5a7825836d951cd54b336265b0..ac9e15d7748a17bdd552acfb0c690ffea459a87c
@@@ -1,5 -1,5 +1,5 @@@
  git-help(1)
- ======
+ ===========
  
  NAME
  ----
@@@ -7,7 -7,7 +7,7 @@@ git-help - display help information abo
  
  SYNOPSIS
  --------
 -'git help' [-a|--all] [COMMAND]
 +'git help' [-a|--all|-i|--info|-w|--web] [COMMAND]
  
  DESCRIPTION
  -----------
@@@ -20,8 -20,7 +20,8 @@@ If the option '--all' or '-a' is given
  printed on the standard output.
  
  If a git command is named, a manual page for that command is brought
 -up. The 'man' program is used by default for this purpose.
 +up. The 'man' program is used by default for this purpose, but this
 +can be overriden by other options.
  
  Note that 'git --help ...' is identical as 'git help ...' because the
  former is internally converted into the latter.
  OPTIONS
  -------
  -a|--all::
 -
        Prints all the available commands on the standard output. This
        option superseeds any other option.
  
 +-i|--info::
 +      Use the 'info' program to display the manual page, instead of
 +      the 'man' program that is used by default.
 +
 +-w|--web::
 +      Use a web browser to display the HTML manual page, instead of
 +      the 'man' program that is used by default.
 ++
 +The web browser can be specified using the configuration variable
 +'help.browser', or 'web.browser' if the former is not set. If none of
 +these config variables is set, the 'git-browse-help' script (called by
 +'git-help') will pick a suitable default.
 ++
 +You can explicitly provide a full path to your prefered browser by
 +setting the configuration variable 'browser.<tool>.path'. For example,
 +you can configure the absolute path to firefox by setting
 +'browser.firefox.path'. Otherwise, 'git-browse-help' assumes the tool
 +is available in PATH.
 ++
 +Note that the script tries, as much as possible, to display the HTML
 +page in a new tab on an already opened browser.
 +
  Author
  ------
  Written by Junio C Hamano <gitster@pobox.com> and the git-list
diff --combined Documentation/git.txt
index c4e4d24ea40a82f20cd72dfa3f66a284bc206eb3,1574ecd77eccc586c62b745465bffb80baf67ce7..a29b634e7a8d86a3e03f7d90ca81a9e86b068730
@@@ -104,11 -104,6 +104,11 @@@ OPTION
        commands. If the option '--all' or '-a' is given then all
        available commands are printed. If a git command is named this
        option will bring up the manual page for that command.
 ++
 +Other options are available to control how the manual page is
 +displayed. See gitlink:git-help[1] for more information,
 +because 'git --help ...' is converted internally into 'git
 +help ...'.
  
  --exec-path::
        Path to wherever your core git programs are installed.
@@@ -541,7 -536,7 +541,7 @@@ Author
  -------
  * git's founding father is Linus Torvalds <torvalds@osdl.org>.
  * The current git nurse is Junio C Hamano <gitster@pobox.com>.
- * The git potty was written by Andres Ericsson <ae@op5.se>.
+ * The git potty was written by Andreas Ericsson <ae@op5.se>.
  * General upbringing is handled by the git-list <git@vger.kernel.org>.
  
  Documentation
diff --combined Makefile
index 932b0d4346dc7480e1ce56ed33614cf9bb50a546,4cdb84ba6242595a5e0e4765a16497aad53a56f3..429bc1ddb55f502b5c7ed51515aa7600599b2f15
+++ b/Makefile
@@@ -154,10 -154,10 +154,11 @@@ STRIP ?= stri
  
  prefix = $(HOME)
  bindir = $(prefix)/bin
+ mandir = $(prefix)/share/man
  gitexecdir = $(bindir)
  sharedir = $(prefix)/share
  template_dir = $(sharedir)/git-core/templates
 +htmldir=$(sharedir)/doc/git-doc
  ifeq ($(prefix),/usr)
  sysconfdir = /etc
  else
@@@ -184,7 -184,7 +185,7 @@@ GITWEB_FAVICON = git-favicon.pn
  GITWEB_SITE_HEADER =
  GITWEB_SITE_FOOTER =
  
 -export prefix bindir gitexecdir sharedir template_dir sysconfdir
 +export prefix bindir gitexecdir sharedir template_dir htmldir sysconfdir
  
  CC = gcc
  AR = ar
@@@ -214,7 -214,7 +215,7 @@@ BASIC_LDFLAGS 
  
  SCRIPT_SH = \
        git-bisect.sh git-checkout.sh \
-       git-clone.sh git-commit.sh \
+       git-clone.sh \
        git-merge-one-file.sh git-mergetool.sh git-parse-remote.sh \
        git-pull.sh git-rebase.sh git-rebase--interactive.sh \
        git-repack.sh git-request-pull.sh \
        git-merge-resolve.sh \
        git-lost-found.sh git-quiltimport.sh git-submodule.sh \
        git-filter-branch.sh \
 -      git-stash.sh
 +      git-stash.sh \
 +      git-browse-help.sh
  
  SCRIPT_PERL = \
        git-add--interactive.perl \
  
  SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
          $(patsubst %.perl,%,$(SCRIPT_PERL)) \
-         git-status git-instaweb
+         git-instaweb
  
  # ... and all the rest that could be moved out of bindir to gitexecdir
  PROGRAMS = \
@@@ -261,7 -260,7 +262,7 @@@ EXTRA_PROGRAMS 
  BUILT_INS = \
        git-format-patch$X git-show$X git-whatchanged$X git-cherry$X \
        git-get-tar-commit-id$X git-init$X git-repo-config$X \
-       git-fsck-objects$X git-cherry-pick$X git-peek-remote$X \
+       git-fsck-objects$X git-cherry-pick$X git-peek-remote$X git-status$X \
        $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
  
  # what 'all' will build and 'install' will install, in gitexecdir
@@@ -314,7 -313,7 +315,7 @@@ LIB_OBJS = 
        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 shallow.o utf8.o \
        convert.o attr.o decorate.o progress.o mailmap.o symlinks.o remote.o \
-       transport.o bundle.o walker.o parse-options.o
+       transport.o bundle.o walker.o parse-options.o ws.o
  
  BUILTIN_OBJS = \
        builtin-add.o \
        builtin-checkout-index.o \
        builtin-check-ref-format.o \
        builtin-clean.o \
+       builtin-commit.o \
        builtin-commit-tree.o \
        builtin-count-objects.o \
        builtin-describe.o \
        builtin-rev-parse.o \
        builtin-revert.o \
        builtin-rm.o \
-       builtin-runstatus.o \
        builtin-shortlog.o \
        builtin-show-branch.o \
        builtin-stripspace.o \
@@@ -408,7 -407,9 +409,9 @@@ endi
  ifeq ($(uname_S),Darwin)
        NEEDS_SSL_WITH_CRYPTO = YesPlease
        NEEDS_LIBICONV = YesPlease
-       OLD_ICONV = UnfortunatelyYes
+       ifneq ($(shell expr "$(uname_R)" : '9\.'),2)
+               OLD_ICONV = UnfortunatelyYes
+       endif
        NO_STRLCPY = YesPlease
        NO_MEMMEM = YesPlease
  endif
@@@ -446,6 -447,7 +449,7 @@@ ifeq ($(uname_O),Cygwin
        NEEDS_LIBICONV = YesPlease
        NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
        NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
+       OLD_ICONV = UnfortunatelyYes
        # There are conflicting reports about this.
        # On some boxes NO_MMAP is needed, and not so elsewhere.
        # Try commenting this out if you suspect MMAP is more efficient
@@@ -745,9 -747,9 +749,10 @@@ ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC
  
  DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
  bindir_SQ = $(subst ','\'',$(bindir))
+ mandir_SQ = $(subst ','\'',$(mandir))
  gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
  template_dir_SQ = $(subst ','\'',$(template_dir))
 +htmldir_SQ = $(subst ','\'',$(htmldir))
  prefix_SQ = $(subst ','\'',$(prefix))
  
  SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
@@@ -792,7 -794,8 +797,8 @@@ git$X: git.o $(BUILTIN_OBJS) $(GITLIBS
        $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
                $(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
  
- help.o: common-cmds.h
+ help.o: help.c common-cmds.h GIT-CFLAGS
+       $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_MAN_PATH="$(mandir_SQ)"' $<
  
  git-merge-subtree$X: git-merge-recursive$X
        $(QUIET_BUILT_IN)$(RM) $@ && ln git-merge-recursive$X $@
@@@ -811,7 -814,6 +817,7 @@@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %
            -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
            -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
            -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
 +          -e 's|@@HTMLDIR@@|$(htmldir_SQ)|g' \
            $@.sh >$@+ && \
        chmod +x $@+ && \
        mv $@+ $@
@@@ -837,9 -839,6 +843,6 @@@ $(patsubst %.perl,%,$(SCRIPT_PERL)): % 
        chmod +x $@+ && \
        mv $@+ $@
  
- git-status: git-commit
-       $(QUIET_GEN)cp $< $@+ && mv $@+ $@
  gitweb/gitweb.cgi: gitweb/gitweb.perl
        $(QUIET_GEN)$(RM) $@ $@+ && \
        sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
@@@ -1021,8 -1020,8 +1024,8 @@@ remove-dashes
  ### Installation rules
  
  install: all
-       $(INSTALL) -d -m755 '$(DESTDIR_SQ)$(bindir_SQ)'
-       $(INSTALL) -d -m755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'
+       $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
+       $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'
        $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'
        $(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)'
        $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
diff --combined help.c
index ec0d0155ac79051c3fcfbbbc72db1ea32404e069,f935887d34f2d766120a2628ee13e074b76a6c17..56477f4506a94905c58dad09543bfbb68db61d91
--- 1/help.c
--- 2/help.c
+++ b/help.c
@@@ -239,40 -239,46 +239,62 @@@ void list_common_cmds_help(void
        }
  }
  
 +static const char *cmd_to_page(const char *git_cmd)
 +{
 +      if (!git_cmd)
 +              return "git";
 +      else if (!prefixcmp(git_cmd, "git"))
 +              return git_cmd;
 +      else {
 +              int page_len = strlen(git_cmd) + 4;
 +              char *p = xmalloc(page_len + 1);
 +              strcpy(p, "git-");
 +              strcpy(p + 4, git_cmd);
 +              p[page_len] = 0;
 +              return p;
 +      }
 +}
 +
+ static void setup_man_path(void)
+ {
+       struct strbuf new_path;
+       const char *old_path = getenv("MANPATH");
+       strbuf_init(&new_path, 0);
+       /* We should always put ':' after our path. If there is no
+        * old_path, the ':' at the end will let 'man' to try
+        * system-wide paths after ours to find the manual page. If
+        * there is old_path, we need ':' as delimiter. */
+       strbuf_addstr(&new_path, GIT_MAN_PATH);
+       strbuf_addch(&new_path, ':');
+       if (old_path)
+               strbuf_addstr(&new_path, old_path);
+       setenv("MANPATH", new_path.buf, 1);
+       strbuf_release(&new_path);
+ }
  static void show_man_page(const char *git_cmd)
  {
 -      const char *page;
 -
 -      if (!prefixcmp(git_cmd, "git"))
 -              page = git_cmd;
 -      else {
 -              int page_len = strlen(git_cmd) + 4;
 -              char *p = xmalloc(page_len + 1);
 -              strcpy(p, "git-");
 -              strcpy(p + 4, git_cmd);
 -              p[page_len] = 0;
 -              page = p;
 -      }
 -
 +      const char *page = cmd_to_page(git_cmd);
+       setup_man_path();
        execlp("man", "man", page, NULL);
  }
  
 +static void show_info_page(const char *git_cmd)
 +{
 +      const char *page = cmd_to_page(git_cmd);
 +      execlp("info", "info", page, NULL);
 +}
 +
 +static void show_html_page(const char *git_cmd)
 +{
 +      const char *page = cmd_to_page(git_cmd);
 +      execl_git_cmd("browse-help", page, NULL);
 +}
 +
  void help_unknown_cmd(const char *cmd)
  {
        fprintf(stderr, "git: '%s' is not a git-command. See 'git --help'.\n", cmd);
@@@ -287,25 -293,18 +309,25 @@@ int cmd_version(int argc, const char **
  
  int cmd_help(int argc, const char **argv, const char *prefix)
  {
 -      const char *help_cmd = argc > 1 ? argv[1] : NULL;
 +      const char *help_cmd = argv[1];
  
 -      if (!help_cmd) {
 +      if (argc < 2) {
                printf("usage: %s\n\n", git_usage_string);
                list_common_cmds_help();
                exit(0);
        }
  
 -      else if (!strcmp(help_cmd, "--all") || !strcmp(help_cmd, "-a")) {
 +      if (!strcmp(help_cmd, "--all") || !strcmp(help_cmd, "-a")) {
                printf("usage: %s\n\n", git_usage_string);
                list_commands();
 -              exit(0);
 +      }
 +
 +      else if (!strcmp(help_cmd, "--web") || !strcmp(help_cmd, "-w")) {
 +              show_html_page(argc > 2 ? argv[2] : NULL);
 +      }
 +
 +      else if (!strcmp(help_cmd, "--info") || !strcmp(help_cmd, "-i")) {
 +              show_info_page(argc > 2 ? argv[2] : NULL);
        }
  
        else