monotone-devel
[Top][All Lists]
Advanced

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

[Monotone-devel] Re: Comments on monotone


From: graydon hoare
Subject: [Monotone-devel] Re: Comments on monotone
Date: Fri, 21 May 2004 13:28:44 -0400
User-agent: Mozilla Thunderbird 0.5 (X11/20040208)

Johannes Winkelmann wrote:

* Should I use one key per project or global one (a single key for all
  projects)?

up to you. like with most key management issues; do you have 1 ssh key, or many? it depends how much you want to partition security. I tend to only use 1 key everywhere, because I am a bit lazy.

* If global, take a note in the docs that genkey is only needed at first

maybe a little digression about key management would be good in the docs?

* Where do I keep a global key? How do I access it from a remote PC (e.g. password protected area on web page); -> strategies?

there are a few strategies here. we've considered trying to teach monotone to talk to ssh-agent, and/or reuse ssh keys. likewise gpg and gpg-agent. we've also considered giving monotone its own agent. it's hard to decide; I'd probably welcome code which did any of these.

one thing I don't really want to do is wire into the gpg trust system automatically. trusting someone wrote you a particular email is a different thing than trusting their code is OK for your development project.

* Explain branch naming (is net.venge.monotone meant for the developer working on venge.net or the project hosted at venge.net?)

it's just prefixed by a domain name to make it more likely to be unique. the names are hierarchical left-to-right to permit grouping in various operations; though so far the only grouping operation is serving a collection (eg. serving the collection net.venge.monotone also serves the branches net.venge.monotone.{i18n,win32,gui} as part of the same collection.)

whether this grouping is necessary depends largely on how many branches people make. each collection costs a full merkle tree in the database; grouping those saves a bit of cost if you have hundreds of branches. but maybe that's a premature optimization.

* If I start working on a project (e.g. monotone/net.venge.monotone), should I start a new branch or commit to the existing one?

depends if you want monotone to try to merge your work or not. basically the idea with a branch is summed up in the term "merge obligation": if you mark your work as belonging to a branch, monotone will interpret that marking as an instruction to try to merge your work with everyone else in that branch.

if you want your work to remain not-merged for a while, you mark it as belonging to a different branch. branches can overlap, and you can mark a state as a member of a branch retroactively.

a) If I commit to the existing one, it would be nice if pull could "commit" to a different local branch, e.g. pull branchA and commit to branchB; this way, I can pull someone's branch without messing with my precious branch :-)

no, monotone doesn't (and won't) synthesize branches this way. what you pull is a set of certificates from other users saying that they want their work to be considered part of a branch (a logical, merged group). if you don't want to be part of that group, you need to mark your work as belonging to another branch.

note: this is not to say that your work will be clobbered by new work you pull. there can be multiple divergent heads on a branch. branches can have lots of forks inside them. your work is a fork from its base, and will remain a fork until you merge it. the branch is just an instruction to monotone that -- eventually -- you want a certain merging to take place amongst your fork and the others in your branch. probably we should make forking and branching clearer. the definitions for monotone are:

  - a fork == any time you create any divergence. usually
    any time you commit, at all.

  - a branch == a group of tree states, which monotone should try
    to merge the heads of.

in other words, a fork is a record of the ancestry relationship between tree states; a branch is a "social grouping" of such forks, telling monotone how you want it to behave when you ask for merges.

b) For a group of people working on a project hosted at example.net, should they

1. use a local branch (net.example.$DEVELOPER), merge to net.example, and push net.example,

     2. work all on net.example

you would do #1 if you wanted to, say, have a designated person playing the role of integrator. you would do #2 if you were comfortable with the CVS style of having everyone do a little bit of integration on an ongoing basis. or you can do a mixture (eg. tell people to work in groups of 3-5 people doing ongoing integration on a shared branch per group, and appoint a few people to doing cross-branch integration).

it's similar to CVS in this sense, less like arch: you can share a branch amongst a group of developers, even without access to the same machine.

* For a public development branch, is it possible to enforce merged heads (lua hook)? This would ensure a single access point for people not familiar with the developers and/or wouldn't want to care which head they should check out. Consider the following example: net.example.program, net.example.program.testing where the later is a testing branch for public testing (by non developers). Note that this "must be merged" lua thing is only for monotone running on the central development server, not the local copy. Of course, this could also be a policy of the development team, but enforcing it would be much more sane IMHO.

hm. possible. but I think a bit less useful and a bit more artificial than it sounds. maybe not. an easier thing to do, if you want to enforce this, is to make a policy (perhaps in lua) of doing a propagate from net.example.program to net.example.program.testing when you have a single head (or better yet, certificates indicating a successful build and testsuite result).

3 Functionality I was somewhat missing

* getting (downloading) the latest version (any arbitrary version?) of something ("CVS snapshot"), not the whole repository (this is actually nothing I needed so far, but
  thought this would help once I set up a public repository).

yeah. there's some planning in this direction (netsync can inhibit portions of its transfer, or make direct requests) but no code yet. there will be eventually, once we find time and work out UI for it.

* How can I get someones changes into my DB, check them, and get rid of them (pull/review/drop cycle)?

similarly, all the stuff for truncating history (and marking as dormant, so you don't re-fetch it) is atm not written, but planned.

* "pull" in a working directory could also guess the branch if omitted

yeah. pull actually operates on collections rather than branches, but the difference is artificial and possibly not worth maintaining. I'm not sure. in any case, we want "monotone pull" (with no other args) to eventually work in a working copy. it's a UI thing which does need a comfortable solution, no question.

thanks for your comments.

-graydon




reply via email to

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