On Thu, Feb 02, 2012 at 03:15:29PM +0100, Steffen Daode Nurpmeso wrote:
> Henning Brauer wrote:
> > there aren't all that many repositories the size of ours out there.
>
> That's true.
> But no Henning, i don't believe it's that;
> you know, it's just that i don't have anything to say, because
> i have no knowledge about the internals of cvs(1).
>
> I always thought of this as some kind of misbehaviour in between
> OpenCVS and GNU cvs, because i would think of cvs(1) as something
> like this:
>
> cvs up .
> |
> read CVS/Entries
> |
> for those files with diff. timestamps, checksum file
> |
> send list [+ checksums] to server
> |
> server compare revision/timestamp/[checksum]
> - client unmodified: send diff (expected final checksum?)
> - client modified: send full file (if size < treshold),
> otherwise do blockwise checksumming etc. (i.e. rsync-like)
> [I don't really believe cvs(1) does the latter though.]
> |
> integrate diffs / replace locally modified files
>
> Wether cvs(1) does do some rsync-like block-checksumming for
> locally modified files or not, uploading 10% of the repositories
> size or more before any data is sent from the server just can't be
> correct anyhow. Even more for my usage case because there were no
> locally modified files at all.
>
> And also the problem goes away if you do specify files directly,
> as with a file glob, so it makes a difference wether you say
> $ cvs -fz9 up -PAC .
> or
> $ cvs -fz9 up -PAC *.*
> I don't remember wether i've used -d or not.
>
> So for me this turned out as either "look into the code,
> instrument some functions and try to fix it" or "turn over to
> cvsync".
> And GNU cvs is hard to look at, with a lot of comments which refer
> to some (numeric or so) error reports. But it would surely be
> interesting to know what is going wrong.
>
> --steffen
I like to say that long delays I have seen when using cvs had to do
with multiple different values of CVS/Root files in my local tree.
Those different entries can be created when doing a cvs up -d that
creates a new dir. If a cvs -d option is used at the same time, the
CVS/Root entry for tht dir wil be different than the other's.
The exact cause of the slowdown is not known to me. But when you are
switch repositories once in a while it's easy to get this case.
I repair this by find . -name Root | xargs rm and using a explicit cvs
root.
-Otto