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

Re: Behavior of update command

From: Julian Foad <julianfoad_at_btopenworld.com>
Date: 2006-02-28 17:18:37 CET

Mark Phippard wrote:
>>I don't know Eclipse or Subclipse. Please could you explain in more detail the
>>sequence of Subversion operations that is involved.
>
> svn st -u equivalent is run to build up a list of local and remote changes
> which are presented in a tree-like structure.

OK, and I gather this is done in response to the user requesting "Let's
synchronise my WC with the repository, interactively letting me choose which of
my changes to commit and which to revert, and helping me to merge in all the
changes from the repository."

> User has options to run compares, update, commit, revert etc.
>
>
>>When you say "We have used
>>-r N" do you mean Subclipse chooses a particular revision number (which one?)
>
> User selects some files, or perhaps a common parent folder and chooses
> update. We run:
>
> svn up -r N
>
> Where N = highest revision number of selected items

I take it you mean the highest revision number that any of these items have
reached in the repository. In its effect on the selected files, this is
equivalent to choosing N=HEAD, because by definition no changes have occurred
to these items between then and HEAD.

But no, from your next paragraph, you can't mean that, because then N would be
high enough to include any recent commits to those files. So the highest of
what revision numbers is chosen?

> If a user does a commit after populating the view we have not done anything
> to refresh the view, because svn st -u is fairly expensive. The problem is
> that if they select say the root folder and run update, then the value of N
> is always less than the value they just committed. So the changes to any
> files they committed are essentially backed out of the working copy.

Right. Yes. Naturally. If you want to keep the local changes, then you
either have to keep them as local changes, or commit them, but if you commit
them, then they are going to exist at a revision greater than N so you will
have to synchronize to a revision greater than N.

It seems to me this is a conceptual problem. You need to think about what is
the intended meaning of selecting a sub-tree for a long-running "synchronize"
procedure, in terms of what the user is expecting to get at the end of it. It
is simply not possible to say that we will synchronize a tree to revision N
while allowing the user to perform commits that will take one of the files to
revision N+2 (say), because the same file may have been changed by someone else
in revision N+1.

It seems to me that this procedure is designed to work with
individually-versioned files, and probably needs to be redesigned a bit to work
with a whole-tree versioning system. In thinking about and describing a
whole-tree version of the human-level procedure and result that you are trying
to achieve, you will probably find that it maps naturally onto the Subversion
operations that are available.

I certainly don't mean this as a brush-off type of response. If you really
need to use Subversion in a manner as close as possible to the file-at-a-time
model, I dare say you'll find a way that works tolerably well in general, but I
doubt it will be very satisfactory. Regardless of the operations that
Subversion allows, what result can you desire in the N+2/N+1 case I mentioned
above?

(Thanks for the further explanation and history.)

- Julian

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Feb 28 18:53:12 2006

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

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.