Julian Foad <email@example.com> writes:
> C. Michael Pilato wrote:
> > Julian Foad <firstname.lastname@example.org> writes:
> >>"svn status -u gone-dir" shows children of gone-dir as normal. They
> >>should have "!" status. (gone-dir exists in repository but has been
> >>deleted from the disk.)
> > Closed, WONTFIX. If gone-dir is missing from disk, we have no idea
> > a)
> > what revision that directory was at, b) that it even had children, and
> > c) what those children were. Without that knowledge, we can't presume
> > that children we learn about from the server also happen to be
> > children we used to have on disk but not do not (which is what
> > "missing" means).
> Er, well, in that case, how can it be correct that "svn status -u"
> lists all those children that it should know nothing about? Should
> it not either stop recursing or, if it does actually know about
> them, then show them as missing?
svn status -u isn't showing children of the missing thing. It's
showing children of an object in the repository that happens to have
the same name and children as the missing thing (in your particular
test-case). I *know* that reads like a cop-out answer, but trust me
-- I'm not trying to pull one over on you. Let me see if I can
demonstrate the difference:
### Checkout a fresh Greek repository, and cd into that working copy.
$ svn co file://`pwd`/greek-repo wc
Checked out revision 1.
$ cd wc
### Now, remove A/D/H/chi and A/D/H/omega, and commit those removals.
$ svn rm A/D/H/chi A/D/H/omega
$ svn ci -m 'remove chi and omega'
Committed revision 2.
### Update my working copy to HEAD (revision 2), but then backdate
### A/D/H to revision 1
$ svn up
At revision 2.
$ svn up -r1 A/D/H
Updated to revision 1.
### Now, oops! I removed A/D/H (at revision 1, remember) from disk
$ rm -rf A/D/H
### Now I run status.
$ svn st -u A/D/H
! * ? A/D/H
Status against revision: 2
Now, the first thing to notice is that only H is reported as missing.
Why? Because this is the only thing we actually know about that is
missing. There is *no record* in the working copy that we had H at
revision 1 before its untimely demise. It could have been at any
revision. If this display showed chi and omega as missing, well that
would just be wrong, because they weren't supposed to be in the
So, what does 'svn status -u' really mean? It means, quite literally,
show me the union of a) my working copy status and b) what I would
see modified if I ran 'svn update' right now. And indeed, this is
what I see. Running just 'svn status A/D/H' shows just this missing
$ svn st A/D/H
And what would get touched if I updated right now? Well, let's see:
$ svn up A/D/H
Updated to revision 2.
As you can see, the union of these two operations is exactly what 'svn
st -u A/D/H' shows.
Does that make sense to you?
To unsubscribe, e-mail: email@example.com
For additional commands, e-mail: firstname.lastname@example.org
Received on Thu Oct 9 05:56:05 2003