Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on Jun 13, 2011
  1. @iveqy

    git-sh-setup: add die_with_status

    iveqy authored committed
    This behaves similar to "die" but can exit with status different from the
    usual 1.
    Signed-off-by: Fredrik Gustafsson <>
    Mentored-by: Jens Lehmann <>
    Mentored-by: Heiko Voigt <>
    Signed-off-by: Junio C Hamano <>
Commits on May 24, 2011
  1. require-work-tree wants more than what its name says

    Somebody tried "git pull" from a random place completely outside the work
    tree, while exporting GIT_DIR and GIT_WORK_TREE that are set to correct
    places, e.g.
        export GIT_WORK_TREE GIT_DIR
        cd /tmp
        git pull
    At the beginning of git-pull, we check "require-work-tree" and then
    "cd-to-toplevel".  I _think_ the original intention when I wrote the
    command was "we MUST have a work tree, our $(cwd) might not be at the
    top-level directory of it", and no stronger than that.  That check is a
    very sensible thing to do before doing cd-to-toplevel.  We check that the
    place we would want to go exists, and then go there.
    But the implementation of require_work_tree we have today is quite
    different.  I don't have energy to dig the history, but currently it says:
        test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true ||
        die "fatal: $0 cannot be used without a working tree."
    Which is completely bogus.  Even though we may happen to be just outside
    of it right now, we may have a working tree that we can cd_to_toplevel
    back to.
    Add a function "require_work_tree_exists" that implements the check
    this function originally intended (this is so that third-party scripts
    that rely on the current behaviour do not have to get broken).
    For now, update _no_ in-tree scripts, not even "git pull", as nobody on
    the list seems to really care about the above corner case workflow that
    triggered this. Scripts can be updated after vetting that they do want the
    "we want to make sure the place we are going to go actually exists"
    Signed-off-by: Junio C Hamano <>
Commits on Oct 28, 2010
  1. @artagnon

    Porcelain scripts: Rewrite cryptic "needs update" error message

    artagnon authored committed
    Although Git interally has the facility to differentiate between
    porcelain and plubmbing commands and appropriately print errors,
    several shell scripts invoke plubming commands triggering cryptic
    plumbing errors to be displayed on a porcelain interface. This patch
    replaces the "needs update" message in git-pull and git-rebase, when
    `git update-index` is run, with a more friendly message.
    Reported-by: Joshua Jensen <>
    Reported-by: Thore Husfeldt <>
    Signed-off-by: Ramkumar Ramachandra <>
    Signed-off-by: Junio C Hamano <>
Commits on Oct 6, 2010
  1. Merge branch 'uk/fix-author-ident-sed-script'

    * uk/fix-author-ident-sed-script:
      get_author_ident_from_commit(): remove useless quoting
Commits on Oct 3, 2010
  1. @patthoyts

    git-am: fix detection of absolute paths for windows

    patthoyts authored
    Add an is_absolute_path function to abstract out platform differences
    in checking for an absolute or relative path.
    Specifically fixes t4150-am on Windows.
    [PT: updated following suggestion from j6t to support \* and //*]
    Signed-off-by: Johannes Sixt <>
    Signed-off-by: Pat Thoyts <>
Commits on Sep 27, 2010
  1. get_author_ident_from_commit(): remove useless quoting

    Uwe Kleine-König authored committed
    The command 's/'\''/'\''\'\'\''/g' only triples single quotes:
    	$ echo "What's up?" | sed 's/'\''/'\''\'\'\''/g'
    	What'''s up?
    This doesn't hurt as compared to a single single quote it only adds an
    empty string, but it makes the script needlessly complicated and hard to
    understand.  The useful quoting is done by s/'\''/'\''\\'\'\''/g at the
    beginning of the script and only once for all three variables.
    Signed-off-by: Uwe Kleine-König <>
    Signed-off-by: Junio C Hamano <>
Commits on Mar 7, 2010
  1. Merge branch 'gb/maint-submodule-env'

    * gb/maint-submodule-env:
      is_submodule_modified(): clear environment properly
      submodules: ensure clean environment when operating in a submodule
      shell setup: clear_local_git_env() function
      rev-parse: --local-env-vars option
      Refactor list of of repo-local env vars
Commits on Mar 2, 2010
  1. Merge branch 'jn/maint-fix-pager'

    * jn/maint-fix-pager:
      tests: Fix race condition in t7006-pager
      t7006-pager: if stdout is not a terminal, make a new one
      tests: Add tests for automatic use of pager
      am: Fix launching of pager
      git svn: Fix launching of pager
      git.1: Clarify the behavior of the --paginate option
      Make 'git var GIT_PAGER' always print the configured pager
      Fix 'git var' usage synopsis
  2. Merge branch 'gf/maint-sh-setup-nongit-ok'

    * gf/maint-sh-setup-nongit-ok:
      require_work_tree broken with NONGIT_OK
Commits on Feb 25, 2010
  1. @Oblomov

    shell setup: clear_local_git_env() function

    Oblomov authored committed
    Introduce an auxiliary function to clear all repo-local environment
    variables. This should be invoked by any shell script that switches
    repository during execution, to ensure that the environment is clean
    and that things such as the git dir and worktree are set up correctly.
    Signed-off-by: Giuseppe Bilotta <>
    Signed-off-by: Junio C Hamano <>
Commits on Feb 17, 2010
  1. @lelutin

    require_work_tree broken with NONGIT_OK

    lelutin authored committed
    With NONGIT_OK set, require_work_tree function outside a git repository
    gives a syntax error.  This is caused by an incorrect use of "test" that
    didn't anticipate $(git rev-parse --is-inside-work-tree) may return an
    empty string.
    Properly quote the argument to "test", and send the standard error stream
    to /dev/null to avoid giving duplicate error messages.
    Signed-off-by: Gabriel Filion <>
    Signed-off-by: Junio C Hamano <>
Commits on Feb 15, 2010
  1. @jrn

    am: Fix launching of pager

    jrn authored committed
    The pagination functionality in git am has some problems:
     - It does not check if stdout is a tty, so it always paginates.
     - If $GIT_PAGER uses any environment variables, they are being
       ignored, since it does not run $GIT_PAGER through eval.
     - If $GIT_PAGER is set to the empty string, instead of passing
       output through to stdout, it tries to run $dotest/patch.
    Fix them.  While at it, move the definition of git_pager() to
    git-sh-setup so authors of other commands are not tempted to
    reimplement it with the same mistakes.
    Signed-off-by: Jonathan Nieder <>
    Signed-off-by: Junio C Hamano <>
Commits on Jan 31, 2010
  1. @jrn

    Do not install shell libraries executable

    jrn authored committed
    Some scripts are expected to be sourced instead of executed on their own.
    Avoid some confusion by not marking them executable.
    The executable bit was confusing the valgrind support of our test scripts,
    which assumed that any executable without a #!-line should be intercepted
    and run through valgrind.  So during valgrind-enabled tests, any script
    sourcing these files actually sourced the valgrind interception script
    Reported-by: Jeff King <>
    Signed-off-by: Jonathan Nieder <>
    Signed-off-by: Junio C Hamano <>
Commits on Jan 12, 2010
  1. Use $(git rev-parse --show-toplevel) in cd_to_toplevel().

    Steven Drake authored committed
    rev-parse --show-toplevel gives the absolute (aka "physical") path of the
    toplevel directory and is more portable as 'cd -P' is not supported by all
    shell implementations.
    This is also closer to what setup_work_tree() does.
    Signed-off-by: Steven Drake <>
    Signed-off-by: Junio C Hamano <>
Commits on Nov 25, 2009
  1. Merge branch 'rs/work-around-grep-opt-insanity'

    * rs/work-around-grep-opt-insanity:
      Protect scripted Porcelains from GREP_OPTIONS insanity
      mergetool--lib: simplify guess_merge_tool()
Commits on Nov 24, 2009
  1. Protect scripted Porcelains from GREP_OPTIONS insanity

    If the user has exported the GREP_OPTIONS environment variable, the output
    from "grep" and "egrep" in scripted Porcelains may be different from what
    they expect.  For example, we may want to count number of matching lines,
    by "grep" piped to "wc -l", and GREP_OPTIONS=-C3 will break such use.
    The approach taken by this change to address this issue is to protect only
    our own use of grep/egrep.  Because we do not unset it at the beginning of
    our scripts, hook scripts run from the scripted Porcelains are exposed to
    the same insanity this environment variable causes when grep/egrep is used
    to implement logic (e.g. "grep | wc -l"), and it is entirely up to the
    hook scripts to protect themselves.
    On the other hand, applypatch-msg hook may want to show offending words in
    the proposed commit log message using grep to the end user, and the user
    might want to set GREP_OPTIONS=--color to paint the match more visibly.
    The approach to protect only our own use without unsetting the environment
    variable globally will allow this use case.
    Signed-off-by: Junio C Hamano <>
Commits on Nov 13, 2009
  1. @jrn

    add -i, send-email, svn, p4, etc: use "git var GIT_EDITOR"

    jrn authored committed
    Use the new "git var GIT_EDITOR" feature to decide what editor to
    use, instead of duplicating its logic elsewhere.  This should make
    the behavior of commands in edge cases (e.g., editor names with
    spaces) a little more consistent.
    Signed-off-by: Jonathan Nieder <>
    Signed-off-by: Junio C Hamano <>
Commits on Jun 18, 2009
  1. @bebarino

    git-sh-setup: introduce say() for quiet options

    bebarino authored committed
    Scripts should use say() when they want to output non-error messages.
    This function helps future script writers easily implement a quiet
    option by setting GIT_QUIET to enable suppression of non-error messages.
    Signed-off-by: Stephen Boyd <>
    Signed-off-by: Junio C Hamano <>
Commits on Jun 10, 2009
  1. Makefile: insert SANE_TOOL_PATH to PATH before /bin or /usr/bin

    In an earlier patch, we introduced SANE_TOOL_PATH that is prepended to
    user's PATH.  This had an unintended consequence of overriding user's
    private binary directory that typically comes earlier in the PATH to holds
    even saner commands than whatever comes with the system.
    For example, a user may have ~/bin that is early in the path and contains
    a shell script "vi" that launches system's /bin/vi with specific options.
    Prepending SANE_TOOL_PATH to the PATH that happens to have "vi" in it
    defeats such customization.
    This fixes the issue by inserting SANE_TOOL_PATH just before /bin or
    /usr/bin appears on the PATH.
    Signed-off-by: Junio C Hamano <>
Commits on Jun 6, 2009
  1. Makefile: introduce SANE_TOOL_PATH for prepending required elements t…

    …o PATH
    Some platforms (like SunOS and family) have kept their common binaries at
    some historical moment in time, and introduced new binaries with modern
    features in a special location like /usr/xpg4/bin or /usr/ucb.  Some of the
    features provided by these modern binaries are expected and required by git.
    If the featureful binaries are not in the users path, then git could end up
    using the less featureful binary and fail.
    So provide a mechanism to prepend elements to the users PATH at runtime so
    the modern binaries will be found.
    Signed-off-by: Brandon Casey <>
    Signed-off-by: Junio C Hamano <>
Commits on Feb 7, 2009
  1. git-sh-setup: Use "cd" option, not /bin/pwd, for symlinked work tree

    Marcel M. Cary authored committed
    In cd_to_toplevel, instead of 'cd $(unset PWD; /bin/pwd)/$path'
    use 'cd -P $path'.  The "-P" option yields a desirable similarity to
    C chdir.
    While the "-P" option may be slightly less commonly supported than
    /bin/pwd, it is more concise, better tested, and less error prone.
    I've already added the 'unset PWD' to fix the /bin/pwd solution on
    BSD; there may be more edge cases out there.
    This still passes all the same test cases in and, even before updating them to use 'pwd -P'.
    Signed-off-by: Junio C Hamano <>
Commits on Jan 5, 2009
  1. git-sh-setup: Fix scripts whose PWD is a symlink to a work-dir on OS X

    Marcel M. Cary authored committed
    On Mac OS X and possibly BSDs, /bin/pwd reads PWD from the environment if
    available and shows the logical path by default rather than the physical
    Unset PWD before running /bin/pwd in both cd_to_toplevel and its test.
    Still use the external /bin/pwd because in my Bash on Linux, the builtin
    pwd prints the same result whether or not PWD is set.
    Signed-off-by: Marcel M. Cary <>
    Tested-by: Wincent Colaiuta <> (on Mac OS X 10.5.5)
    Tested-by: Marcel Koeppen <> (on Mac OS X 10.5.6)
    Signed-off-by: Junio C Hamano <>
Commits on Dec 21, 2008
  1. git-sh-setup: Fix scripts whose PWD is a symlink into a git work-dir

    Marcel M. Cary authored committed
    I want directories of my working tree to be linked to from various
    paths on my filesystem where third-party components expect them, both
    in development and production environments.  A build system's install
    step could solve this, but I develop scripts and web pages that don't
    need to be built.  Git's submodule system could solve this, but we
    tend to develop, branch, and test those directories all in unison, so
    one big repository feels more natural.  We prefer to edit and commit
    on the symlinked paths, not the canonical ones, and in that setting,
    "git pull" fails to find the top-level directory of the repository
    while other commands work fine.
    "git pull" fails because POSIX shells have a notion of current working
    directory that is different from getcwd().  The shell stores this path
    in PWD.  As a result, "cd ../" can be interpreted differently in a
    shell script than chdir("../") in a C program.  The shell interprets
    "../" by essentially stripping the last textual path component from
    PWD, whereas C chdir() follows the ".." link in the current directory
    on the filesystem.  When PWD is a symlink, these are different
    destinations.  As a result, Git's C commands find the correct
    top-level working tree, and shell scripts do not.
    * When interpreting a relative upward (../) path in cd_to_toplevel,
      prepend the cwd without symlinks, given by /bin/pwd
    * Add tests for cd_to_toplevel and "git pull" in a symlinked
      directory that failed before this fix, plus contrasting scenarios
      that already worked
    Signed-off-by: Marcel M. Cary <>
    Signed-off-by: Junio C Hamano <>
Commits on Jul 13, 2008
  1. @sbeyer

    Make usage strings dash-less

    sbeyer authored committed
    When you misuse a git command, you are shown the usage string.
    But this is currently shown in the dashed form.  So if you just
    copy what you see, it will not work, when the dashed form
    is no longer supported.
    This patch makes git commands show the dash-less version.
    For shell scripts that do not specify OPTIONS_SPEC,
    generates a dash-less usage string now.
    Signed-off-by: Stephan Beyer <>
    Signed-off-by: Junio C Hamano <>
Commits on Jun 26, 2008
  1. Windows: Work around incompatible sort and find.

    Johannes Sixt authored
    If the PATH lists the Windows system directories before the MSYS
    directories, Windows's own incompatible sort and find commands would be
    picked up. We implement these commands as functions and call the real
    tools by absolute path.
    Signed-off-by: Johannes Sixt <>
Commits on Feb 19, 2008
  1. @hjemli

    Simplify setup of $GIT_DIR in

    hjemli authored committed
    Using 'git rev-parse --git-dir' makes the code shorter and more future-
    Signed-off-by: Lars Hjemli <>
    Signed-off-by: Junio C Hamano <>
Commits on Feb 13, 2008
  1. Protect get_author_ident_from_commit() from filenames in work tree

    We used to use "cat-file commit $commit" to extract the original
    author information from existing commit, but an earlier commit
    5ac2715 (Consistent message encoding while reusing log from an
    existing commit) changed it to use "git show -s $commit".  If
    you have a file in your work tree that can be interpreted as a
    valid object name (e.g. "HEAD"), this conversion will not work.
    Disambiguate by marking the end of revision parameter on the
    comand line with an explicit "--" to fix this.
    This breakage is most visible with rebase when a file called
    "HEAD" exists in the worktree.
    Signed-off-by: Junio C Hamano <>
Commits on Dec 20, 2007
  1. shell-scripts usage(): consistently exit with non-zero

    Earlier conversion of shell scripts to parse-options made usage()
    to run "git cmd -h" which in turn emit LONG_USAGE and exit with 0
    status.  This is inconsistent with the scripts that do not use
    parse-options, whose usage() died with the message, exiting with 1.
    Signed-off-by: Junio C Hamano <>
Commits on Dec 15, 2007
  1. @chriscool

    git-help: add "help.format" config variable.

    chriscool authored committed
    This config variable makes it possible to choose the default format
    used to display help. This format will be used only if no option
    like -a|--all|-i|--info|-m|--man|-w|--web is passed to "git-help".
    The following values are possible for this variable:
    	- "man"  --> "man" program is used
    	- "info" --> "info" program is used
    	- "web"  --> "git-browse-help" is used
    By default we still show help using "man".
    This patch also adds -m|--man command line option to use "man"
    to allow overriding the "help.format" configuration variable.
    Note that this patch also revert some recent changes in
    "git-browse-help" because they prevented to look for config
    variables in the global configuration file.
    Signed-off-by: Christian Couder <>
    Signed-off-by: Junio C Hamano <>
Commits on Dec 13, 2007
  1. git-help -w: do not require to be in git repository

    The users used to be able to say "git help cat-file" from anywhere, but
    the browse-help script insisted to be in a git repository, which caused
    "git help -w cat-file" to barf outside.  Correct it.
    While at it, remove leftover debugging "echo".
    Signed-off-by: Junio C Hamano <>
Commits on Nov 8, 2007
  1. @MadCoder

    sh-setup: don't let eval output to be shell-expanded.

    MadCoder authored committed
    The previous patch missed the same construct in git-clone.
    Signed-off-by: Pierre Habouzit <>
  2. git-sh-setup: fix parseopt `eval` string underquoting

    The 'automagic parseopt' support corrupted non option parameters
    that had IFS characters in them.  The worst case is when it had
    a non option parameter like this:
    	$1=" * some string"
    Signed-off-by: Junio C Hamano <>
Commits on Nov 6, 2007
  1. @MadCoder

    Update git-sh-setup(1) to allow transparent use of git-rev-parse --pa…

    MadCoder authored committed
    If you set OPTIONS_SPEC, git-sh-setups uses git-rev-parse --parseopt
    It also diverts usage to re-exec $0 with the -h option as parse-options.c
    will catch that.
    If you need git-rev-parse --parseopt to keep the `--` the user may have
    passed to your command, set OPTIONS_KEEPDASHDASH to a non empty value
    in your script.
    Signed-off-by: Pierre Habouzit <>
    Signed-off-by: Junio C Hamano <>
Commits on Oct 30, 2007
  1. @pclouds use "git rev-parse --show-cdup" to check for SUBDIRE…

    pclouds authored committed
    "git rev-parse --git-dir" trick does not play well with worktree
    Signed-off-by: Nguyễn Thái Ngọc Duy <>
    Signed-off-by: Junio C Hamano <>
Commits on Sep 15, 2007
  1. git-sh-setup: typofix in comments

    Noticed by Anupam Srivastava.
    Signed-off-by: Junio C Hamano <>
Something went wrong with that request. Please try again.