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

Re: Blame behaviour change in 1.9

From: Philip Martin <philip.martin_at_wandisco.com>
Date: Fri, 12 Jun 2015 15:55:26 +0100

Philip Martin <philip.martin_at_wandisco.com> writes:

> Philip Martin <philip.martin_at_wandisco.com> writes:
>
>> 1.9 has a more accurate svn_fs_contents_changed() that doesn't report as
>> many false positives. This means that some (or all?) of the -g revisions
>> reported by svn_repos_get_file_revs2() do not include a textdelta that
>> was included by 1.8. It appears at some level the 1.9 client interprets
>> the revision without a textdelta as being the same as a revision with a
>> textdelta that changes nothing, while the 1.8 client relies on the
>> missing textdelta. If I force the 1.9 server to send textdeltas between
>> identical texts the 1.8 client then behaves as the test expects.
>
> Looking at r1573111
>
> /* Check if the contents *may* have changed. (Allow false positives,
> for now, as the blame implementation currently depends on them.) */
> /* Special case: In the first revision, we always provide a delta. */
> if (sb->last_root)
> - SVN_ERR(svn_fs_contents_changed2(&contents_changed, sb->last_root,
> - sb->last_path, root, path_rev->path,
> - FALSE, sb->iterpool));
> + SVN_ERR(svn_fs_contents_different(&contents_changed, sb->last_root,
> + sb->last_path, root, path_rev->path,
> + sb->iterpool));
> else
> contents_changed = TRUE;
>
> That looks like an error since svn_fs_contents_different() passes TRUE
> for strict, not FALSE. I think the intention was that r1573111 should
> call svn_fs_contents_changed().
>
> However the implementation of root_vtable_t.contents_changed() has
> changed in 1.9 and it no longer reports as many changes as it used to
> report so even replacing the _different() call with a _changed() call
> does not solve the problem. The only way I can see to fix the problem
> is to simply ignore/remove the call altogether and to hard-code
> contents_changed to TRUE.

This revision is the client-side magic:

  r1570936 | stefan2 | 2014-02-22 22:27:06 +0000 (Sat, 22 Feb 2014) | 10 lines

  Fix the blame -g implemenation to no longer depend on false positives
  in the file contents change detection.

A 1.8 server works with all clients whether they have the fix or not. A
1.9 server only works when the client has the fix.

That client-side fix is only in 1.9, so at the moment, only 1.9 clients
work with 1.9 servers.

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*
Received on 2015-06-12 16:55:58 CEST

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