Merge branch 'rl/am-3way-config'
authorJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2015 19:21:45 +0000 (12:21 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2015 19:21:45 +0000 (12:21 -0700)
"git am" learned am.threeWay configuration variable.

* rl/am-3way-config:
git-am: add am.threeWay config variable
t4150-am: refactor am -3 tests
git-am.sh: fix initialization of the threeway variable

1  2 
Documentation/config.txt
git-am.sh
diff --combined Documentation/config.txt
index 43bb53c0477276d81af484cdb64855698b6a635b,77ada666f7e1f32259b717f1b230ed626edec877..3e37b93ed2ac3edfe478952ef445678ae51a5d47
@@@ -453,8 -453,6 +453,8 @@@ false), while all other repositories ar
  
  core.worktree::
        Set the path to the root of the working tree.
 +      If GIT_COMMON_DIR environment variable is set, core.worktree
 +      is ignored and not used for determining the root of working tree.
        This can be overridden by the GIT_WORK_TREE environment
        variable and the '--work-tree' command-line option.
        The value can be an absolute path or relative to the path to
@@@ -624,12 -622,6 +624,12 @@@ core.commentChar:
  If set to "auto", `git-commit` would select a character that is not
  the beginning character of any line in existing commit messages.
  
 +core.packedRefsTimeout::
 +      The length of time, in milliseconds, to retry when trying to
 +      lock the `packed-refs` file. Value 0 means not to retry at
 +      all; -1 means to try indefinitely. Default is 1000 (i.e.,
 +      retry for 1 second).
 +
  sequence.editor::
        Text editor used by `git rebase -i` for editing the rebase instruction file.
        The value is meant to be interpreted by the shell when it is used.
@@@ -769,6 -761,14 +769,14 @@@ am.keepcr:
        by giving '--no-keep-cr' from the command line.
        See linkgit:git-am[1], linkgit:git-mailsplit[1].
  
+ am.threeWay::
+       By default, `git am` will fail if the patch does not apply cleanly. When
+       set to true, this setting tells `git am` to fall back on 3-way merge if
+       the patch records the identity of blobs it is supposed to apply to and
+       we have those blobs available locally (equivalent to giving the `--3way`
+       option from the command line). Defaults to `false`.
+       See linkgit:git-am[1].
  apply.ignoreWhitespace::
        When set to 'change', tells 'git apply' to ignore changes in
        whitespace, in the same way as the '--ignore-space-change'
@@@ -914,8 -914,7 +922,8 @@@ command line with the `--color[=<when>]
  color.diff.<slot>::
        Use customized color for diff colorization.  `<slot>` specifies
        which part of the patch to use the specified color, and is one
 -      of `plain` (context text), `meta` (metainformation), `frag`
 +      of `context` (context text - `plain` is a historical synonym),
 +      `meta` (metainformation), `frag`
        (hunk header), 'func' (function in hunk header), `old` (removed lines),
        `new` (added lines), `commit` (commit headers), or `whitespace`
        (highlighting whitespace errors).
@@@ -1283,13 -1282,6 +1291,13 @@@ gc.pruneExpire:
        "now" may be used to disable this  grace period and always prune
        unreachable objects immediately.
  
 +gc.pruneWorktreesExpire::
 +      When 'git gc' is run, it will call
 +      'prune --worktrees --expire 3.months.ago'.
 +      Override the grace period with this config variable. The value
 +      "now" may be used to disable the grace period and prune
 +      $GIT_DIR/worktrees immediately.
 +
  gc.reflogExpire::
  gc.<pattern>.reflogExpire::
        'git reflog expire' removes reflog entries older than
@@@ -1576,19 -1568,6 +1584,19 @@@ http.saveCookies:
        If set, store cookies received during requests to the file specified by
        http.cookieFile. Has no effect if http.cookieFile is unset.
  
 +http.sslCipherList::
 +  A list of SSL ciphers to use when negotiating an SSL connection.
 +  The available ciphers depend on whether libcurl was built against
 +  NSS or OpenSSL and the particular configuration of the crypto
 +  library in use.  Internally this sets the 'CURLOPT_SSL_CIPHER_LIST'
 +  option; see the libcurl documentation for more details on the format
 +  of this list.
 ++
 +Can be overridden by the 'GIT_SSL_CIPHER_LIST' environment variable.
 +To force git to use libcurl's default cipher list and ignore any
 +explicit http.sslCipherList option, set 'GIT_SSL_CIPHER_LIST' to the
 +empty string.
 +
  http.sslVerify::
        Whether to verify the SSL certificate when fetching or pushing
        over HTTPS. Can be overridden by the 'GIT_SSL_NO_VERIFY' environment
@@@ -2062,7 -2041,7 +2070,7 @@@ pull.ff:
        a case (equivalent to giving the `--no-ff` option from the command
        line). When set to `only`, only such fast-forward merges are
        allowed (equivalent to giving the `--ff-only` option from the
 -      command line).
 +      command line). This setting overrides `merge.ff` when pulling.
  
  pull.rebase::
        When true, rebase branches on top of the fetched branch, instead
@@@ -2299,18 -2278,18 +2307,18 @@@ remote.<name>.skipFetchAll:
  
  remote.<name>.receivepack::
        The default program to execute on the remote side when pushing.  See
 -      option \--receive-pack of linkgit:git-push[1].
 +      option --receive-pack of linkgit:git-push[1].
  
  remote.<name>.uploadpack::
        The default program to execute on the remote side when fetching.  See
 -      option \--upload-pack of linkgit:git-fetch-pack[1].
 +      option --upload-pack of linkgit:git-fetch-pack[1].
  
  remote.<name>.tagOpt::
 -      Setting this value to \--no-tags disables automatic tag following when
 -      fetching from remote <name>. Setting it to \--tags will fetch every
 +      Setting this value to --no-tags disables automatic tag following when
 +      fetching from remote <name>. Setting it to --tags will fetch every
        tag from remote <name>, even if they are not reachable from remote
        branch heads. Passing these flags directly to linkgit:git-fetch[1] can
 -      override this setting. See options \--tags and \--no-tags of
 +      override this setting. See options --tags and --no-tags of
        linkgit:git-fetch[1].
  
  remote.<name>.vcs::
@@@ -2559,20 -2538,14 +2567,20 @@@ uploadpack.hideRefs:
        are under the hierarchies listed on the value of this
        variable is excluded, and is hidden from `git ls-remote`,
        `git fetch`, etc.  An attempt to fetch a hidden ref by `git
 -      fetch` will fail.  See also `uploadpack.allowtipsha1inwant`.
 +      fetch` will fail.  See also `uploadpack.allowTipSHA1InWant`.
  
 -uploadpack.allowtipsha1inwant::
 +uploadpack.allowTipSHA1InWant::
        When `uploadpack.hideRefs` is in effect, allow `upload-pack`
        to accept a fetch request that asks for an object at the tip
        of a hidden ref (by default, such a request is rejected).
        see also `uploadpack.hideRefs`.
  
 +uploadpack.allowReachableSHA1InWant::
 +      Allow `upload-pack` to accept a fetch request that asks for an
 +      object that is reachable from any ref tip. However, note that
 +      calculating object reachability is computationally expensive.
 +      Defaults to `false`.
 +
  uploadpack.keepAlive::
        When `upload-pack` has started `pack-objects`, there may be a
        quiet period while `pack-objects` prepares the pack. Normally
diff --combined git-am.sh
index 761befbd37088c176a65e4d3a12e8a8281e47553,ab8479eb45a692855a04c2fffb81bac2b2f8e60d..75e701a3b03cd64c3beaea82c7eb462c49a69d6d
+++ b/git-am.sh
@@@ -378,6 -378,7 +378,7 @@@ committer_date_is_author_date
  ignore_date=
  allow_rerere_autoupdate=
  gpg_sign_opt=
+ threeway=
  
  if test "$(git config --bool --get am.messageid)" = true
  then
@@@ -389,6 -390,11 +390,11 @@@ the
      keepcr=t
  fi
  
+ if test "$(git config --bool --get am.threeWay)" = true
+ then
+     threeway=t
+ fi
  while test $# != 0
  do
        case "$1" in
@@@ -400,6 -406,8 +406,8 @@@ it will be removed. Please do not use i
                ;;
        -3|--3way)
                threeway=t ;;
+       --no-3way)
+               threeway=f ;;
        -s|--signoff)
                sign=t ;;
        -u|--utf8)
@@@ -657,6 -665,8 +665,8 @@@ f
  if test "$(cat "$dotest/threeway")" = t
  then
        threeway=t
+ else
+       threeway=f
  fi
  git_apply_opt=$(cat "$dotest/apply-opt")
  if test "$(cat "$dotest/sign")" = t
@@@ -827,10 -837,10 +837,10 @@@ To restore the original branch and sto
                continue
        fi
  
 -      if test -x "$GIT_DIR"/hooks/applypatch-msg
 +      hook="$(git rev-parse --git-path hooks/applypatch-msg)"
 +      if test -x "$hook"
        then
 -              "$GIT_DIR"/hooks/applypatch-msg "$dotest/final-commit" ||
 -              stop_here $this
 +              "$hook" "$dotest/final-commit" || stop_here $this
        fi
  
        if test -f "$dotest/final-commit"
@@@ -904,10 -914,9 +914,10 @@@ did you forget to use 'git add'?
                stop_here_user_resolve $this
        fi
  
 -      if test -x "$GIT_DIR"/hooks/pre-applypatch
 +      hook="$(git rev-parse --git-path hooks/pre-applypatch)"
 +      if test -x "$hook"
        then
 -              "$GIT_DIR"/hooks/pre-applypatch || stop_here $this
 +              "$hook" || stop_here $this
        fi
  
        tree=$(git write-tree) &&
                echo "$(cat "$dotest/original-commit") $commit" >> "$dotest/rewritten"
        fi
  
 -      if test -x "$GIT_DIR"/hooks/post-applypatch
 -      then
 -              "$GIT_DIR"/hooks/post-applypatch
 -      fi
 +      hook="$(git rev-parse --git-path hooks/post-applypatch)"
 +      test -x "$hook" && "$hook"
  
        go_next
  done
  
  if test -s "$dotest"/rewritten; then
      git notes copy --for-rewrite=rebase < "$dotest"/rewritten
 -    if test -x "$GIT_DIR"/hooks/post-rewrite; then
 -      "$GIT_DIR"/hooks/post-rewrite rebase < "$dotest"/rewritten
 +    hook="$(git rev-parse --git-path hooks/post-rewrite)"
 +    if test -x "$hook"; then
 +      "$hook" rebase < "$dotest"/rewritten
      fi
  fi