Publishing on Monticello
Avi Bryant
avi.bryant at gmail.com
Sun Sep 18 23:27:39 UTC 2005
On Sep 18, 2005, at 3:32 PM, Colin Putney wrote:
>
> On Sep 18, 2005, at 3:56 PM, Avi Bryant wrote:
>
>
>> Sure. Daniel's currently tweaking MC's merge behavior to be more
>> like what Bert's MCConfigurations do, to make it a better default
>> choice: if the local version is an unmodified ancestor or
>> descendant of the version you're merging in, then there's no need
>> to treat it as anything but a load. Given that, I would suggest
>> changing the names for the two operations to "Revert" and
>> "Upgrade", which are hopefully more self-explanatory.
>>
>
> Hang on now. I don't think we want to be quick to change the names
> of things.
>
> The names "load" and "merge" were carefully chosen, have well
> defined meanings, and have been in use for several years now in the
> Squeak community. They also match the terms used in the wider
> Smalltalk and (to some extent) source control communities. Even if
> we can convert certain merges into loads, that's an optimization.
> We needn't change the UI to accommodate it.
What I'm really talking about isn't so much optimization or even
names, but how we map possible scenarios to operations in the UI.
Let's look at some possible use cases:
a) I am a user, and not a developer, of a package. I haven't
modified it in my image. I want to be using a later version.
b) I am a user of a package. I have made some minor changes in my
image. I want to be using a later version, but not to lose my local
changes.
c) I am a user of a package. I have made some minor changes in my
image. I want to use a later version and discard my local changes,
since I believe they are now unnecessary.
d) I am developing a package together with some others. I haven't
modified the package in my image, but I want to be using some recent
changes from someone else.
e) I am developing a package together with some others. I have
modified the package in my image, and would like to test how these
changes integrate with recent changes made by others.
f) I am a developer or harvester and I have been using an
experimental version of a package. I have finished evaluating these
changes, and would now like to switch to an older version, or a
different experimental version.
As it stands, we expect people to use Load for a, c, d, and e. We
expect people to use Merge for b and d. Note, however, that the
basic intent behind a and b is the same (user wanting to update a
package), as is the basic intent behind d and e (developer wanting to
use changes from collaborator). The major difference between each
pair is whether or not local changes have been made: the user or
developer has to manually check the modified flag and make the choice
to Load or Merge based on that. I'm not particularly concerned about
this for developers: they should be attuned to things enough to
realize whether d, e, or f applies. But we've seen several cases of
users not knowing that this choice needed to be made, getting
accustomed to using Load every time, and then being unhappy with the
results when they have local changes.
What I'm proposing is that we change the partitioning so that there's
one operation (which I was proposing we call Upgrade) that gets used
in cases a, b, d, and e, and another operation (which I was proposing
we call Revert) to be used in cases c and f.
Or to put it another way, I would like to change the default
operation - the one users and tools are most likely to use and be
familiar with - from Load to Merge. The main requirement to allow us
to do that is to make Merge as simple to use as Load in the cases
where it is semantically equivalent, rather than always popping up a
window, changing the ancestry, and marking the modified bit.
Avi
More information about the Squeak-dev
mailing list
|