git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: Junio C Hamano <junkio@cox.net>
Cc: Martin Koegler <mkoegler@auto.tuwien.ac.at>, git@vger.kernel.org
Subject: Re: [PATCH 2/7] gitweb: Support comparing blobs with different names
Date: Fri, 20 Apr 2007 22:49:08 +0200	[thread overview]
Message-ID: <200704202249.08464.jnareb@gmail.com> (raw)
In-Reply-To: <7vabx3z3tf.fsf@assigned-by-dhcp.cox.net>

Junio C Hamano <junkio@cox.net> wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
> 
>> Currently we have:
>>
>>   $ git diff -p HEAD^ HEAD -- gitweb/test/hardlink
>>   diff --git a/gitweb/test/hardlink b/gitweb/test/hardlink
>>   old mode 100644
>>   new mode 100755
>>
>> but
>>
>>   $ git diff -p HEAD^:gitweb/test/hardlink HEAD:gitweb/test/hardlink
>>
>> returns empty diff.
> 
> By "blobdiff", I understand you are talking about the "diff"
> link that appears on each path at the bottom of the commit view.

By "blobdiff" I mean "blobdiff" action (a=blobdiff), generated by
git_blobdiff subroutine.  The "diff" link that appears for each
path at the bottom of the "commit" view (in the whatchanged / difftree
part), and the "diff to current" link in the "history" view for files
both lead to "blobdiff" view.
 
> I think the bug is the way gitweb drives the core; it uses the
> latter form, when it has perfectly good information to run the
> former.  It's not like you have an UI that says "pick any path
> from any comit first; after you have picked one, pick the other
> arbitrary one; now we run compare them".  The UI says "Give me
> diff for this path in this commit".

_Currently_ gitweb uses git-diff-tree with path limiting when there
is enough information given, which means for all "blobdiff" links
currently generated by gitweb.  It uses git-diff for blobs only if
there is not enough information, e.g. for legacy URL; before moving
to generating diffs with git-diff-tree and git-diff, and all patches
were generated by external /usr/bin/diff, there were no 'hp' and 'hpb'
parameters which are needed for git-diff-tree.

But using git-diff-tree with path limiter to extract diff between
given blobs for "blobdiff" view is not without its caveats.  For example
for a rename you need both pre and post filenames in path limiter, 
otherwise you would get only "half" of rename diff, namely appropriate
creation diff.  And you can select only between blobs which have changed
from one commit (tree) to other; you cannot for example generate diff
between README at 'master' and INSTALL at 'next'.  Although why one 
would want such diff are beyond me... well, except for [overrated] 
completeness...

Martin wants to have ability to generate diff (blobdiff) between two
arbitrary blobs (two arbitrary files at arbitrary revisions). Earlier
patch if I remember correctly introduced yet another codepath; this one
tries to generate everything using one codepath, the git-diff one.
"Pick any path from any comit first; after you have picked one, pick the 
other arbitrary one; now we run compare them".

It adds new feature to gitweb I think almost nobody would use, namely
comparing arbitrary blobs (arbitrary files, with different names), and 
unifies diff generation in git_blobdiff (everything does use git-diff).
But it does so [currently] at the loss of information, namely ignoring 
all mode changes.  The mode changes can be done without lost of 
unification at the cost of performance of always having to do 
git-ls-tree, twice, or at the loss of having git_blobdiff quite 
complicated.

So from me it is slight Nak to this patch, at least unless "git diff 
<tree1>:<path1> <tree2>:<path2>" will take the information about file 
name and mode (permissions) from <tree1> and <tree2>, and included such 
information in extended git diff header.

-- 
Jakub Narebski
Poland

  reply	other threads:[~2007-04-20 23:17 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <437446e84f3aea71f74fea7ea66db4c1c326fb6b.1176659094.git.mkoegler@auto.tuwien.ac.at>
2007-04-15 20:46 ` [PATCH 1/7] gitweb: show "no difference" message for empty diff Martin Koegler
2007-04-18 13:52   ` Jakub Narebski
     [not found] ` <a209e0308fc80ef0623baef8dca49e61b7bafaab.1176659094.git.mkoegler@auto.tuwien.ac.at>
2007-04-15 20:46   ` [PATCH 2/7] gitweb: Support comparing blobs with different names Martin Koegler
2007-04-20 10:34     ` Jakub Narebski
2007-04-20 11:24       ` Junio C Hamano
2007-04-20 20:49         ` Jakub Narebski [this message]
2007-04-21 12:23           ` [PATCH 0/4] git-diff: use mode for tree:name syntax (was: Re: [PATCH 2/7] gitweb: Support comparing blobs with different names) Martin Koegler
2007-04-16 20:18   ` [PATCH 2/7] gitweb: Support comparing blobs with different names Martin Koegler
2007-04-29 21:35     ` Jakub Narebski
2007-04-30  5:27       ` Martin Koegler
     [not found] ` <201e30b3f69b40aec4f52ca16a22206f7db1c17d.1176659094.git.mkoegler@auto.tuwien.ac.at>
2007-04-15 20:46   ` [PATCH 3/7] gitweb: support filename prefix in git_patchset_body/git_difftree_body Martin Koegler
2007-04-27 10:55     ` Jakub Narebski
2007-04-28  8:22       ` Martin Koegler
     [not found] ` <083c27614411a8fd7edafef8f5cba91625c88453.1176659095.git.mkoegler@auto.tuwien.ac.at>
2007-04-15 20:46   ` [PATCH 6/7] gitweb: pass root directory as empty file parameter Martin Koegler
     [not found] ` <aba7141dc09643b4d6233f1bfb15677163991a27.1176659095.git.mkoegler@auto.tuwien.ac.at>
2007-04-15 20:46   ` [PATCH 7/7] gitweb: Adapt gitweb.js to new git_treeview calling convention Martin Koegler
     [not found] ` <85de402216e82cc0f220df9d27370a33538a232a.1176659094.git.mkoegler@auto.tuwien.ac.at>
2007-04-15 20:46   ` [PATCH 4/7] gitweb: Add treediff view Martin Koegler
2007-04-16 20:20   ` Martin Koegler
     [not found] ` <481946c2e3cff09ed4a623b1b20b9889666aedb0.1176659095.git.mkoegler@auto.tuwien.ac.at>
2007-04-15 20:46   ` [PATCH 5/7] gitweb: Prototyp for selecting diffs in JavaScript Martin Koegler
2007-05-18  8:49   ` Petr Baudis
2007-05-19  7:57     ` Martin Koegler
2007-05-19  8:27       ` Petr Baudis

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=200704202249.08464.jnareb@gmail.com \
    --to=jnareb@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=junkio@cox.net \
    --cc=mkoegler@auto.tuwien.ac.at \
    /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).