git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Felipe Contreras <felipe.contreras@gmail.com>
To: Duy Nguyen <pclouds@gmail.com>
Cc: "Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
	"Greg Troxel" <gdt@ir.bbn.com>,
	"Junio C Hamano" <gitster@pobox.com>,
	"Git Mailing List" <git@vger.kernel.org>,
	"Jeff King" <peff@peff.net>,
	"Jonathan Nieder" <jrnieder@gmail.com>,
	"Thomas Rast" <trast@inf.ethz.ch>,
	"René Scharfe" <rene.scharfe@lsrfire.ath.cx>,
	"Michael Haggerty" <mhagger@alum.mit.edu>,
	"Matthieu Moy" <Matthieu.Moy@grenoble-inp.fr>,
	"Ramsay Jones" <ramsay@ramsay1.demon.co.uk>,
	"Erik Faye-Lund" <kusmabite@gmail.com>,
	"Johannes Sixt" <j6t@kdbg.org>
Subject: Re: [Administrivia] On ruby and contrib/
Date: Sat, 8 Jun 2013 08:20:28 -0500	[thread overview]
Message-ID: <CAMP44s192hzh8AWU-Eg1VVVXjZ9qyNqHw99X6y48MXJn3DHw+Q@mail.gmail.com> (raw)
In-Reply-To: <CACsJy8D8xD3mdC2gsBpU74Faa+CUfEWEgh5fhwPoRjz46-hjcw@mail.gmail.com>

On Sat, Jun 8, 2013 at 7:07 AM, Duy Nguyen <pclouds@gmail.com> wrote:
> On Sat, Jun 8, 2013 at 6:56 PM, Felipe Contreras
> <felipe.contreras@gmail.com> wrote:
>> On Sat, Jun 8, 2013 at 6:28 AM, Duy Nguyen <pclouds@gmail.com> wrote:

>>> but how many people on this
>>> list understand git design and limits _and_ ruby's good enough to spot
>>> the bugs?
>>
>> Now you are changing the subject. Does that mean that you accept that
>> 'fork' wouldn't be a problem when writing Ruby scripts?
>
> There are a lot of static variables in builtin/ (and outside too),
> which make it non-entrant, or at least not safe.

So?

> fork provides a process space isolation, some depend on that.

Process space isolation from what?

> And there are die() everywhere. Good luck controlling them.

Done.

--- a/ruby/git.c
+++ b/ruby/git.c
@@ -1,6 +1,7 @@
 #include <builtin.h>
 #include <cache.h>
 #include <fcntl.h>
+#include <ucontext.h>

 #undef NORETURN
 #undef PATH_SEP
@@ -8,6 +9,8 @@
 #include <ruby.h>

 static VALUE shellwords;
+static ucontext_t main_context;
+static int status;

 struct cmd_struct {
 	const char *cmd;
@@ -73,7 +76,14 @@ static VALUE git_rb_backticks(int o_argc, VALUE
*o_argv, VALUE ctx)
 	if (cmd->option & RUN_SETUP)
 		prefix = setup_git_directory();

-	i = cmd->fn(argc, argv, prefix);
+	getcontext(&main_context);
+	if (status == 0) {
+		status += 1;
+		i = cmd->fn(argc, argv, prefix);
+	} else {
+		i = 1;
+	}
+	status = 0;
 	rb_last_status_set(i, getpid());

 	fflush(stdout);
@@ -87,9 +97,19 @@ static VALUE git_rb_backticks(int o_argc, VALUE
*o_argv, VALUE ctx)
 	return rb_str_new(buf, i);
 }

+static void bye(void)
+{
+	if (status != 1)
+		return;
+	status += 1;
+	setcontext(&main_context);
+}
+
 void Init_git(void)
 {
 	rb_require("shellwords");
 	shellwords = rb_define_module("Shellwords");
 	rb_define_global_function("`", git_rb_backticks, -1);
+
+	atexit(bye);
 }

>> As for the people that know Git and Ruby; they can learn. Didn't you
>> just said that you didn't see any problem with the community learning
>> a new language?
>
> I said nothing about the community being ready _now_, did I?

If they can learn Ruby five years from now, then can learn it now.

> When you have the support for Ruby in Git, sure go ahead.

You are going in circles.

>>> If a bug is found and requires major restructuring in
>>> libgit.a, how are you sure it's worth the effort and does not
>>> destablize the rest of git?
>>
>> There is no need to destabilize anything. I just showed you 100 lines
>> of code that are able to run git commands without forks, and without
>> changing anything in libgit.a.
>
> And how do you deal with, for example die(), or thread safety?

See above for die(), and I don't see many perl or shell scripts with
multiple threads, why should the Ruby scripts have more than one
thread?

-- 
Felipe Contreras

  reply	other threads:[~2013-06-08 13:20 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-04 23:45 What's cooking in git.git (Jun 2013, #02; Tue, 4) Junio C Hamano
2013-06-05  0:04 ` [Administrivia] On ruby and contrib/ Junio C Hamano
2013-06-05  3:02   ` David Lang
2013-06-05 14:30     ` Felipe Contreras
2013-06-05  4:13   ` Michael Haggerty
2013-06-05 17:41     ` Junio C Hamano
2013-06-06 12:52     ` Matthieu Moy
2013-06-07 16:11       ` Junio C Hamano
2013-06-06 19:48     ` Thomas Ferris Nicolaisen
2013-06-05 14:45   ` Felipe Contreras
2013-06-06  7:26     ` demerphq
2013-06-06  7:46       ` Felipe Contreras
2013-06-06 12:24         ` Barry Fishman
2013-06-06 13:01           ` Felipe Contreras
2013-06-06 13:46             ` Barry Fishman
2013-06-06 14:09               ` Felipe Contreras
2013-06-06 14:41                 ` Barry Fishman
2013-06-06 15:04                   ` Felipe Contreras
2013-06-06 20:41         ` Charles McGarvey
2013-06-06 14:54   ` Greg Troxel
2013-06-06 15:17     ` Felipe Contreras
2013-06-06 16:09       ` David Lang
2013-06-06 18:16         ` Felipe Contreras
2013-06-06 20:29         ` Ramkumar Ramachandra
2013-06-06 20:19           ` David Lang
2013-06-07 14:24             ` Ramkumar Ramachandra
2013-06-07 15:20               ` Junio C Hamano
2013-06-07 15:28                 ` Ramkumar Ramachandra
2013-06-07 19:04                 ` Felipe Contreras
2013-06-07 19:27                   ` Ramkumar Ramachandra
2013-06-07 19:38                     ` Ramkumar Ramachandra
2013-06-09  2:57                     ` Johannes Schindelin
2013-06-09  9:16                       ` Ramkumar Ramachandra
2013-06-09 23:29                         ` Junio C Hamano
2013-06-10  4:56                           ` Felipe Contreras
2013-06-07 19:55                   ` Junio C Hamano
2013-06-07 20:24                     ` Felipe Contreras
2013-06-08  2:23                       ` Duy Nguyen
2013-06-08 10:08                         ` Felipe Contreras
2013-06-08 11:20                           ` Duy Nguyen
2013-06-08 12:06                             ` Felipe Contreras
2013-06-07 19:21             ` Felipe Contreras
2013-06-06 17:16       ` Greg Troxel
2013-06-06 18:24         ` Felipe Contreras
2013-06-06 21:05         ` Ramkumar Ramachandra
2013-06-06 21:31           ` Dependencies and packaging (Re: [Administrivia] On ruby and contrib/) Jonathan Nieder
2013-06-07 19:29             ` Felipe Contreras
2013-06-06 16:22     ` [Administrivia] On ruby and contrib/ Johannes Schindelin
2013-06-06 20:40       ` Ramkumar Ramachandra
2013-06-07  3:25         ` Johannes Schindelin
2013-06-07 15:20           ` Ramkumar Ramachandra
2013-06-07 17:57             ` Matthieu Moy
2013-06-07 18:14               ` Ramkumar Ramachandra
2013-06-07 18:24               ` Ramkumar Ramachandra
2013-06-07 18:32                 ` Matthieu Moy
2013-06-07 18:48                   ` Ramkumar Ramachandra
2013-06-07 19:00                     ` Matthieu Moy
2013-06-07 19:10                       ` Felipe Contreras
2013-06-07 18:33                 ` Jonathan Nieder
2013-06-07 18:45                   ` Matthew Ruffalo
2013-06-07 18:28               ` Junio C Hamano
2013-06-07 19:14           ` Felipe Contreras
2013-06-07 19:41             ` Ramkumar Ramachandra
2013-06-09  2:59               ` Johannes Schindelin
2013-06-08  2:17       ` Duy Nguyen
2013-06-08 10:02         ` Felipe Contreras
2013-06-08 11:28           ` Duy Nguyen
2013-06-08 11:56             ` Felipe Contreras
2013-06-08 12:07               ` Duy Nguyen
2013-06-08 13:20                 ` Felipe Contreras [this message]
2013-06-08 17:15                   ` Jeff King
2013-06-08 17:40                     ` Felipe Contreras
2013-06-09  0:10                       ` Jeff King
2013-06-09  1:17                         ` Felipe Contreras
2013-06-09  2:23                           ` Jeff King
2013-06-09  2:41                             ` Felipe Contreras
2013-06-09  3:07         ` Johannes Schindelin
2013-06-05  6:59 ` What's cooking in git.git (Jun 2013, #02; Tue, 4) Johannes Sixt
2013-06-05  7:12   ` Jeff King
2013-06-06  6:34     ` [PATCH] t0005: skip signal death exit code test on Windows Johannes Sixt
2013-06-06  6:37       ` Jeff King
2013-06-06  6:41         ` Felipe Contreras
2013-06-06  6:44           ` Jeff King
2013-06-06  6:48             ` Felipe Contreras
2013-06-06 17:21             ` Junio C Hamano
2013-06-06 17:40               ` Jeff King
2013-06-07  6:22                 ` Johannes Sixt
2013-06-07 10:12                 ` Erik Faye-Lund
2013-06-07 10:24                   ` Johannes Sixt
2013-06-07 12:00                     ` Erik Faye-Lund
2013-06-07 12:19                       ` Johannes Sixt
2013-06-07 12:46                         ` Erik Faye-Lund
2013-06-07 13:07                           ` Johannes Sixt
2013-06-07 14:20                             ` Erik Faye-Lund
2013-06-10  5:48                               ` [PATCH] mingw: make mingw_signal return the correct handler Johannes Sixt
2013-06-10 11:37                                 ` Erik Faye-Lund
2013-06-10 20:50                                 ` Junio C Hamano
2013-06-09  0:18                   ` [PATCH] t0005: skip signal death exit code test on Windows Jeff King
2013-06-09 20:31                     ` Junio C Hamano
2013-06-10  5:30                       ` Johannes Sixt
2013-06-10 11:38                         ` Erik Faye-Lund
2013-06-06 18:32               ` Felipe Contreras
2013-06-07 10:01       ` Erik Faye-Lund
2013-06-07 10:03         ` Erik Faye-Lund

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=CAMP44s192hzh8AWU-Eg1VVVXjZ9qyNqHw99X6y48MXJn3DHw+Q@mail.gmail.com \
    --to=felipe.contreras@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=gdt@ir.bbn.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=jrnieder@gmail.com \
    --cc=kusmabite@gmail.com \
    --cc=mhagger@alum.mit.edu \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    --cc=ramsay@ramsay1.demon.co.uk \
    --cc=rene.scharfe@lsrfire.ath.cx \
    --cc=trast@inf.ethz.ch \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).