git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rogan Dawes <lists@dawes.za.net>
To: Robin Rosenberg <robin.rosenberg.lists@dewire.com>
Cc: Jeff King <peff@peff.net>, Mike Gaffney <mr.gaffo@gmail.com>,
	"Shawn O. Pearce" <spearce@spearce.org>,
	git@vger.kernel.org
Subject: Re: Question: Is it possible to host a writable git repo over both http and ssh?
Date: Thu, 26 Mar 2009 11:46:25 +0200	[thread overview]
Message-ID: <49CB4EF1.6050902@dawes.za.net> (raw)
In-Reply-To: <200903260618.33019.robin.rosenberg.lists@dewire.com>

Robin Rosenberg wrote:
> torsdag 26 mars 2009 05:56:51 skrev Jeff King <peff@peff.net>:
>> 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). :)
> 
> 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.
> 
> -- robin
> 

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.

Here is an example, mishmashed from
<http://www.beanshell.org/examples/actionhandler.html> and
<http://jvm-languages.com/wiki/Bean_Scripting_Framework#Interacting_with_Complex_Objects>:

======8x===== Java code =========
public class BSFFileUtils
{
   public Object evalFile (BSFManager manager, File file)
       throws IOException
   {
      String fileName = file.getPath();

      String language = manager.getLangFromFilename(fileName);
      String code = extractFileContents(file);

      return manager.eval(language, fileName, 0, 0, code);
   }

   private String extractFileContents (File file)
      throws IOException
   {
      StringBuffer buf = new StringBuffer();

      BufferedReader r = new BufferedReader(new FileReader(file));
      try {
         int len;
         char[] chars = new char[8192];

         while ((len = r.read(chars, 0, chars.length)) != -1) {
           buf.append(chars, 0, len);
         }

         return buf.toString();
      } finally {
          r.close();
      }
   }
}

public static void main (String[] args)
{
   String directory = args[0];
   File file = new File("actionHandler.bsh");

   BSFManager manager = new BSFManager();

   ActionListener listener = (ActionListener)
BSFFileUtils.evalFile(manager, file);

   JButton button = new JButton("MyButton");
   button.addActionListener(listener);

   JFrame f = new JFrame();
   f.getContentPane().add( button );
   f.show();
}

======8x===== BeanShell code ========= actionHandler.bsh

import java.awt.event.ActionListener;

actionPerformed( e ) {
    print("Button Pressed: " + e);
}

return (ActionListener)this;

======8x==============================

Having said all this, it is probably worth implementing
update-server-info in Java, so as to avoid having to shell out to
perform this action, and keep it all platform-independent.

Rogan

  reply	other threads:[~2009-03-26  9:49 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-25 17:29 Question: Is it possible to host a writable git repo over both http and ssh? Mike Gaffney
2009-03-26  2:12 ` Jeff King
2009-03-26  3:27   ` Mike Gaffney
2009-03-26  3:36     ` Jeff King
2009-03-26  4:55       ` Mike Gaffney
2009-03-26  4:56         ` Jeff King
2009-03-26  5:18           ` Robin Rosenberg
2009-03-26  9:46             ` Rogan Dawes [this message]
2009-03-26 16:57               ` Shawn O. Pearce

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49CB4EF1.6050902@dawes.za.net \
    --to=lists@dawes.za.net \
    --cc=git@vger.kernel.org \
    --cc=mr.gaffo@gmail.com \
    --cc=peff@peff.net \
    --cc=robin.rosenberg.lists@dewire.com \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).