git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Rast <trast@student.ethz.ch>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org, Junio C Hamano <junio@pobox.com>
Subject: Re: [PATCH 3/4] color-words: refactor to allow for 0-character word boundaries
Date: Mon, 12 Jan 2009 09:47:11 +0100	[thread overview]
Message-ID: <200901120947.13566.trast@student.ethz.ch> (raw)
In-Reply-To: <alpine.DEB.1.00.0901112059340.3586@pacific.mpi-cbg.de>

[-- Attachment #1: Type: text/plain, Size: 3629 bytes --]

As a side remark, this patch makes a good use-case for --patience, and
is not isomorphic to the other edit-and-move examples; rather it's a
delete-and-edit.

Johannes Schindelin wrote:
> Subject: [PATCH 3/4] color-words: refactor to allow for 0-character word boundaries

I do not think the term "refactor" is accurate.  Wikipedia roughly
defines it as a code change that preserves all external semantics by
some standard method, and lists methods such as variable renaming,
common code extraction, etc.  You are actually completely replacing
the algorithm "under the hood" with a new one, so no such standard
method applies.

And there is also a tiny semantic change: compare

  A: a b  c
  B: x y  z
        ^^

The old version implicitly generated an empty line at the double
spaces (marked ^^), which subsequently became context and caused the
words to be printed as follows, where <..> is old and [..] is new:

  <a b >[x y ] <c>[z]

Your patched version does not generate empty lines for any space
whatsoever, not even for newlines.  Thus the result is

  <a b  c>[x y  z]

I think this is actually a good change, since it results in longer
chunks for "entirely rewritten" parts of the diff.  It also answers
Junio's question in the other thread:

Junio C Hamano wrote:
>> 
>> What happens if the input "language" does not have any inter-word spacing
>> but its words can still be expressed by regexp patterns?
>> 
>> ImagineALanguageThatAllowsYouToWriteSomethingLikeThis.  Does the mechanism
>> help users who want to do word-diff files written in such a language by
>> outputting:
>> 
>> 	ImagineALanguage<red>That</red><green>Which</green>AllowsYou...
>> 
>> when '[A-Z][a-z]*' is given by the word pattern?

Your patch handles this as a side-effect *even if the lines are
indented*, since no sequence of spaces whatsoever is special.  (Mine
would have given hard-to-predict results based on the number of
newlines between them, and xdiff's decision whether the newlines or
the words are more valuable as context.)

So I think this is actually an improvement, but the commit message
should point out the change in semantics.

> +static void fn_out_diff_words_aux(void *priv, char *line, unsigned long len)
>  {
> +	if (line[0] != '@' || parse_hunk_header(line, len,
> +			&minus_first, &minus_len, &plus_first, &plus_len))

It would be nice to have a comment here that points out that this
method crucially relies on having context length 0 (just as the old
one crucially relied on having the full text in a single hunk).

> +	for (i = 0; i < buffer->text.size; i++) {
> +		if (isspace(buffer->text.ptr[i]))
> +			continue;

I think it is this coupling of the loops to find a word, and to find a
word _beginning_, that comes back to haunt you in 4/4.  If the outer
loop was strictly about the words, you could use the regex match info
to find the beginning in the regex case.  This is probably cleaner
than attempting to force an anchored match, since at least the 'grep'
on my system takes '^^foo' to mean 'a "^foo" at the beginning of a
line', so you cannot just unconditionally insert a ^.  (Conditionally
inserting one seems even harder.)


These remarks aside (and the last one is the only one of relevance to
the code), this patch would be a vast improvement of the code even if
we weren't discussing it in the context of the regex feature.  So FWIW

  Acked-by: Thomas Rast <trast@student.ethz.ch>

up to here.  I hope we can agree on some sane regex semantics for
4/4...

-- 
Thomas Rast
trast@{inf,student}.ethz.ch



[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

  parent reply	other threads:[~2009-01-12  8:48 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-11 19:58 [PATCH 0/4] refactor the --color-words to make it more hackable Johannes Schindelin
2009-01-11 19:59 ` [PATCH 1/4] Add color_fwrite(), a function coloring each line individually Johannes Schindelin
2009-01-11 22:43   ` Junio C Hamano
2009-01-11 23:49     ` Johannes Schindelin
2009-01-11 23:49       ` [PATCH v2 " Johannes Schindelin
2009-01-12  1:27         ` Jakub Narebski
2009-01-11 19:59 ` [PATCH 2/4] color-words: refactor word splitting and use ALLOC_GROW() Johannes Schindelin
2009-01-11 19:59 ` [PATCH 3/4] color-words: refactor to allow for 0-character word boundaries Johannes Schindelin
2009-01-11 23:08   ` Junio C Hamano
2009-01-11 23:38     ` Johannes Schindelin
2009-01-12  8:47   ` Thomas Rast [this message]
2009-01-12  9:36     ` Junio C Hamano
2009-01-11 20:00 ` [PATCH 4/4] color-words: take an optional regular expression describing words Johannes Schindelin
2009-01-11 21:53 ` [PATCH 0/4] refactor the --color-words to make it more hackable Thomas Rast
2009-01-11 23:02   ` Johannes Schindelin
2009-01-12  6:25     ` Thomas Rast
2009-01-14 13:00 ` Santi Béjar
2009-01-14 17:49   ` [PATCH take 3 0/4] color-words improvements Johannes Schindelin
2009-01-14 17:50     ` [PATCH 1/4] Add color_fwrite_lines(), a function coloring each line individually Johannes Schindelin
2009-01-14 17:50     ` [PATCH 2/4] color-words: refactor word splitting and use ALLOC_GROW() Johannes Schindelin
2009-01-14 17:51     ` [PATCH 3/4] color-words: change algorithm to allow for 0-character word boundaries Johannes Schindelin
2009-01-14 18:08       ` Johannes Schindelin
2009-01-14 17:51     ` [PATCH 4/4] color-words: take an optional regular expression describing words Johannes Schindelin
2009-01-14 19:55       ` Thomas Rast
2009-01-14 18:54     ` [PATCH take 3 0/4] color-words improvements Teemu Likonen
2009-01-14 18:57       ` Teemu Likonen
2009-01-14 19:28         ` Johannes Schindelin
2009-01-14 19:32           ` Johannes Schindelin
2009-01-14 20:44             ` [PATCH replacement for take 3 3/4] color-words: change algorithm to allow for 0-character word boundaries Johannes Schindelin
2009-01-14 20:46               ` [PATCH replacement for take 3 4/4] color-words: take an optional regular expression describing words Johannes Schindelin
2009-01-15  0:32                 ` Thomas Rast
2009-01-15  1:12                   ` Johannes Schindelin
2009-01-15  1:36                     ` Johannes Schindelin
2009-01-15  8:30                       ` Thomas Rast
2009-01-15 10:40                         ` Thomas Rast
2009-01-15 12:54                           ` Johannes Schindelin
2009-01-14 19:58       ` [PATCH take 3 0/4] color-words improvements Thomas Rast
2009-01-14 22:06         ` Johannes Schindelin
2009-01-14 22:11           ` Thomas Rast
2009-01-14 22:24           ` Boyd Stephen Smith Jr.
2009-01-15  4:56           ` Teemu Likonen
2009-01-15 12:41             ` Johannes Schindelin
2009-01-15 13:03               ` Teemu Likonen
2009-01-15 13:27                 ` Thomas Rast
2009-01-15 18:15               ` Junio C Hamano
2009-01-15 19:25                 ` Johannes Schindelin
2009-01-16  0:10                   ` Santi Béjar
2009-01-16  1:37                     ` Junio C Hamano
2009-01-16  1:42                     ` Boyd Stephen Smith Jr.
2009-01-16  1:55                     ` Johannes Schindelin
2009-01-16  9:02                       ` Santi Béjar
2009-01-16 11:57                         ` Johannes Schindelin
2009-01-16 12:01                         ` Santi Béjar
2009-01-16 12:40                           ` Johannes Schindelin
2009-01-16 19:04                           ` Thomas Rast
2009-01-16 21:09                             ` Johannes Schindelin
2009-01-17 16:29                               ` [PATCH v4 0/7] customizable --color-words Thomas Rast
2009-01-17 16:29                                 ` [PATCH v4 1/7] Add color_fwrite_lines(), a function coloring each line individually Thomas Rast
2009-01-17 16:29                                   ` [PATCH v4 2/7] color-words: refactor word splitting and use ALLOC_GROW() Thomas Rast
2009-01-17 16:29                                     ` [PATCH v4 3/7] color-words: change algorithm to allow for 0-character word boundaries Thomas Rast
2009-01-17 16:29                                       ` [PATCH v4 4/7] color-words: take an optional regular expression describing words Thomas Rast
2009-01-17 16:29                                         ` [PATCH v4 5/7] color-words: enable REG_NEWLINE to help user Thomas Rast
2009-01-17 16:29                                           ` [PATCH v4 6/7] color-words: expand docs with precise semantics Thomas Rast
2009-01-17 16:29                                             ` [PATCH v4 7/7] color-words: make regex configurable via attributes Thomas Rast
2009-01-18 15:05                                 ` [PATCH v4 0/7] customizable --color-words Santi Béjar
2009-01-18 15:29                                   ` Santi Béjar
2009-01-19 22:47                                 ` Santi Béjar
2009-01-19 23:35                                   ` Johannes Schindelin
2009-01-20  2:17                                     ` [PATCH] Add tests for diff.color-words configuration option Boyd Stephen Smith Jr.
2009-01-20  3:45                                       ` [PATCH] diff: Support diff.color-words config option Boyd Stephen Smith Jr.
2009-01-20  6:59                                         ` Junio C Hamano
2009-01-20 17:42                                           ` Markus Heidelberg
2009-01-20 17:58                                             ` Boyd Stephen Smith Jr.
2009-01-20 21:08                                             ` Johannes Schindelin
2009-01-21 10:27                                               ` Junio C Hamano
2009-01-21 19:37                                               ` Markus Heidelberg
2009-01-20 10:02                                         ` Johannes Schindelin
2009-01-20 16:52                                           ` Boyd Stephen Smith Jr.
2009-01-20 17:14                                             ` Johannes Schindelin
2009-01-20 17:09                                           ` Junio C Hamano
2009-01-20 17:28                                             ` Johannes Schindelin
2009-01-20 20:27                                               ` Junio C Hamano
2009-01-20 21:02                                                 ` Johannes Schindelin
2009-01-21  3:46                                           ` [PATCH] color-words: " Boyd Stephen Smith Jr.
2009-01-21  4:59                                             ` [PATCH] Change the spelling of "wordregex" Boyd Stephen Smith Jr.
2009-01-21  8:26                                               ` Johannes Schindelin
2009-01-21  9:22                                                 ` Thomas Rast
2009-01-21 15:33                                                 ` Boyd Stephen Smith Jr.
2009-01-21  8:25                                             ` [PATCH] color-words: Support diff.color-words config option Johannes Schindelin
2009-01-21 16:09                                               ` Boyd Stephen Smith Jr.
2009-01-21 10:27                                             ` [PATCH] color-words: Support diff.wordregex " Junio C Hamano
2009-01-20 14:38                                         ` [PATCH] diff: Support diff.color-words " Jakub Narebski
2009-01-20  9:58                                       ` [PATCH] Add tests for diff.color-words configuration option Johannes Schindelin
2009-01-20 16:34                                         ` Boyd Stephen Smith Jr.
2009-01-20 16:54                                           ` Johannes Schindelin
2009-01-16 16:11                         ` [PATCH take 3 0/4] color-words improvements Boyd Stephen Smith Jr.
2009-01-14 19:46     ` [PATCH] color-words: make regex configurable via attributes Thomas Rast
2009-01-14 20:12       ` Johannes Schindelin
2009-01-14 20:17         ` Thomas Rast
2009-01-14 22:26         ` [PATCH 1/4] color-words: fix quoting in t4034 Thomas Rast
2009-01-14 22:41           ` Johannes Schindelin
2009-01-14 22:26         ` [PATCH 2/4] color-words: enable REG_NEWLINE to help user Thomas Rast
2009-01-14 22:26         ` [PATCH 3/4] color-words: expand docs with precise semantics Thomas Rast
2009-01-14 22:26         ` [PATCH 4/4] color-words: make regex configurable via attributes Thomas Rast
2009-01-15  1:33           ` Johannes Schindelin
2009-01-15  1:43             ` Johannes Schindelin
2009-01-14 20:04     ` [PATCH take 3 0/4] color-words improvements Thomas Rast
2009-01-14 21:07       ` Johannes Schindelin
2009-01-14 22:37         ` Thomas Rast

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200901120947.13566.trast@student.ethz.ch \
    --to=trast@student.ethz.ch \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=junio@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).