Random notes on how to version policy (fine-grained permissions, trust delegation, branch names...).

Mostly-obsolete notes of historical interest

Classic conversation on how to make permissions work at all, sketching the basic approach: http://frances.vorpus.org/~njs/mt-permission.html

January 2007: http://thread.gmane.org/gmane.comp.version-control.monotone.devel/9835/focus=9835 http://thread.gmane.org/gmane.comp.version-control.monotone.devel/9842/focus=9842

And one from Paul Crowley (February 2007): http://thread.gmane.org/gmane.comp.version-control.monotone.devel/10077/focus=10077

Useful conversation from April 2006: http://colabti.org/irclogger//irclogger_log/monotone?date=2006-04-18,Tue&sel=119#l194

Includes argument for why the right rule for evaluating whether a merge followed permission rules, is if either cset is allowable by permission rules.

The pastebin link (since it will probably expire) is to this text:

branches/
  monotone/
    id: file containing a single hex nonce
    status, description, ...: can drop arbitrary other files in here, if useful
    release/
      1.0/
        id
      1.1/
        id
    old/
      win32/
        id
      changesets/
        id

This is file layout for a project with 5 branches, with names:
  monotone
  monotone/release/1.0
  monotone/release/1.1
  monotone/old/win32
  monotone/old/changesets
The ideas is that the branch hierarchy is directly represented
in the filesystem hierarchy; every directory under 'branches'
corresponds to a branch iff it contains a file named "id".  This
is a super obvious representation (everyone already groks the
filesystem), gives full rename support for branches, lets you
stick other ancillary information in where you want (extra info
on each branch, maybe have a README file inside monotone/release/
describing release policy, even though that dir is not itself a
branch), lets you have both "foo" and "foo/bar" as branches.

Details are not important, instead of having a file named "id"
it could be an attr on the directory, or whatever makes sense,
I don't care at this point.

Some minor changes

Further suggestions

User requests

http://article.gmane.org/gmane.comp.version-control.monotone.devel/6917

Questions

Correct me if I'm interpreting this idea incorrectly. You plan on using a directory hierarchy of configuration files to describe policy concerning branches in the repository database itself; that these directories are not working directories for your branches. Where would this directory hierarchy exist? As another branch in the database? Would you use a special checkout command to get it (mtn -d DATABASE -bBRANCHNAME co --policy PDIR), or simply specify something like -bBRANCHNAME."policy". Could you provide links or information on the "big picture." -- ChadWalstrom

You plan on using a directory hierarchy...to describe policy...these branches are not working directories for your branches* -- yes, exactly right. As another branch in the database? -- yep again, probably with some fixed name, I guess? The exact UI beyond that I'm not sure -- certainly one thing to figure out as things settle down would be what sort of sugar is useful. I'd almost be tempted to have it automatically checked out to a subdirectory of _MTN/ or something, even, just to make things as low-impedence as possible? But this is just guessing, can't make sensible UI choices until much later in the process. -- NathanielSmith


Basic requirements

Incrementality

What's the minimal thing that "does something"?

Possibly a way to manually set a branch as a metadata branch, via a db var, and then add things like branch name remappings on top of that?