1. 14 9月, 2016 8 次提交
    • J
      pager: make pager_program a file-local static · c0c08897
      Jeff King 提交于
      This variable is only ever used by the routines in pager.c,
      and other parts of the code should always use those routines
      (like git_pager()) to make decisions about which pager to
      use. Let's reduce its scope to prevent accidents.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      c0c08897
    • J
      pager: stop loading git_default_config() · 4babb839
      Jeff King 提交于
      In git_pager(), we really only care about getting the value
      of core.pager. But to do so, we use the git_default_config()
      callback, which loads many other values. Ordinarily it
      isn't a big deal to load this config an extra time, as it
      simply overwrites the values from the previous run. But it's
      a bad idea here, for two reasons:
      
        1. The pager setup may be called very early in the
           program, before we have found the git repository. As a
           result, we may fail to read the correct repo-level
           config file.  This is a problem for core.pager, too,
           but we should at least try to minimize the pollution to
           other configured values.
      
        2. Because we call setup_pager() from git.c, basically
           every builtin command _may_ end up reading this config
           and getting an implicit git_default_config() setup.
      
           Which doesn't sound like a terrible thing, except that
           we don't do it consistently; it triggers only when
           stdout is a tty. So if a command forgets to load the
           default config itself (but depends on it anyway), it
           may appear to work, and then mysteriously fail when the
           pager is not in use.
      
      We can improve this by loading _just_ the core.pager config
      from git_pager().
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4babb839
    • J
      pager: remove obsolete comment · 01e7e903
      Jeff King 提交于
      The comment at the top of pager.c claims that we've split
      the code out so that Windows can do something different.
      This dates back to f67b45f8 (Introduce trivial new pager.c
      helper infrastructure, 2006-02-28), because the original
      implementation used fork(). Later, we ended up sticking the
      Windows #ifdefs into this file anyway. And then even later,
      in ea27a18c (spawn pager via run_command interface,
      2008-07-22) we unified the implementations.
      
      So these days this comment is really saying nothing at all.
      Let's drop it.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      01e7e903
    • J
      diff: always try to set up the repository · 28a4e580
      Jeff King 提交于
      If we see an explicit "--no-index", we do not bother calling
      setup_git_directory_gently() at all. This means that we may
      miss out on reading repo-specific config.
      
      It's arguable whether this is correct or not. If we were
      designing from scratch, making "git diff --no-index"
      completely ignore the repository makes some sense. But we
      are nowhere near scratch, so let's look at the existing
      behavior:
      
        1. If you're in the top-level of a repository and run an
           explicit "diff --no-index", the config subsystem falls
           back to reading ".git/config", and we will respect repo
           config.
      
        2. If you're in a subdirectory of a repository, then we
           still try to read ".git/config", but it generally
           doesn't exist. So "diff --no-index" there does not
           respect repo config.
      
        3. If you have $GIT_DIR set in the environment, we read
           and respect $GIT_DIR/config,
      
        4. If you run "git diff /tmp/foo /tmp/bar" to get an
           implicit no-index, we _do_ run the repository setup,
           and set $GIT_DIR (or respect an existing $GIT_DIR
           variable). We find the repo config no matter where we
           started, and respect it.
      
      So we already respect the repository config in a number of
      common cases, and case (2) is the only one that does not.
      And at least one of our tests, t4034, depends on case (1)
      behaving as it does now (though it is just incidental, not
      an explicit test for this behavior).
      
      So let's bring case (2) in line with the others by always
      running the repository setup, even with an explicit
      "--no-index". We shouldn't need to change anything else, as the
      implicit case already handles the prefix.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      28a4e580
    • J
      diff: handle --no-index prefixes consistently · 7d8930d9
      Jeff King 提交于
      If we see an explicit "git diff --no-index ../foo ../bar",
      then we do not set up the git repository at all (we already
      know we are in --no-index mode, so do not have to check "are
      we in a repository?"), and hence have no "prefix" within the
      repository. A patch generated by this command will have the
      filenames "a/../foo" and "b/../bar", no matter which
      directory we are in with respect to any repository.
      
      However, in the implicit case, where we notice that the
      files are outside the repository, we will have chdir()'d to
      the top-level of the repository. We then feed the prefix
      back to the diff machinery. As a result, running the same
      diff from a subdirectory will result in paths that look like
      "a/subdir/../../foo".
      
      Besides being unnecessarily long, this may also be confusing
      to the user: they don't care about the subdir or the
      repository at all; it's just where they happened to be when
      running the command. We should treat this the same as the
      explicit --no-index case.
      
      One way to address this would be to chdir() back to the
      original path before running our diff. However, that's a bit
      hacky, as we would also need to adjust $GIT_DIR, which could
      be a relative path from our top-level.
      
      Instead, we can reuse the diff machinery's RELATIVE_NAME
      option, which automatically strips off the prefix. Note that
      this _also_ restricts the diff to this relative prefix, but
      that's OK for our purposes: we queue our own diff pairs
      manually, and do not rely on that part of the diff code.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      7d8930d9
    • J
      diff: skip implicit no-index check when given --no-index · 475b362c
      Jeff King 提交于
      We can invoke no-index mode in two ways: by an explicit
      request from the user, or implicitly by noticing that we
      have two paths, and at least one is outside the repository.
      
      If the user already told us --no-index, there is no need for
      us to do the implicit test at all.  However, we currently
      do, and downgrade our "explicit" to DIFF_NO_INDEX_IMPLICIT.
      
      This doesn't have any user-visible behavior, though it's not
      immediately obvious why. We only trigger the implicit check
      when we have exactly two non-option arguments. And the only
      code that cares about implicit versus explicit is an error
      message that we show when we _don't_ have two non-option
      arguments.
      
      However, it's worth fixing anyway. Besides being slightly
      more efficient, it makes the code easier to follow, which
      will help when we modify it in future patches.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      475b362c
    • J
      patch-id: use RUN_SETUP_GENTLY · 4a73aaaf
      Jeff King 提交于
      Patch-id does not require a repository because it is just
      processing the incoming diff on stdin, but it may look at
      git config for keys like patchid.stable.
      
      Even though we do not setup_git_directory(), this works from
      the top-level of a repository because we blindly look at
      ".git/config" in this case. But as the included test
      demonstrates, it does not work from a subdirectory.
      
      We can fix it by using RUN_SETUP_GENTLY. We do not take any
      filenames from the user on the command line, so there's no
      need to adjust them via prefix_filename().
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4a73aaaf
    • J
      hash-object: always try to set up the git repository · 0e94ee94
      Jeff King 提交于
      When "hash-object" is run without "-w", we don't need to be
      in a git repository at all; we can just hash the object and
      write its sha1 to stdout. However, if we _are_ in a git
      repository, we would want to know that so we can follow the
      normal rules for respecting config, .gitattributes, etc.
      
      This happens to work at the top-level of a git repository
      because we blindly read ".git/config", but as the included
      test shows, it does not work when you are in a subdirectory.
      
      The solution is to just do a "gentle" setup in this case. We
      already take care to use prefix_filename() on any filename
      arguments we get (to handle the "-w" case), so we don't need
      to do anything extra to handle the side effects of repo
      setup.
      
      An alternative would be to specify RUN_SETUP_GENTLY for this
      command in git.c, and then die if "-w" is set but we are not
      in a repository. However, the error messages generated at
      the time of setup_git_directory() are more detailed, so it's
      better to find out which mode we are in, and then call the
      appropriate function.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      0e94ee94
  2. 07 6月, 2016 5 次提交
    • J
      Git 2.8.4 · 0b65a8db
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      0b65a8db
    • J
      Merge branch 'kb/msys2-tty' into maint · 1676827c
      Junio C Hamano 提交于
      The "are we talking with TTY, doing an interactive session?"
      detection has been updated to work better for "Git for Windows".
      
      * kb/msys2-tty:
        mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)
      1676827c
    • J
      Merge branch 'da/difftool' into maint · 389c3289
      Junio C Hamano 提交于
      "git difftool" learned to handle unmerged paths correctly in
      dir-diff mode.
      
      * da/difftool:
        difftool: handle unmerged files in dir-diff mode
        difftool: initialize variables for readability
      389c3289
    • J
      Merge branch 'tb/core-eol-fix' into maint · 7dcbf891
      Junio C Hamano 提交于
      A couple of bugs around core.autocrlf have been fixed.
      
      * tb/core-eol-fix:
        convert.c: ident + core.autocrlf didn't work
        t0027: test cases for combined attributes
        convert: allow core.autocrlf=input and core.eol=crlf
        t0027: make commit_chk_wrnNNO() reliable
      7dcbf891
    • J
      Merge branch 'ar/diff-args-osx-precompose' into maint · 05781d37
      Junio C Hamano 提交于
      Many commands normalize command line arguments from NFD to NFC
      variant of UTF-8 on OSX, but commands in the "diff" family did
      not, causing "git diff $path" to complain that no such path is
      known to Git.  They have been taught to do the normalization.
      
      * ar/diff-args-osx-precompose:
        diff: run arguments through precompose_argv
      05781d37
  3. 01 6月, 2016 5 次提交
    • J
      More topics for 2.8.4 · 4b0891ff
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4b0891ff
    • J
      Merge branch 'sb/submodule-deinit-all' into maint · 3296e1a9
      Junio C Hamano 提交于
      Correct faulty recommendation to use "git submodule deinit ." when
      de-initialising all submodules, which would result in a strange
      error message in a pathological corner case.
      
      * sb/submodule-deinit-all:
        submodule deinit: require '--all' instead of '.' for all submodules
      3296e1a9
    • J
      Merge branch 'bn/http-cookiefile-config' into maint · e646a82c
      Junio C Hamano 提交于
      "http.cookieFile" configuration variable clearly wants a pathname,
      but we forgot to treat it as such by e.g. applying tilde expansion.
      
      * bn/http-cookiefile-config:
        http: expand http.cookieFile as a path
        Documentation: config: improve word ordering for http.cookieFile
      e646a82c
    • J
      Merge branch 'jk/test-send-sh-x-trace-elsewhere' into maint · 68a6e976
      Junio C Hamano 提交于
      Running tests with '-x' option to trace the individual command
      executions is a useful way to debug test scripts, but some tests
      that capture the standard error stream and check what the command
      said can be broken with the trace output mixed in.  When running
      our tests under "bash", however, we can redirect the trace output
      to another file descriptor to keep the standard error of programs
      being tested intact.
      
      * jk/test-send-sh-x-trace-elsewhere:
        test-lib: set BASH_XTRACEFD automatically
      68a6e976
    • J
      Merge branch 'js/name-rev-use-oldest-ref' into maint · 9ee8f940
      Junio C Hamano 提交于
      "git describe --contains" often made a hard-to-justify choice of
      tag to give name to a given commit, because it tried to come up
      with a name with smallest number of hops from a tag, causing an old
      commit whose close descendant that is recently tagged were not
      described with respect to an old tag but with a newer tag.  It did
      not help that its computation of "hop" count was further tweaked to
      penalize being on a side branch of a merge.  The logic has been
      updated to favor using the tag with the oldest tagger date, which
      is a lot easier to explain to the end users: "We describe a commit
      in terms of the (chronologically) oldest tag that contains the
      commit."
      
      * js/name-rev-use-oldest-ref:
        name-rev: include taggerdate in considering the best name
      9ee8f940
  4. 27 5月, 2016 21 次提交
  5. 19 5月, 2016 1 次提交