On Thursday 24 December 2009 14:23:25 Bert Huijben wrote:
> Currently on a 'svn update' the client receives a list of files from the
> repository that are updated with the information on how they are updated.
>
> E.g. if you call 'svn update' on a working copy with 10000 files, you
> receive changes for just two files.
>
> Then these files are updated and their keywords (if there are any)
> rewritten based on the new information.
>
> With the new keyword you would need an additional step to walk all the
> other files, to check if they have your new keyword in the svn:keywords
> property, which is 10000-2 file opens in the current code and 10000-2
> database reads in WC-NG.
>
> And if the property for a file contains this setting the file must be
> rewritten with the new expansions.
>
> Looking at the performance measurements for 1.6.x I performed some time
> ago, this would be a major slowdown on Windows. (Probably makes the update
> time 3 to 5 times longer by just opening the property files, if you have a
> lot of files with any keyword set).
In pratice there are usually only very few files in a repository which would
use such a global repository revision keyword. So to avoid such slowdowns on
various operations, I would store a list of files with that keyword as global
property (e.g.: "svn:globalkeywords"), not by properties on a per file basis.
E.g.:
svn propset svn:globalkeywords "GlobalRevision: trunk/version.h,
GlobalRevision: branches/whatever/foo.cpp"
Where "GlobalRevision" might be the new keyword to be substituted by the new
global repository revision in the listed files.
So the update command would then just retrieve that global property and if it
exists and contains a valid list of global keywords and files, it will then
retrieve the latest repository revision and perform the substitution on the
WC. Should be a cheap operation, no?
CU
Christian
Received on 2009-12-24 15:43:01 CET