From: Jakub Narebski <jnareb@gmail.com>
To: git@vger.kernel.org
Subject: Re: Following renames
Date: Sun, 26 Mar 2006 05:52:17 +0200 [thread overview]
Message-ID: <e05354$cc9$1@sea.gmane.org> (raw)
In-Reply-To: 7virq1sywj.fsf@assigned-by-dhcp.cox.net
Junio C Hamano wrote:
> Petr Baudis <pasky@ucw.cz> writes:
>
>> An obvious solution would be to have git-diff-tree --follow which
>> updates its interesting path set based on seen renames, and now that
>> I've written about non-linear history, it's obvious that it's incorrect.
>> The other obvious way to go is then to add rename detection support to
>> git-rev-list, and it's less obvious that this is a dead end too - I
>> didn't inspect the code myself yet, but for now I trust Linus in [2]
>> (I didn't quite understand the argument, I guess I need to sleep on it).
>
> I'd have to sleep on how the core side can help Porcelains, but
> I think it is a good thing that you, one of the most vocal
> advocate on the list for doing rename recording, are thinking
> about this issue and probably would look into rev-list.c soon.
>
> Looking at the evolution of rev-list.c file itself was a good
> exercise to realize that rename tracking (more specifically,
> having whatchanged to follow renames) is not such a useful
> thing (at least for me).
[...]
> What this suggests is that switching the set of paths to follow
> while traversing ancestry chain needs to depend on which part of
> the original file you are interested in. Marking "this commit
> renames (or copies) file A to file B" is not that useful -- for
> that matter, detecting at runtime like we currently do is not
> better either. If a file A and file B were cleaned up and
> merged into a single file C, which is in the tip of the tree,
> which one you would want whatchanged to switch following depends
> on which part of the C you were interested in.
>
> Unless you are interested in the _entire_ contents of the file,
> that is. Then tracking or even recording renames becomes
> useful, but that is a special case.
>
> That is the reason I am not so enthused about recording renames.
> I think the time is better spent on enhancing what pickaxe tries
> to do (currently it does very little), which I hinted in a
> separate message late last night.
I think one of the better ideas/suggestions about *recording* filenames was
in the "impure renames / history tracking" thread
http://marc.theaimsgroup.com/?l=git&m=114122175216489&w=2
<Pine.LNX.4.64.0603011343170.13612@sheen.jakma.org>
about adding *auxiliary* (helper) information about renames in commits. I'm
not sure about recording parts of the file that were moved or copied. That
might have been left for runtime detection in the likes of pickaxe.
As it would be helper-only information it would ensure backwards
compatibility (older versions would ignore additional information) and
forward compatibility (newer version would fallback to current runtime
renames tracking/detection).
To be generic, I think that the command to record rename/copy or
copy'n'paste/cut'n'paste would take set of source files (one or more,
unless we want to have an option to mark the file as new supressing any
superficial similarities, in which case it would be zero or more), and set
of destination files (one or more, with files which were in source repeated
it was copy, not repeated if it was rename or cut'n'paste; unless we want
to record deletions also, in which case it would be zero or more files).
Such information can be I guess easily entered by user... if one remembers
to record rename/cut'n'paste/etc. that is. Perhaps if it were a way to easy
add such information later, for example confirming detected
renames/relationships during merge... It would be much more difficult for
user to enter the ranges unassisted.
What worries me is that such information, recorded in "own fields to the GIT
revision messages" (in commits) can be used only if you track the ancestry;
it doesn't help if you have only have two or more revisions and not build
relationship graph between them. But maybe I worry unnecessary...
BTW. following renames is important not only in examining file [contents]
history, in the likes of diff, whatchanged, annotate/blame, pickaxe but
also for merges.
References:
===========
* http://marc.theaimsgroup.com/?l=linux-kernel&m=111314792424707
* http://article.gmane.org/gmane.comp.version-control.git/217
* http://marc.theaimsgroup.com/?l=git&m=114123702826251
* http://marc.theaimsgroup.com/?l=git&m=114315795227271
--
Jakub Narebski
Warsaw, Poland
next prev parent reply other threads:[~2006-03-26 4:10 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-26 1:49 Following renames Petr Baudis
2006-03-26 2:49 ` Junio C Hamano
2006-03-26 3:52 ` Jakub Narebski [this message]
2006-03-27 6:00 ` Paul Jakma
2006-03-26 10:52 ` Petr Baudis
2006-03-26 10:55 ` Petr Baudis
2006-03-26 16:08 ` Timo Hirvonen
2006-03-26 16:43 ` Linus Torvalds
2006-03-26 16:31 ` Jakub Narebski
2006-03-26 16:46 ` Linus Torvalds
2006-03-26 17:10 ` Jakub Narebski
2006-03-26 18:10 ` Linus Torvalds
2006-03-26 19:22 ` Marco Costalba
2006-03-26 22:23 ` Linus Torvalds
2006-03-27 5:47 ` Marco Costalba
2006-03-27 6:46 ` Junio C Hamano
2006-03-27 8:07 ` Linus Torvalds
2006-03-27 11:19 ` Marco Costalba
2006-03-27 11:30 ` Johannes Schindelin
2006-03-27 16:52 ` Linus Torvalds
2006-03-27 11:55 ` Marco Costalba
2006-03-27 12:27 ` Andreas Ericsson
2006-03-27 6:55 ` Jakub Narebski
2006-03-27 7:40 ` David Lang
2006-03-27 7:53 ` Jakub Narebski
2006-03-26 3:19 ` Linus Torvalds
2006-03-26 7:35 ` Ryan Anderson
2006-03-26 21:09 ` Petr Baudis
2006-03-26 10:07 ` Petr Baudis
2006-03-26 10:34 ` Fredrik Kuivinen
2006-03-26 16:33 ` Linus Torvalds
2006-03-26 19:14 ` Petr Baudis
2006-03-26 20:31 ` Petr Baudis
2006-03-26 22:22 ` Linus Torvalds
2006-03-26 22:31 ` Petr Baudis
2006-03-26 22:43 ` Junio C Hamano
2006-03-26 23:10 ` Linus Torvalds
2006-03-27 7:30 ` Junio C Hamano
2006-03-26 23:09 ` Linus Torvalds
2006-03-26 23:26 ` Petr Baudis
2006-03-27 21:59 ` 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='e05354$cc9$1@sea.gmane.org' \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.