You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Luke Adamson <lu...@mac.com> on 2006/09/06 06:03:08 UTC

How to svn log across all branches?

I'd like to see the commit logs for a given file, across _all_  
branches of development throughout the life of the repository.  This  
doesn't appear to be easy (or obvious), and a quick glance through  
the source code suggests this may not be possible without lots of  
krufty hacking.

Here's my somewhat generalized use case:  I want to know, "when was  
feature X changed to behave differently?"  I know which file is  
associated with feature X (say, feature-X.c), and if the developer  
who made the change followed protocol, the commit log will contain a  
concise description, such as: "Changed feature X to A instead of B,  
per someone's request."  In theory, all I need to do is "svn log  
feature-X.c" and glance through the commit logs until I find  
something relevant, at which point I can diff and blame 'till the  
cows come home.

_Except_, that in my case, most of the commit messages for feature- 
X.c (on the trunk), say things like: "Merging down from branch 123",  
and "Merging down from branch 456".  With many branches handling  
concurrent, overlapping development initiatives over many years,  
finding the branch where the change in question was made originally  
will be difficult.  Deployments are typically done off the head, so  
everything trickles there eventually, but the commit messages  
associated with those merges don't re-explain every change included  
in the merge.

When evaluating "svn log", Subversion appears to be entirely path- 
oriented (including the trunk or branch-prefix), such that all  
changes logged are only for those on the "current" branch of the file  
you're logging.  Even if you try logging from revision 0 to head, it  
still shows only those changes which were committed on the "current"  
branch/path of the file (apologies if my terminology is confusing).

Since branching is merely a cheap copy, and checkouts are piecing  
files together from potentially many past branches, I assume  
Subversion has an internal file ID associated with each file,  
somewhat orthogonal of path.  If that's correct, I would expect it  
would be easy enough to log all changes associated with a file,  
regardless of what branch it was on for the invocation of svn log  
(perhaps with some flag to indicate "deep logging").

It's fairly easy to get this (useful) behavior with CVS, so possibly  
Subversion supports it and I'm just missing something obvious?

I crawled through the source (first time), and found  
svn_repos_get_logs3 (among other related calls), but it seems to be  
very path-oriented.  It wasn't clear that it could even be extended  
to grab histories(?) for all revisions of a file across all branches  
upon which it exists (existed).

So, does anyone know if Subversion does what I'm looking for?  It all  
really boils down to something simple: How do you log what changed on  
a file if you're not sure on what branch to go looking for the change  
(chicken and egg)?

If not, does anyone know if the underlying architecture would easily  
support such an enhancement?  I can't imagine how the checkout  
process can piece together deltas from ancestor branches without  
problems, and yet the logging process has no access to ancestor  
branch changes.

Thanks in advance for your suggestions and insight.
---
	Luke

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org

Re: How to svn log across all branches?

Posted by Garrett Rooney <ro...@electricjellyfish.net>.
On 9/6/06, Luke Adamson <lu...@mac.com> wrote:

> So, does anyone know if Subversion does what I'm looking for?  It all
> really boils down to something simple: How do you log what changed on
> a file if you're not sure on what branch to go looking for the change
> (chicken and egg)?
>
> If not, does anyone know if the underlying architecture would easily
> support such an enhancement?  I can't imagine how the checkout
> process can piece together deltas from ancestor branches without
> problems, and yet the logging process has no access to ancestor
> branch changes.

No, it doesn't support it at the moment.  See the following for details:

http://svn.collab.net/repos/svn/trunk/notes/schema-tradeoffs.txt

There are various ways this could be made easier by making changes to
the back end, but it's not something that's currently made possible by
the underlying architecture of the filesystem.

-garrett

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org