1. 20 3月, 2015 2 次提交
  2. 16 1月, 2015 1 次提交
  3. 14 1月, 2015 1 次提交
    • C
      log: teach --invert-grep option · 22dfa8a2
      Christoph Junghans 提交于
      "git log --grep=<string>" shows only commits with messages that
      match the given string, but sometimes it is useful to be able to
      show only commits that do *not* have certain messages (e.g. "show
      me ones that are not FIXUP commits").
      
      Originally, we had the invert-grep flag in grep_opt, but because
      "git grep --invert-grep" does not make sense except in conjunction
      with "--files-with-matches", which is already covered by
      "--files-without-matches", it was moved it to revisions structure.
      To have the flag there expresses the function to the feature better.
      
      When the newly inserted two tests run, the history would have commits
      with messages "initial", "second", "third", "fourth", "fifth", "sixth"
      and "Second", committed in this order.  The commits that does not match
      either "th" or "Sec" is "second" and "initial". For the case insensitive
      case only "initial" matches.
      Signed-off-by: NChristoph Junghans <ottxor@gentoo.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      22dfa8a2
  4. 30 12月, 2014 1 次提交
    • B
      rev-list: add an option to mark fewer edges as uninteresting · 1684c1b2
      brian m. carlson 提交于
      In commit fbd4a703 (list-objects: mark more commits as edges in
      mark_edges_uninteresting - 2013-08-16), we marked an increasing number
      of edges uninteresting.  This change, and the subsequent change to make
      this conditional on --objects-edge, are used by --thin to make much
      smaller packs for shallow clones.
      
      Unfortunately, they cause a significant performance regression when
      pushing non-shallow clones with lots of refs (23.322 seconds vs.
      4.785 seconds with 22400 refs).  Add an option to git rev-list,
      --objects-edge-aggressive, that preserves this more aggressive behavior,
      while leaving --objects-edge to provide more performant behavior.
      Preserve the current behavior for the moment by using the aggressive
      option.
      Signed-off-by: Nbrian m. carlson <sandals@crustytoothpaste.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      1684c1b2
  5. 31 10月, 2014 1 次提交
    • J
      get_merge_bases(): always clean-up object flags · 2ce406cc
      Junio C Hamano 提交于
      The callers of get_merge_bases() can choose to leave object flags
      used during the merge-base traversal by passing cleanup=0 as a
      parameter, but in practice a very few callers can afford to do so
      (namely, "git merge-base"), as they need to compute merge base in
      preparation for other processing of their own and they need to see
      the object without contaminate flags.
      
      Change the function signature of get_merge_bases_many() and
      get_merge_bases() to drop the cleanup parameter, so that the
      majority of the callers do not have to say ", 1" at the end.
      
      Give a new get_merge_bases_many_dirty() API to support only a few
      callers that know they do not need to spend cycles cleaning up the
      object flags.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      2ce406cc
  6. 20 10月, 2014 3 次提交
    • R
    • J
      rev-list: add --indexed-objects option · 4fe10219
      Jeff King 提交于
      There is currently no easy way to ask the revision traversal
      machinery to include objects reachable from the index (e.g.,
      blobs and trees that have not yet been committed). This
      patch adds an option to do so.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4fe10219
    • J
      traverse_commit_list: support pending blobs/trees with paths · 20739490
      Jeff King 提交于
      When we call traverse_commit_list, we may have trees and
      blobs in the pending array. As we process these, we pass the
      "name" field from the pending entry as the path of the
      object within the tree (which then becomes the root path if
      we recurse into subtrees).
      
      When we set up the traversal in prepare_revision_walk,
      though, the "name" field of any pending trees and blobs is
      likely to be the ref at which we found the object. We would
      not want to make this part of the path (e.g., doing so would
      make "git rev-list --objects v2.6.11-tree" in linux.git show
      paths like "v2.6.11-tree/Makefile", which is nonsensical).
      Therefore prepare_revision_walk sets the name field of each
      pending tree and blobs to the empty string.
      
      However, this leaves no room for a caller who does know the
      correct path of a pending object to propagate that
      information to the revision walker. We can fix this by
      making two related changes:
      
        1. Use the "path" field as the path instead of the "name"
           field in traverse_commit_list. If the path is not set,
           default to "" (which is what we always ended up with in
           the current code, because of prepare_revision_walk).
      
        2. In prepare_revision_walk, make a complete copy of the
           entry. This makes the path field available to the
           walker (if there is one), solving our problem.
           Leaving the name field intact is now OK, as we do not
           use it as a path due to point (1) above (and we can use
           it to make more meaningful error messages if we want).
           We also make the original "mode" field available to the
           walker, though it does not actually use it.
      
      Note that we still re-add the pending objects and free the
      old ones (so we may strdup the path and name only to free
      the old ones). This could be made more efficient by simply
      copying the object_array entries that we are keeping.
      However, that would require more restructuring of the code,
      and is not done here.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      20739490
  7. 17 10月, 2014 2 次提交
    • J
      reachable: reuse revision.c "add all reflogs" code · 718ccc97
      Jeff King 提交于
      We want to add all reflog entries as tips for finding
      reachable objects. The revision machinery can already do
      this (to support "rev-list --reflog"); we can reuse that
      code.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      718ccc97
    • J
      clean up name allocation in prepare_revision_walk · 1da1e07c
      Jeff King 提交于
      When we enter prepare_revision_walk, we have zero or more
      entries in our "pending" array. We disconnect that array
      from the rev_info, and then process each entry:
      
        1. If the entry is a commit and the --source option is in
           effect, we keep a pointer to the object name.
      
        2. Otherwise, we re-add the item to the pending list with
           a blank name.
      
      We then throw away the old array by freeing the array
      itself, but do not touch the "name" field of each entry. For
      any items of type (2), we leak the memory associated with
      the name. This commit fixes that by calling object_array_clear,
      which handles the cleanup for us.
      
      That breaks (1), though, because it depends on the memory
      pointed to by the name to last forever. We can solve that by
      making a copy of the name. This is slightly less efficient,
      but it shouldn't matter in practice, as we do it only for
      the tip commits of the traversal.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      1da1e07c
  8. 19 9月, 2014 1 次提交
  9. 27 8月, 2014 1 次提交
    • J
      log-tree: make name_decoration hash static · 2608c249
      Jeff King 提交于
      In the previous commit, we made add_name_decoration global
      so that adders would not have to access the hash directly.
      We now make the hash itself static so that callers _have_ to
      add through our function, making sure that all additions go
      through a single point.  To do this, we have to add one more
      accessor function: a way to lookup entries in the hash.
      
      Since the only caller doesn't actually look at the returned
      value, but rather only asks whether there is a decoration or
      not, we could provide only a boolean "has_name_decoration".
      That would allow us to make "struct name_decoration" local
      to log-tree, as well.
      
      However, it's unlikely to cause any maintainability harm
      making the actual data public, and this interface is more
      flexible if we need to look at decorations from other parts
      of the code in the future.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      2608c249
  10. 31 7月, 2014 1 次提交
    • J
      revision: drop useless string offset when parsing "--pretty" · ae18165f
      Jeff King 提交于
      Once upon a time, we parsed pretty options by looking for
      "--pretty" at the start of the string, and then feeding the
      rest (including an "=") to get_commit_format. Later, commit
      48ded916 (log --pretty: do not accept bogus "--prettyshort",
      2008-05-25) split this into a separate check for "--pretty"
      versus "--pretty=".
      
      However, when parsing "--pretty", we still passed "arg+8" to
      get_commit_format. This is useless, since it will always
      point to the NUL terminator at the end of the string. We can
      simply pass NULL instead; both parameters are treated the
      same by get_commit_format.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      ae18165f
  11. 14 6月, 2014 1 次提交
    • J
      convert logmsg_reencode to get_commit_buffer · b66103c3
      Jeff King 提交于
      Like the callsites in the previous commit, logmsg_reencode
      already falls back to read_sha1_file when necessary.
      However, I split its conversion out into its own commit
      because it's a bit more complex.
      
      We return either:
      
        1. The original commit->buffer
      
        2. A newly allocated buffer from read_sha1_file
      
        3. A reencoded buffer (based on either 1 or 2 above).
      
      while trying to do as few extra reads/allocations as
      possible. Callers currently free the result with
      logmsg_free, but we can simplify this by pointing them
      straight to unuse_commit_buffer. This is a slight layering
      violation, in that we may be passing a buffer from (3).
      However, since the end result is to free() anything except
      (1), which is unlikely to change, and because this makes the
      interface much simpler, it's a reasonable bending of the
      rules.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b66103c3
  12. 13 6月, 2014 1 次提交
    • J
      logmsg_reencode: return const buffer · b000c59b
      Jeff King 提交于
      The return value from logmsg_reencode may be either a newly
      allocated buffer or a pointer to the existing commit->buffer.
      We would not want the caller to accidentally free() or
      modify the latter, so let's mark it as const.  We can cast
      away the constness in logmsg_free, but only once we have
      determined that it is a free-able buffer.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b000c59b
  13. 10 6月, 2014 1 次提交
  14. 05 6月, 2014 1 次提交
    • J
      shortlog: allow --exclude=<glob> to be passed · eb077745
      Junio C Hamano 提交于
      These two commands are supposed to be equivalent:
      
        $ git log --exclude=refs/notes/\* --all --no-merges --since=2.days |
          git shortlog
        $ git shortlog --exclude=refs/notes/\* --all --no-merges --since=2.days
      
      However, the latter does not understand the ref-exclusion command
      line option, even though other options understood by "log", such as
      "--all" and "--no-merges", are understood.
      
      This was because e7b432c5 (revision: introduce --exclude=<glob> to
      tame wildcards, 2013-08-30) did not wire the new option fully to the
      machinery.  A new option understood by handle_revision_pseudo_opt()
      must be told to handle_revision_opt() as well.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      eb077745
  15. 05 4月, 2014 1 次提交
    • V
      add `ignore_missing_links` mode to revwalk · 2db1a43f
      Vicent Marti 提交于
      When pack-objects is computing the reachability bitmap to
      serve a fetch request, it can erroneously die() if some of
      the UNINTERESTING objects are not present. Upload-pack
      throws away HAVE lines from the client for objects we do not
      have, but we may have a tip object without all of its
      ancestors (e.g., if the tip is no longer reachable and was
      new enough to survive a `git prune`, but some of its
      reachable objects did get pruned).
      
      In the non-bitmap case, we do a revision walk with the HAVE
      objects marked as UNINTERESTING. The revision walker
      explicitly ignores errors in accessing UNINTERESTING commits
      to handle this case (and we do not bother looking at
      UNINTERESTING trees or blobs at all).
      
      When we have bitmaps, however, the process is quite
      different.  The bitmap index for a pack-objects run is
      calculated in two separate steps:
      
      First, we perform an extensive walk from all the HAVEs to
      find the full set of objects reachable from them. This walk
      is usually optimized away because we are expected to hit an
      object with a bitmap during the traversal, which allows us
      to terminate early.
      
      Secondly, we perform an extensive walk from all the WANTs,
      which usually also terminates early because we hit a commit
      with an existing bitmap.
      
      Once we have the resulting bitmaps from the two walks, we
      AND-NOT them together to obtain the resulting set of objects
      we need to pack.
      
      When we are walking the HAVE objects, the revision walker
      does not know that we are walking it only to mark the
      results as uninteresting. We strip out the UNINTERESTING flag,
      because those objects _are_ interesting to us during the
      first walk. We want to keep going to get a complete set of
      reachable objects if we can.
      
      We need some way to tell the revision walker that it's OK to
      silently truncate the HAVE walk, just like it does for the
      UNINTERESTING case. This patch introduces a new
      `ignore_missing_links` flag to the `rev_info` struct, which
      we set only for the HAVE walk.
      
      It also adds tests to cover UNINTERESTING objects missing
      from several positions: a missing blob, a missing tree, and
      a missing parent commit. The missing blob already worked (as
      we do not care about its contents at all), but the other two
      cases caused us to die().
      
      Note that there are a few cases we do not need to test:
      
        1. We do not need to test a missing tree, with the blob
           still present. Without the tree that refers to it, we
           would not know that the blob is relevant to our walk.
      
        2. We do not need to test a tip commit that is missing.
           Upload-pack omits these for us (and in fact, we
           complain even in the non-bitmap case if it fails to do
           so).
      Reported-by: NSiddharth Agarwal <sid0@fb.com>
      Signed-off-by: NVicent Marti <tanoku@gmail.com>
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      2db1a43f
  16. 26 3月, 2014 1 次提交
  17. 14 3月, 2014 1 次提交
  18. 25 2月, 2014 1 次提交
  19. 21 2月, 2014 1 次提交
  20. 06 2月, 2014 1 次提交
  21. 16 1月, 2014 2 次提交
    • J
      revision: propagate flag bits from tags to pointees · a7435286
      Junio C Hamano 提交于
      With the previous fix 895c5ba3 (revision: do not peel tags used in
      range notation, 2013-09-19), handle_revision_arg() that processes
      command line arguments for the "git log" family of commands no
      longer directly places the object pointed by the tag in the pending
      object array when it sees a tag object.  We used to place pointee
      there after copying the flag bits like UNINTERESTING and
      SYMMETRIC_LEFT.
      
      This change meant that any flag that is relevant to later history
      traversal must now be propagated to the pointed objects (most often
      these are commits) while starting the traversal, which is partly
      done by handle_commit() that is called from prepare_revision_walk().
      We did propagate UNINTERESTING, but did not do so for others, most
      notably SYMMETRIC_LEFT.  This caused "git log --left-right v1.0..."
      (where "v1.0" is a tag) to start losing the "leftness" from the
      commit the tag points at.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a7435286
    • J
      revision: mark contents of an uninteresting tree uninteresting · 2ac5e447
      Junio C Hamano 提交于
      "git rev-list --objects ^A^{tree} B^{tree}" ought to mean "I want a
      list of objects inside B's tree, but please exclude the objects that
      appear inside A's tree".
      
      we see the top-level tree marked as uninteresting (i.e. ^A^{tree} in
      the above example) and call mark_tree_uninteresting() on it; this
      unfortunately prevents us from recursing into the tree and marking
      the objects in the tree as uninteresting.
      
      The reason why "git log ^A A" yields an empty set of commits,
      i.e. we do not have a similar issue for commits, is because we call
      mark_parents_uninteresting() after seeing an uninteresting commit.
      The uninteresting-ness of the commit itself does not prevent its
      parents from being marked as uninteresting.
      
      Introduce mark_tree_contents_uninteresting() and structure the code
      in handle_commit() in such a way that it makes it the responsibility
      of the callchain leading to this function to mark commits, trees and
      blobs as uninteresting, and also make it the responsibility of the
      helpers called from this function to mark objects that are reachable
      from them.
      
      Note that this is a very old bug that probably dates back to the day
      when "rev-list --objects" was introduced.  The line to clear
      tree->object.parsed at the end of mark_tree_contents_uninteresting()
      can be removed when this fix is merged to the codebase after
      6e454b9a (clear parsed flag when we free tree buffers, 2013-06-05).
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      2ac5e447
  22. 06 12月, 2013 1 次提交
    • C
      replace {pre,suf}fixcmp() with {starts,ends}_with() · 59556548
      Christian Couder 提交于
      Leaving only the function definitions and declarations so that any
      new topic in flight can still make use of the old functions, replace
      existing uses of the prefixcmp() and suffixcmp() with new API
      functions.
      
      The change can be recreated by mechanically applying this:
      
          $ git grep -l -e prefixcmp -e suffixcmp -- \*.c |
            grep -v strbuf\\.c |
            xargs perl -pi -e '
              s|!prefixcmp\(|starts_with\(|g;
              s|prefixcmp\(|!starts_with\(|g;
              s|!suffixcmp\(|ends_with\(|g;
              s|suffixcmp\(|!ends_with\(|g;
            '
      
      on the result of preparatory changes in this series.
      Signed-off-by: NChristian Couder <chriscool@tuxfamily.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      59556548
  23. 02 11月, 2013 1 次提交
  24. 01 11月, 2013 1 次提交
  25. 29 10月, 2013 1 次提交
    • N
      pathspec: stop --*-pathspecs impact on internal parse_pathspec() uses · 4a2d5ae2
      Nguyễn Thái Ngọc Duy 提交于
      Normally parse_pathspec() is used on command line arguments where it
      can do fancy thing like parsing magic on each argument or adding magic
      for all pathspecs based on --*-pathspecs options.
      
      There's another use of parse_pathspec(), where pathspec is needed, but
      the input is known to be pure paths. In this case we usually don't
      want --*-pathspecs to interfere. And we definitely do not want to
      parse magic in these paths, regardless of --literal-pathspecs.
      
      Add new flag PATHSPEC_LITERAL_PATH for this purpose. When it's set,
      --*-pathspecs are ignored, no magic is parsed. And if the caller
      allows PATHSPEC_LITERAL (i.e. the next calls can take literal magic),
      then PATHSPEC_LITERAL will be set.
      
      This fixes cases where git chokes when GIT_*_PATHSPECS are set because
      parse_pathspec() indicates it won't take any magic. But
      GIT_*_PATHSPECS add them anyway. These are
      
         export GIT_LITERAL_PATHSPECS=1
         git blame -- something
         git log --follow something
         git log --merge
      
      "git ls-files --with-tree=path" (aka parse_pathspec() in
      overlay_tree_on_cache()) is safe because the input is empty, and
      producing one pathspec due to PATHSPEC_PREFER_CWD does not take any
      magic into account.
      Signed-off-by: NNguyễn Thái Ngọc Duy <pclouds@gmail.com>
      Acked-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4a2d5ae2
  26. 25 10月, 2013 1 次提交
  27. 23 10月, 2013 1 次提交
  28. 16 10月, 2013 1 次提交
    • J
      revision: do not peel tags used in range notation · 895c5ba3
      Junio C Hamano 提交于
      A range notation "A..B" means exactly the same thing as what "^A B"
      means, i.e. the set of commits that are reachable from B but not
      from A.  But the internal representation after the revision parser
      parsed these two notations are subtly different.
      
       - "rev-list ^A B" leaves A and B in the revs->pending.objects[]
         array, with the former marked as UNINTERESTING and the revision
         traversal machinery propagates the mark to underlying commit
         objects A^0 and B^0.
      
       - "rev-list A..B" peels tags and leaves A^0 (marked as
         UNINTERESTING) and B^0 in revs->pending.objects[] array before
         the traversal machinery kicks in.
      
      This difference usually does not matter, but starts to matter when
      the --objects option is used.  For example, we see this:
      
          $ git rev-list --objects v1.8.4^1..v1.8.4 | grep $(git rev-parse v1.8.4)
          $ git rev-list --objects v1.8.4 ^v1.8.4^1 | grep $(git rev-parse v1.8.4)
          04f013dc38d7512eadb915eba22efc414f18b869 v1.8.4
      
      With the former invocation, the revision traversal machinery never
      hears about the tag v1.8.4 (it only sees the result of peeling it,
      i.e. the commit v1.8.4^0), and the tag itself does not appear in the
      output.  The latter does send the tag object itself to the output.
      
      Make the range notation keep the unpeeled objects and feed them to
      the traversal machinery to fix this inconsistency.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      895c5ba3
  29. 04 9月, 2013 1 次提交
  30. 31 8月, 2013 1 次提交
    • J
      revision: introduce --exclude=<glob> to tame wildcards · e7b432c5
      Junio C Hamano 提交于
      People often find "git log --branches" etc. that includes _all_
      branches is cumbersome to use when they want to grab most but except
      some.  The same applies to --tags, --all and --glob.
      
      Teach the revision machinery to remember patterns, and then upon the
      next such a globbing option, exclude those that match the pattern.
      
      With this, I can view only my integration branches (e.g. maint,
      master, etc.) without topic branches, which are named after two
      letters from primary authors' names, slash and topic name.
      
          git rev-list --no-walk --exclude=??/* --branches |
          git name-rev --refs refs/heads/* --stdin
      
      This one shows things reachable from local and remote branches that
      have not been merged to the integration branches.
      
          git log --remotes --branches --not --exclude=??/* --branches
      
      It may be a bit rough around the edges, in that the pattern to give
      the exclude option depends on what globbing option follows.  In
      these examples, the pattern "??/*" is used, not "refs/heads/??/*",
      because the globbing option that follows the -"-exclude=<pattern>"
      is "--branches".  As each use of globbing option resets previously
      set "--exclude", this may not be such a bad thing, though.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      e7b432c5
  31. 05 8月, 2013 1 次提交
    • T
      log: use true parents for diff when walking reflogs · 838f9a15
      Thomas Rast 提交于
      The reflog walking logic (git log -g) replaces the true parent list
      with the preceding commit in the reflog.  This results in bogus commit
      diffs when combined with options such as -p; the diff is against the
      reflog predecessor, not the parent of the commit.
      
      Save the true parents on the side, extending the functions from the
      previous commit.  The diff logic picks them up and uses them to show
      the correct diffs.
      
      We do have to be somewhat careful about repeated calling of
      save_parents(), since the reflog may list a commit more than once.  We
      now store (commit_list*)-1 to distinguish the "not saved yet" and
      "root commit" cases.  This lets us preserve an empty parent list even
      if save_parents() is repeatedly called.
      Suggested-by: NJeff King <peff@peff.net>
      Signed-off-by: NThomas Rast <trast@inf.ethz.ch>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      838f9a15
  32. 02 8月, 2013 1 次提交
    • T
      log: use true parents for diff even when rewriting · 53d00b39
      Thomas Rast 提交于
      When using pathspec filtering in combination with diff-based log
      output, parent simplification happens before the diff is computed.
      The diff is therefore against the *simplified* parents.
      
      This works okay, arguably by accident, in the normal case:
      simplification reduces to one parent as long as the commit is TREESAME
      to it.  So the simplified parent of any given commit must have the
      same tree contents on the filtered paths as its true (unfiltered)
      parent.
      
      However, --full-diff breaks this guarantee, and indeed gives pretty
      spectacular results when comparing the output of
      
        git log --graph --stat ...
        git log --graph --full-diff --stat ...
      
      (--graph internally kicks in parent simplification, much like
      --parents).
      
      To fix it, store a copy of the parent list before simplification (in a
      slab) whenever --full-diff is in effect.  Then use the stored parents
      instead of the simplified ones in the commit display code paths.  The
      latter do not actually check for --full-diff to avoid duplicated code;
      they just grab the original parents if save_parents() has not been
      called for this revision walk.
      
      For ordinary commits it should be obvious that this is the right thing
      to do.
      
      Merge commits are a bit subtle.  Observe that with default
      simplification, merge simplification is an all-or-nothing decision:
      either the merge is TREESAME to one parent and disappears, or it is
      different from all parents and the parent list remains intact.
      Redundant parents are not pruned, so the existing code also shows them
      as a merge.
      
      So if we do show a merge commit, the parent list just consists of the
      rewrite result on each parent.  Running, e.g., --cc on this in
      --full-diff mode is not very useful: if any commits were skipped, some
      hunks will disagree with all sides of the merge (with one side,
      because commits were skipped; with the others, because they didn't
      have those changes in the first place).  This triggers --cc showing
      these hunks spuriously.
      
      Therefore I believe that even for merge commits it is better to show
      the diffs wrt. the original parents.
      Reported-by: NUwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Helped-by: NJunio C Hamano <gitster@pobox.com>
      Helped-by: NRamsay Jones <ramsay@ramsay1.demon.co.uk>
      Signed-off-by: NThomas Rast <trast@inf.ethz.ch>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      53d00b39
  33. 16 7月, 2013 3 次提交