threads / discuss / 19898

git diff --chunk-pickaxe?

Subject: git diff --chunk-pickaxe?

## tl;dr

4 messages between Jun 22, 2009 and Jun 22, 2009.

replies: 3people: 3as markdown or json

Nguyen Thai Ngoc Duy· Jun 22, 2009, 12:07 UTC · lore
Hi,

Another use case for Git. This time for .po translations. In GNOME, .po files are usually updated with intltool, then translations are updated manually by translators. Intltool updates comments too and makes it extremely hard to review translations, something like this:

-#. http://en.wikipedia.org/wiki/HD_DVD
 #: ../data/nautilus.xml.in.h:8
+#. http://en.wikipedia.org/wiki/HD_DVD
 msgid "Blank HD DVD Disc"
 msgstr "Đĩa HD DVD trắng"
-#. http://en.wikipedia.org/wiki/Blu-ray_Disc
 #: ../data/nautilus.xml.in.h:10
+#. http://en.wikipedia.org/wiki/Blu-ray_Disc
 msgid "Blu-Ray Video"
 msgstr "Phim Blu-Ray"
-#. http://en.wikipedia.org/wiki/Red_Book_(audio_CD_standard)
 #: ../data/nautilus.xml.in.h:12
+#. http://en.wikipedia.org/wiki/Red_Book_(audio_CD_standard)
 msgid "Compact Disc Audio"
 msgstr "Đĩa nhạc Compact Disc"

What I want is only show diff chunks that add or remove a line that does not start with '#', something like a chunk-level pickaxe. Any pointer where to start? It looks like I can start from xdi_diff_outf(). Just wanted to make sure I won't follow a wrong way from the beginning.

-- 
Duy
Jakub Narebski· Jun 22, 2009, 12:27 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: git diff --chunk-pickaxe?

Nguyen Thai Ngoc Duy wrote:
Show 5 quoted lines
> What I want is only show diff chunks that add or remove a line that
> does not start with '#', something like a chunk-level pickaxe. Any
> pointer where to start? It looks like I can start from
> xdi_diff_outf(). Just wanted to make sure I won't follow a wrong way
> from the beginning.
Perhaps you can use textconv here?
-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
René Scharfe· Jun 22, 2009, 12:48 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: git diff --chunk-pickaxe?

Nguyen Thai Ngoc Duy schrieb:
Show 5 quoted lines
> What I want is only show diff chunks that add or remove a line that
> does not start with '#', something like a chunk-level pickaxe. Any
> pointer where to start? It looks like I can start from
> xdi_diff_outf(). Just wanted to make sure I won't follow a wrong way
> from the beginning.

How about creating an external diff driver instead? It could remove all lines starting with '#', or normalize such lines to just '#' in case you need the line numbers to remain unchanged, then write the filtered result into temporary files and compare them with diff. Perhaps this is sufficient for your purposes? It should be easier to implement.

(Keywords: GIT_EXTERNAL_DIFF, --ext-diff, diff.<name>.command)
René
Nguyen Thai Ngoc Duy· Jun 22, 2009, 13:04 UTC · re: René Scharfe · lore

Re: git diff --chunk-pickaxe?

On Mon, Jun 22, 2009 at 10:48 PM, René Scharfe<rene.scharfe@lsrfire.ath.cx> wrote:

Show 12 quoted lines
> Nguyen Thai Ngoc Duy schrieb:
>> What I want is only show diff chunks that add or remove a line that
>> does not start with '#', something like a chunk-level pickaxe. Any
>> pointer where to start? It looks like I can start from
>> xdi_diff_outf(). Just wanted to make sure I won't follow a wrong way
>> from the beginning.
>
> How about creating an external diff driver instead?  It could remove all
> lines starting with '#', or normalize such lines to just '#' in case you
> need the line numbers to remain unchanged, then write the filtered
> result into temporary files and compare them with diff.  Perhaps this is
> sufficient for your purposes?  It should be easier to implement.

Yep. Jakub mentioned textconv privately, which should be enough for review purpose. However I'm not completely satisfied with it. Let's say I'm done review and happy with most of the translated strings. I'd like to commit those strings only (whether comments are committed does not really matter because I can filter them out with textconv). If I start "git add -p" up, I'm in trouble again.

-- 
Duy

← back to recent threads