monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Monotone-devel] [PATCH] mtn commit without -b and mtn branch


From: Nathaniel Smith
Subject: Re: [Monotone-devel] [PATCH] mtn commit without -b and mtn branch
Date: Wed, 7 Mar 2007 15:28:37 -0800
User-agent: Mutt/1.5.13 (2006-08-11)

On Wed, Mar 07, 2007 at 10:26:55PM +0100, Richard Levitte - VMS Whacker wrote:
> In message <address@hidden> on Tue, 6 Mar 2007 22:12:01 -0800, Nathaniel 
> Smith <address@hidden> said:
> 
> njs> 'mtn branch <branch> --go':
> njs>    same as 'mtn update -b <branch> -r h:<branch>
> 
> And soon, we will become tla, the VCS where there are at least 3 ways
> to do anything, almost but not entirely alike...
> 
> I call for a little bit of, how shall we say, purity?

Ah, yes, tla, the VCS boogie monster :-).

Obviously, we don't want to acquire a million subtly different
commands that confuse the user.  But we also don't want to be so pure
that no-one can understand how to do things either :-).  So the
question is whether any particular set of operations makes sense.

There are several reasons to at least consider something like branch
--go:

  -- Experience with real users says that some people currently expect
     'commit -b foo' to act like 'update -r h:foo; commit -b foo'.
     No, this doesn't make a lot of sense, but we've had multiple
     people make this mistake anyway.
  -- There are basically two use cases (that I know of) where you want
     to move your workspace to another point in history.  Those are,
     "get me up to date" (i.e., move forward along the current
     branch), and "switch me over to another branch".  
  -- The existing 'update' UI for this is very bad.  People expect
     'update -b foo' to switch them over to the given branch, but it
     doesn't, and they're confused.  What it does do now is not
     something that anyone would ever want.  But what it does do now
     is the only thing that's consistent with all the other uses of
     -b; switching it would itself be adding another weird special
     case, like you argue against.

That said, I'm not stuck on branch --go; but we do need some solution
to these problems.

> njs> 'mtn branch <branch> --here':
> njs>    unconditionally sets the current workspace's branch to
> njs>    <branch>
> 
> Isn't that what 'mtn branch <branch>' does with the current
> implementation (only gives a warning)?

Yes.  I think I might be missing your point?

> njs> ? 'branch --go' at least seems like an intuitive UI...
> 
> I disagree.  Intuitively, I would always wonder why the hell I would
> need to say something more to actually have things happen.  It's a
> little like the dreaded 'Are you really sure you wanna do this?'
> dialog...

"Are you sure?" is very different from "Sorry, can you clarify what
you wanted?".  "Are you sure?" sucks for two reasons -- firstly, it's
annoying because the computer perfectly well could just do what I
wanted, but instead it's bugging me about it, and secondly because
it's ineffective at actually protecting the user from anything,
because people just hit "yes" without reading.  Asking for
clarification addresses both of these issues -- firstly, the whole
point is that the computer actually doesn't know what I wanted, so
I can forgive it for asking, and secondly because an error (unlike a
warning) is actually effective at forcing the user to stop and think
about what they wanted.  (Especially if the way you recover is to
pick one of two explicitly different choices.  Compare to, say, the
bit in the source code where there is no default constructor for
file_path's, you must think each and every time whether this is
_from_internal or _from_external -- same UI design principles.)
Stopping users is bad, because it breaks flow, but if you can't think
of anything better, then it's at least superior to letting the user
continue on with everything broken.

Keep in mind that the original mistake that motivated this patch was
when Tommy accidentally committed with the right branch cert, but in
the wrong place.  (And someone once totally screwed up the OE
repository by making the same mistake, almost necessitating a special
hacked up release of 0.25 to recover.)  The current version of this
patch, however, would not have even given Tommy a warning...

-- Nathaniel

-- 
Eternity is very long, especially towards the end.
  -- Woody Allen




reply via email to

[Prev in Thread] Current Thread [Next in Thread]