aboutsummaryrefslogtreecommitdiff
path: root/gitweb/test
diff options
context:
space:
mode:
authorJakub Narebski <jnareb@gmail.com>2007-10-30 01:35:05 +0100
committerJunio C Hamano <gitster@pobox.com>2007-10-29 21:21:51 -0700
commit0cec6db5cfbb109eebb3a50b6213cab2dc68f0c8 (patch)
treecef5d19a6dca750939e6f0e5a09cb483d2840c69 /gitweb/test
parent09149c7809a37a52b38d8d7a0621e2fb8943d8fe (diff)
downloadgit-0cec6db5cfbb109eebb3a50b6213cab2dc68f0c8.tar.gz
git-0cec6db5cfbb109eebb3a50b6213cab2dc68f0c8.tar.xz
gitweb: Fix and simplify "split patch" detection
There are some cases when one line from "raw" git-diff output (raw format) corresponds to more than one patch in the patchset git-diff output; we call this situation "split patch". Old code misdetected subsequent patches (for different files) with the same pre-image and post-image as fragments of "split patch", leading to mislabeled from-file/to-file diff header etc. Old code used pre-image and post-image SHA-1 identifier ('from_id' and 'to_id') to check if current patch corresponds to old raw diff format line, to find if one difftree raw line coresponds to more than one patch in the patch format. Now we use post-image filename for that. This assumes that post-image filename alone can be used to identify difftree raw line. In the case this changes (which is unlikely considering current diff engine) we can add 'from_id' and 'to_id' to detect "patch splitting" together with 'to_file'. Because old code got pre-image and post-image SHA-1 identifier for the patch from the "index" line in extended diff header, diff header had to be buffered. New code takes post-image filename from "git diff" header, which is first line of a patch; this allows to simplify git_patchset_body code. A side effect of resigning diff header buffering is that there is always "diff extended_header" div, even if extended diff header is empty. Alternate solution would be to check when git splits patches, and do not check if parsed info from current patch corresponds to current or next raw diff format output line. Git splits patches only for 'T' (typechange) status filepair, and there always two patches corresponding to one raw diff line. It was not used because it would tie gitweb code to minute details of git diff output. While at it, use newly introduced parsed_difftree_line wrapper subroutine in git_difftree_body. Noticed-by: Yann Dirson <ydirson@altern.org> Diagnosed-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'gitweb/test')
0 files changed, 0 insertions, 0 deletions