views:

52

answers:

4

I am interested in a system that allows for distributed development with an authentication piece. What do I mean by that?

Ok so lets take SVN, SVN keeps track of revisions and doesn't care who submits, as long as you have the right to submit you can submit, really, to any part in the repository. Where does my system come into play? Being able to granulate access control and give a stackoverflow like feel to the environment.

In the system I am describing we have 4 users Bob, Alice, Dan, Joe. Bob is a project managed, Alice and Dan are programmers under Bob and Joe is a random programmer on the internet who wants to help. Ideally in this system, Bob can commit any changes and won't require approval. Alice and Dan can commit to their branches, or a branch, but a commit to the trunk would need approval by Bob.
This is where Joe comes in, wants to help, however, you just don't want to give him the keys to the kingdom just yet so to speak, so in my system you would setup a "low user" account. Any commits that Joe makes would need to be approved by Dan, Alice or both. However, in the system, Joe can build up "Karma" where after so many approved commits it would only need approval by one of the programmers, and then eventually no approval would be necessary.

Does that make sense and do you know if a system like that exists? Or am I just crazy to even think such a system/environment would be possible?

A: 

You can set up directory-based permissions for subversion, which alleviates the vast majority of the issues you're referring to with Alice and Dan.

The way most projects handle Dan's case is to allow him to submit patches which are then rolled into a commit by a supervisor.

AvatarKava
+1  A: 

Any decent distributed version control system, like Git or Mercurial, can do this. Those with permission to push can push, others have to send pull requests. The only feature missing is the automatic build up of what you call "Karma".

This is how most open source projects run.

David M
A: 

A question that always needs to be asked is: Why is your solution better than existing solutions?

For instance, why not use a distributed system and have random users push to someone who can then pull those changes in if necessary. Over time, if the developer proves himself, just give him access as an admin.

I know it would be cool to have all this automated, but committing source code doesn't happen so often that an administrator couldn't manage adding people by hand.

samoz
Although not a direct answer, you did give me a great idea.
Nathan Adams
Glad to help! If you get your project off the ground, post a link to the project site!
samoz
+1  A: 

Hm... Interesting wishes...

Let's see. You could do 3 branches:

  • Final
  • Development
  • Unsafe

Bob can commit in Final. Alice and Dan can commit in Development and Joe can commit in Unsafe.

The approval is actually the merging of the changes from a lower branch to a higher one. For example: Joe gets approved when his code is merged by Alice or Dan in the Development branch. Similarly, the approval for the Alice and Dan is the merging of their code, by Bob, in the Final branch.

For Karma is a little more complicated. You could write a script that will check from time to time the number of merges (approvals) for one user. When a certain threshold is exceeded, the user gets promoted (the script gives him access to higher branches).

Victor Hurdugaci