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
next prev parent 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).