[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Merging and history logs

From: Robert Dailey <rcdailey_at_gmail.com>
Date: Thu, 21 Aug 2008 11:45:04 -0500

Hi everyone,

I'm posting this to both the TortoiseSVN developer's mailing list as
well as the Subversion users mailing list because I feel this topic is
important enough that both communities may wish to express their
opinions on the matter.

To best explain what I have in mind, first let me begin with a
scenario. Suppose there is a project that is currently in production,
who's source code is in a subversion repository at
svn://myserver/repo/project/trunk. All developers working on the
project mostly work directly from trunk. However, in the case where a
specific programmer wants to work on a very heavy feature that will
take a week to complete, he/she makes a branch at
svn://myserver/repo/project/branches/branch1. During the existence of
'branch1', several commits are made. For the purposes of this example,
let's say there's a hefty list of 200 commits, each with a very
extensive commit log explaining the purpose for each commit along with
very explicit details on the changes included in the commit (bug
fixes, features, refactoring, etc). When the feature is complete, now
the programmer wants to merge "branch1" back to trunk.

After merging the 200 revisions in the branch back into trunk, the
programmer is ready to commit those changes. However, the programmer
is faced with a very difficult task: creating a log message for the
commit that contains the local modifications that was in the "branch1"
branch. Ideally, this would be the concatenated list of history logs
of all the 200 revisions made in the feature branch. However, since
there is nothing to automate this task, the programmer simply says
"This commit implements feature X______X ".

A month later, we have progressed much further into the project and
during that time a cleanup phase of the repository has happened.
Amongst other things, this cleanup phase includes going through the
branches for the project and deleting the ones that are no longer
being used, which were branches for features already implemented and
merged over. After this cleanup phase has happened, I am curious to
see what specific changes were made in that new feature that was
merged in a month ago from "branch1". Well, my first and most typical
attempt at this is to "show log" on trunk. Well, this really doesn't
give me much, as I simply see the arbitrary log message that the
programmer merging in that feature provided that does not explain the
details of the merge. As a second attempt, I look in the specific
changes for that checkin, but I see nothing that tells me which
location in the repository these files were merged from (As this would
indeed be the case if there were no added or removed files, only
modified). I would then, as a third attempt, have to contact the
programmer that implemented this feature and merged in the changes and
ask him/her where the branch is located from which the changes came
from. Assuming this programmer hasn't gotten hit by a bus, now I have
another challenge. That branch was deleted a long time ago since it
was no longer being used, so now I have to show log on "branches" and
use cute search terms to try to find it again and then, you guessed
it, I'm faced with doing more "show log" commands through TortoiseSVN.

The point I'm trying to make here is that the process of figuring out
the details of what happened during a feature branch from the
perspective of the trunk (the merge target) is very tedious and
difficult. In the example I previously gave, what I would have been
really interested in is reading each of the commit log messages for
each of the 200 commits made during that feature branch without too
much effort. In other words, I would love for all 200 commit log
messages in that feature branch to be concatenated and then made
presentable, so it could be used as the commit log message in "trunk"
where the entire contents of that feature branch will be committed to.

As far as I know, there is no way to do this. There might be some cute
hook somewhere that does this, but if so I have not found one. Perhaps
there is a secret command line argument for this that I don't know
about either. In the particular project I'm involved in, we have
programmers that work out of branches on a daily basis (Not just for a
particular drawn-out feature) and always merge changes to trunk from
feature branch. So basically, our log message list for trunk is
nothing more than "Merged in this" and "merged in that". It's very
unreadable and unmanageable.

Until I find out that there is actually already a way of doing this,
what I'm proposing here is a new feature. I don't care if it is an
actual C++ implementation or a hook script, but I think it should be
available to Subversion/TortoiseSVN by default. A feature to
concatenate all of the log history of a branch that is being merged
into trunk would be ideal, and would make the trunk a lot more
readable and useful from the perspective of "show log".

Please do express your opinions on this. I want to apologize if this
issue has already been addressed. Again I want to emphasize that I am
not aware of a specific solution to this problem. This sounds like a
great idea to me and sounds like it's well worth the time to
implement. I thank everyone for taking their time to read this.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: users-help_at_subversion.tigris.org
Received on 2008-08-21 18:45:42 CEST

This is an archived mail posted to the Subversion Users mailing list.