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

Re: Interrupting an update after change of externals causes corrupt working copy

From: Johan Corveleyn <jcorvel_at_gmail.com>
Date: Thu, 30 Sep 2010 22:03:46 +0200

Hi devs,

As per Daniel Shahaf's suggestion, I'm continuing this discussion on
the dev list. See the previous mails in this thread on the users list
for some context (or
http://svn.haxx.se/users/archive-2010-09/0406.shtml). I'll summarize
below.

This issue reproduces with 1.6.12 as well as with trunk. It would be
interesting to know the WC-NG folks take on this.

Note: the subject line may be slightly exaggerated, as there seems to
be a good workaround to repair things (at least in case of
intra-repository externals).

Summary
-------

Steps to reproduce:
1) Change a directory external definition.

2) svn update

3) Interrupt (Ctrl-C) while it is processing the "switch" of the
external. I did this after some files of the external were already
Updated.

Result:
svn status now shows a lot of files and directories as S (switched),
and some directories missing. Running svn info on the switched
files/dirs shows that they still point to the old external location.

Running svn update again fixes the "missing" dirs, but not the
switched nodes. "svn revert" does nothing (which is logical: there are
no local changes). "svn cleanup" does nothing.

Workaround:
Running "svn switch $new_url $external_dir" brings everything back to normal.

So:
- Wouldn't it be better if "svn update" could repair this (as in
"resuming the interrupted update from before")?
- Should I file an issue for this?
- I'm not sure how all this plays out with externals from remote
repositories (haven't tested this). With or without a change of the
remote location. Would an "svn switch --relocate" fix things in the
same way then?

Note: this can be easily reproduced with any large (public) repository
(I think). Just define some externals in working copy only (no need to
commit), update, change external definition (no need to commit),
update, interrupt.

Cheers,

-- 
Johan
Received on 2010-09-30 22:04:29 CEST

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