On 23.06.2014 10:54, Julian Foad wrote:
> Daniel Shahaf wrote:
>
>> One of my colleagues ran bisect but forgot to update back to HEAD after
>> finishing it.  Another forgot to run 'svn up' in the morning before starting
>> to edit a file, and later got conflicts
>>
>> Both of these user errors might have been prevented if their client had
>> advised them (during the bisect, for Alice; in the morning, for Bob) that
>> their working copy's BASE tree differs from HEAD.  (That is, that 'svn st
>> -u' and 'svn diff --summarize -r HEAD' were non-empty.)
>>
>> Does this sound useful?  Would library changes be needed to allow such
>> functionality to be developed?
>>
>> I think the library changes will be straightforward: we would just need
>> to have a "dirty" bit, clear it upon update-to-HEAD, and set it upon
>> backdate and upon "Has HEAD changed?" checks initiated by the 
>> libsvn_client consumer.
> The proposed library functionality is, roughly, caching of "base-version != 
> head-version", for each WC path or rather each repos path represented in the 
> WC? (A name such as "out-of-date" or "not-youngest" may be better than 
> "dirty".)
>
> That sounds potentially reasonable.
>
> With just a simple query, it would be enough to solve "Alice"'s problem 
> (forgot to update back to head after bisecting).
>
> It would not by itself solve "Bob"'s problem (forgot to run 'svn up' in the 
> morning). For that, you would need periodic monitoring for new changes in the 
> repo, which is comparable to running "svn up" or "svn st -u".
>
>> Clients (e.g., $EDITOR plugins) could then be configured to request that
>> check periodically --- say, once per N hours per working copy.  Perhaps
>> an editor-agnostic daemon that monitors *all* working copies in one's
>> homedir could be developed, too.
> Yes, I suppose this would be useful.

And I have to point out that we already provide all the tools and APIs
that such plugins and/or daemons need.

Not to put too fine a point to it, the fact that you can edit an
'out-of-date' file is an intentional part of Subversion's design. As is
the promise that the client won't go cap-in-hand to the server for every
little detail.


>> (The "dirty" bit would be, more or less, a cache of "Last Changed Revision"
>> of ${local_relpath}@HEAD; it'll have to account for deletions, renames, and
>> replacements, though.)
> I have thought before of something very similar that may also be useful.
>
> In the simple and fairly common case where a user commits a change in a 
> tree where no other commit has been made since the user's last update, 
> this commit always creates a superficially mixed-rev WC that is not 
> really mixed-version -- that is, no versioned paths have any changes in 
> the repo between the oldest and newest recorded base revisions.
>
> If we cache the "Next Changed Revision" -- that is, the next revision after 
> Base in which the path was changed in the repo (or the fact that there are no 
> changes between Base and a given younger revision) -- then we can determine 
> when a superficially mixed-rev WC is in fact pointing at the same version of 
> each object.
>
> The check for "can't merge into a mixed-rev WC", for example, could be 
> relaxed to "can't merge into a mixed-version WC, but you can merge into a 
> superficially mixed-rev WC".

It would IMO be a /lot/ better to extend the protocol so that the final
response to a commit contains the list of directories for which an 'svn
update' to the committed revision is a no-op. That would eliminate most
of the workflows that create mixed-revision working copies, the notable
exception being not committing from the root of the WC.

And as for merging, I believe we've already agreed that the
single-revision constraint is more arbitrary; it reflects a shortcoming
of our merge algorithm, not a limitation of the data model.


Bottom line, I object to apparently useful hacks that are likely to be
outdated soon, but that we'll still have to maintain indefinitely.


-- Brane

-- 
Branko Čibej | Director of Subversion
WANdisco // Non-Stop Data
e. br...@wandisco.com

Reply via email to