Re: [Monotone-devel] Re: Deterministic *-merge

2007-01-13 Thread Oren Ben-Kiki
On Fri, 2007-01-12 at 18:14 -0800, Nathaniel J. Smith wrote:
 Anyway, the answer to your question is that I'm not proposing anything
 at all change in monotone -- that's why I said at the beginning of the
 writeup that my note had no practical consequences :-).

I think that merge behavior is one of the most crucial pieces of how a
VCS behaves. Darcs is an example of this approach taken to extreme, and
demonstrates how a solid theoretical basis for the merge can be viewed
as the core design choice of a VCS. Having something equivalent for
more traditional version control systems would be a real breakthrough
IMVHO.

As for practical implications - cherry picking can be defined in terms
of a merge operation, as long as you *really* trust your merge :-)

 We've
 generally taken the line that the history graph should attempt to
 model as closely as possible the user's intrinsic understanding of
 versioning a bunch of files, because this is the both the most
 user-friendly and the most future-proof approach.  (Sucks to build a
 particular merge algorithm's assumptions into your hash-chained
 history graph, and thus be stuck with that merge algorithm for a few
 decades...)

That's true. On the other hand, there's immense power to be gained from
picking a powerful merge abstraction and running with it (again Darcs is
a good example).

 That said, I dunno, maybe someone will figure out how to use this kind
 of stuff to improve VCS UI -- it's just some ideas, who knows what
 will happen to them once they start wandering around in people's
 heads...

For starters, annotating the '#' with the list of candidate values
immediately suggests an interface for conflict resolution. Also
presumably the cases where conflict actually occurs would (hopefully)
be more in line with user expectations. And then there are the advanced
features you could build on top of this (like cherry-picking).

These all require that the chosen merge abstraction be really solid,
which translates to trying to poke theoretical holes in it, and then
trying it in practice for a while, until sufficient confidence is
reached.

Most VCS don't trust their merge method (for good reason). On the down
side, this restrict their power; on the up side, they allow plugging in
different merge algorithms, so it would be possible to implement and
test deterministic *-merge in them to see how well it works in practice.
Monotone is a particularly good platform for this because it is based on
solid abstractions in other areas (what is a version, what is a branch,
etc.)



___
Monotone-devel mailing list
Monotone-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/monotone-devel


[Monotone-devel] project_t , and preparing for projects / policy branches

2007-01-13 Thread Timothy Brownawell
I've been reorganizing things somewhat to try to prepare for
implementing a concept of a project that we'll need for the policy
work.

So far, this mostly means that I've added a project.{cc,hh} with a
project_t class, and that things that make / query certs (and this
includes things that ask about branches) have to go through this.
Anything dealing with keys should also end up going through here, but I
haven't done that part yet.

There is currently a single project, accessed by app.get_project(). I'm
thinking that later this will become the default project, which is
whatever is specified either in _MTN/options or on the command line. We
can also have app.get_project(string) for operations like netsync or
automate (stdio) that want to be able to look at multiple projects.

The database class had several get_revision_certs() functions. Most uses
of these (the exception being some code that looked like it was for
migration) now go through project_t. The functions in project_t aren't
(all) just wrappers, they have names based more on how the functions the
wrap were used, and are changed to fit those uses better. (For example,
the get all certs of type foo variant became project_t::get_tags(),
because that's all it was used for.)

Also, the mentioned get_tags() returns a set of new tag objects. The
code that used it wanted to know the key used for signing the tag, but I
don't think it's at all certain that tags will remain implemented as
certs (putting them in the policy branch should allow them to become
more interesting). So, just returning a set of certs probably wouldn't
be good.

One other change is that there's an outdated_indicator.{cc,hh} that's
used by the database cert query functions to let their users find out
when the returned info might be outdated. Currently, this is only really
used by project_t::get_branch_heads(), with the result that calling
'heads' repeatedly for the same branch (say, through automate stdio) is
very fast after the first time. I don't really know if we want to keep
this, it's mostly there just because it occurred to me while I was
messing around trying to figure out how to get started on this
(re)organize things to prepare for having a 'project' concept thing.

-- 
Timothy

Free (experimental) public monotone hosting: http://mtn-host.prjek.net



___
Monotone-devel mailing list
Monotone-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/monotone-devel


[Monotone-devel] FYI: (en|de)code_hexenc now use botan

2007-01-13 Thread Zack Weinberg

I just pushed a change that removes transforms.cc's bespoke
implementation of hex encoding in favor of Botan's.  I believe this to
have been a historical accident, but if it turns out to cause
performance issues (which I doubt it will) we can certainly go back to
the way it was.

zw


___
Monotone-devel mailing list
Monotone-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/monotone-devel


Re: [Monotone-devel] Re: Summit update -- 1 month to go!

2007-01-13 Thread Nathaniel J. Smith
On Fri, Jan 12, 2007 at 09:49:30AM +0100, Lapo Luchini wrote:
 Nathaniel J. Smith wrote:
  If you don't have a room to sleep in yet (has _anyone_ booked a hotel
  room yet?), then now is also really the time!
 
 That, I'll probably do this evening, as soon as we decide the logistics
 for the few days before the summit starts (anyway has suggestion what is
 at a reasonable distance and can't really be missed? we have 4 full days
 available for the trip before the summit starts).

Well, I'm fond of recommending the Exploratorium to people :-).  (It's
up in SF, just under the Golden Gate bridge.)  Alcatraz is touristy,
but actually pretty darn cool, too.

  And speaking of transportation, we need 2-3 (or more) people to drive
  everyone back and forth from the hotel everyday, and if you can be one
  of these people, i.e., are:
-- age 25 or older
-- legal to drive in the US (IIUC if you are legal to drive at home
   you are probably legal to drive in the US)
  then you should let me know, so we can figure out the rental stuff.
 
 Me and Gabriele were thinking about renting a car anyway, in order to
 take a better look around the area in the first 4 days, so there would
 be no problem in doing this.
 How should we move in that direction? Will it be a centralized booking
 like the hotel or not?

Oh, good -- I was starting to get worried that we might not have any
drivers there for the whole week after all :-).  (Might still be a bit
complicated with your leaving on Sunday, but we can figure something
out.)

We needed to do the hotel bit centralized because we all wanted to be
at the same place, and because we could get better rates -- for the
cars I don't know if it matters either way.  (We _might_ be able to
negotiate for better rates, but I don't really know how rental car
companies work.)

The main thing is making sure we have enough seats to get everyone
around... AFAICT the most cost-effective thing to get are minivans,
each of which seats 7.  (You might not want to rent one just for the
two of you beforehand, though, since they're more expensive than a
car.)  So we need somewhere between 2 minivans and 3 minivans, it
looks like from the current wiki page... it would be helpful if people
with question marks next to their names figured out what they were
doing soonish, so we can figure this part out :-).

-- Nathaniel


___
Monotone-devel mailing list
Monotone-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/monotone-devel


Re: [Monotone-devel] project_t , and preparing for projects / policy branches

2007-01-13 Thread Nathaniel J. Smith
On Sat, Jan 13, 2007 at 01:58:05PM -0600, Timothy Brownawell wrote:
 I've been reorganizing things somewhat to try to prepare for
 implementing a concept of a project that we'll need for the policy
 work.

Huzzah.

It's going to be weird at the summit, trying to seriously sit down and
hack this stuff out, without you there.  Think you'll be around on IRC
at least or so?

 So far, this mostly means that I've added a project.{cc,hh} with a
 project_t class, and that things that make / query certs (and this
 includes things that ask about branches) have to go through this.
 Anything dealing with keys should also end up going through here, but I
 haven't done that part yet.

Better factoring?  Shocking! :-)

 There is currently a single project, accessed by app.get_project(). I'm
 thinking that later this will become the default project, which is
 whatever is specified either in _MTN/options or on the command line. We
 can also have app.get_project(string) for operations like netsync or
 automate (stdio) that want to be able to look at multiple projects.

Makes sense.  We might want to consider making the project something
that gets passed around directly, as well, instead of being global
state, if we want one process to be able to work with multiple
projects.  I guess this would fit into the general trend of trying to
split things out of the app_state blob, and might or might not be
sensible to mix in with other changes now.

 The database class had several get_revision_certs() functions. Most uses
 of these (the exception being some code that looked like it was for
 migration) now go through project_t. The functions in project_t aren't
 (all) just wrappers, they have names based more on how the functions the
 wrap were used, and are changed to fit those uses better. (For example,
 the get all certs of type foo variant became project_t::get_tags(),
 because that's all it was used for.)

Huh, didn't we also have get all branch certs?  And I guess the
selector stuff is all inside database.cc, so never mind that...

 Also, the mentioned get_tags() returns a set of new tag objects. The
 code that used it wanted to know the key used for signing the tag, but I
 don't think it's at all certain that tags will remain implemented as
 certs (putting them in the policy branch should allow them to become
 more interesting). So, just returning a set of certs probably wouldn't
 be good.

Yeah, tags are an interesting question.  We should probably even
consider simply throwing them out altogether -- the only thing I can
think that's actually different between tags and (what monotone calls)
branches is that if you do
  mtn co -rt:foo
you don't want monotone to guess that the workspace should have its
default branch set to foo, but rather to whatever real branch the
revision is in (if there is one).

 One other change is that there's an outdated_indicator.{cc,hh} that's
 used by the database cert query functions to let their users find out
 when the returned info might be outdated. Currently, this is only really
 used by project_t::get_branch_heads(), with the result that calling
 'heads' repeatedly for the same branch (say, through automate stdio) is
 very fast after the first time. I don't really know if we want to keep
 this, it's mostly there just because it occurred to me while I was
 messing around trying to figure out how to get started on this
 (re)organize things to prepare for having a 'project' concept thing.

This is technically sort-of incorrect, isn't it, because in principle
the trust hooks might return different values the first and second
time they are called?  Not that anyone is likely to complain within a
single monotone instance, though in the long run one of the things
that having more control over trust will give us is the ability to
cache such decisions on _disk_.  We will almost certainly need to
eventually cache head sets on disk in order to scale.

-- Nathaniel


___
Monotone-devel mailing list
Monotone-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/monotone-devel