On 9/5/06, Jens Seidel <jensseidel@users.sf.net> wrote:
> Hi,
>
> I have good news. I was able to create a small example which demonstrates
> the checksum error in Version 1.4.0 (Release Candidate 5).
> I attached a script which shows this error, here is the output:
>
> + mkdir /tmp/svn.test
> + cd /tmp/svn.test
> + svnadmin create repos
> + R=file:///tmp/svn.test/repos
> + svn co file:///tmp/svn.test/repos wc
> Checked out revision 0.
> + cd wc
> + mkdir trunk
> + mkdir trunk/project
> + echo 'file 1'
> + svn add trunk
> A trunk
> A trunk/project
> A trunk/project/file1.old
> + svn ci '-mInitial version'
> Adding trunk
> Adding trunk/project
> Adding trunk/project/file1.old
> Transmitting file data .
> Committed revision 1.
> + svn move '-mCreated file1' file:///tmp/svn.test/repos/trunk/project/file1.old file:///tmp/svn.test/repos/trunk/project/file1
>
> Committed revision 2.
> + svn copy '-mCreated branch' file:///tmp/svn.test/repos/trunk file:///tmp/svn.test/repos/branch
>
> Committed revision 3.
> + svn move '-mMoved trunk to trunk.old' file:///tmp/svn.test/repos/trunk file:///tmp/svn.test/repos/trunk.old
>
> Committed revision 4.
> + svn mkdir '-mCreated new trunk' file:///tmp/svn.test/repos/trunk
>
> Committed revision 5.
> + svn copy '-mRestore old trunk' -r 1 file:///tmp/svn.test/repos/trunk/project file:///tmp/svn.test/repos/trunk/src
>
> Committed revision 6.
> + svn up
> D trunk
> A trunk
> A trunk/src
> A trunk/src/file1.old
> A trunk.old
> A trunk.old/project
> A trunk.old/project/file1
> A branch
> A branch/project
> A branch/project/file1
> Updated to revision 6.
> + echo 'file 1 (new)'
> + svn add trunk/src/file1
> A trunk/src/file1
> + svn ci '-mAdded file1'
> Adding trunk/src/file1
> Transmitting file data .
> Committed revision 7.
> + echo 'file 1 (new)'
> + svn ci '-mManual sync against trunk' branch/project/file1
> Sending branch/project/file1
> Transmitting file data .
> Committed revision 8.
> + oldRev=7
> + cd branch
> + svn up -r 7
> U project/file1
> Updated to revision 7.
> + cd project
> + svn merge file:///tmp/svn.test/repos/trunk/project_at_3 file:///tmp/svn.test/repos/trunk/src_at_7
> D file1
> A file1
> A file1.old
> + svn update
> svn: Checksum mismatch for '.svn/text-base/file1.svn-base'; expected: 'e243bb39c844b3543a7726576c869caf', actual: '0ad777f8c28bdfc866607b87f653b5e8'
I have been looking at svn_wc_crawl_revisions2 which drives the
revision reporter for updates. I must assume the working copy isn't
marked as incomplete, so that the crawler reports the entire working
copy. It contains this segment:
if (report_everything)
{
/* Report the file unconditionally, one way or another. */
if (strcmp(current_entry->url, this_url) != 0)
SVN_ERR(reporter->link_path(report_baton, this_path,
current_entry->url,
current_entry->revision,
FALSE, current_entry->lock_token,
iterpool));
else
SVN_ERR(reporter->set_path(report_baton, this_path,
current_entry->revision,
FALSE, current_entry->lock_token,
iterpool));
}
But, in case of replaced paths, I think that the driver should call
reporter->delete_path() for replace-no-history and
reporter->link_path() for replace-with-history schedules.
There are some oddities wrt replaced paths a bit further down too (why
don't we ->link_path() for replace-with-history scheduled files
everywhere? Using set_path implies we want to receive updates from the
file in the current location...)
Opinions?
bye,
Erik.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Sep 6 13:59:56 2006