Make --color-words work well with --graph
commit3795bb2506fb932bea66dd9c9e75d1c911b345fb
authorBo Yang <struggleyb.nku@gmail.com>
Sat, 29 May 2010 15:32:06 +0000 (29 23:32 +0800)
committerPavan Kumar Sunkara <pavan.sss1991@gmail.com>
Mon, 21 Jun 2010 18:44:00 +0000 (22 00:14 +0530)
treedcddf65da0a7027058503a80c7e1fcd1a5b9b272
parent3fccaaedfef5c8839ccb70b8f94a6fd1ffb3530c
Make --color-words work well with --graph

'--color-words' algorithm can be described as:

  1. collect a the minus/plus lines of a diff hunk, divided into
     minus-lines and plus-lines;

  2. break both minus-lines and plus-lines into words and
     place them into two mmfile_t with one word for each line;

  3. use xdiff to run diff on the two mmfile_t to get the words level diff;

And for the common parts of the both file, we output the plus side text.
diff_words->current_plus is used to trace the current position of the plus file
which printed. diff_words->last_minus is used to trace the last minus word
printed.

For '--graph' to work with '--color-words', we need to output the graph prefix
on each line of color words output. Generally, there are two conditions on
which we should output the prefix.

  1. diff_words->last_minus == 0 &&
     diff_words->current_plus == diff_words->plus.text.ptr

     that is: the plus text must start as a new line, and if there is no minus
     word printed, a graph prefix must be printed.

  2. diff_words->current_plus > diff_words->plus.text.ptr &&
     *(diff_words->current_plus - 1) == '\n'

     that is: a graph prefix must be printed following a '\n'

Signed-off-by: Bo Yang <struggleyb.nku@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c