Subject: Re: Question: Is it possible to host a writable git repo over both http and ssh?

From: "Shawn O. Pearce" <[email-masked]>
Date: Thu, 26 Mar 2009 09:57:32 -0700

Rogan Dawes <[email-masked]> wrote:
> Robin Rosenberg wrote:
> > torsdag 26 mars 2009 05:56:51 skrev Jeff King <[email-masked]>:
> >> On Wed, Mar 25, 2009 at 11:55:29PM -0500, Mike Gaffney wrote:
> >>
> >>> I'm actually trying to take what Sean did with gerrit and extract a
> >>> full Java/MinaSSHD based server that doesn't require a real user
> >>> account and is configurable by spring. So yes, I'm using JGit on the
> >>> server.
> >> Ah. In that case, I don't know whether JGit respects all hooks. You
> >> should ask Shawn (Shawn, we are talking about a post-update to run
> >> update-server-info). :)

JGit already has the native code needed for update-server-info. 
Look at WalkPushConnection:

  line 185-187 calls refWriter.writeInfoRefs() to update the
  GIT_DIR/info/refs for dumb transports.  We just need to call
  that in the end of the receive code.

  line 236 calls WalkRemoteObjectDatabase.writeInfoPacks() to
  update the GIT_DIR/objects/info/packs file.  This needs to
  be abstracted out so we can more easily reuse it.

> > Arguably it should. but it doesn't. Then there is a question as to what
> > format those hooks should be. Shell scripts would run into platform
> > issues and jgit based stuff should have as little as possible of that, but
> > a similar mechanism should exist.

Yup, I agree.

At the very least we should suppot doing the update-server-info
logic from pure Java, as it is probably the most common operation
people would want in a post receive hook.

> Maybe support executing scripts via Bean Scripting Framework?
> 
> That would allow scripts to be written in any of the supported
> languages, as long as the appropriate interpreter is present.
> 
> e.g. BeanShell, Groovy, Jython, etc
> 
> See http://jakarta.apache.org/bsf/
> 
> If you define an interface for each hook, the scripts could implement
> the interface, and execute that way.

Yes, that is one option.  I'd like to get a reasonable binding to
BSF for JGit, but its more of a wish than a real need for me, so
I just don't bother.  I think many people who want to script Git
from Python would be reasonably happy with executing that script
through Jython if there was a decent binding.
 
-- 
Shawn.