git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Felipe Contreras <felipe.contreras@gmail.com>
Cc: "Duy Nguyen" <pclouds@gmail.com>,
	"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>,
	"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 13:15:13 -0400	[thread overview]
Message-ID: <20130608171513.GA28029@sigill.intra.peff.net> (raw)
In-Reply-To: <CAMP44s192hzh8AWU-Eg1VVVXjZ9qyNqHw99X6y48MXJn3DHw+Q@mail.gmail.com>

On Sat, Jun 08, 2013 at 08:20:28AM -0500, Felipe Contreras wrote:

> > 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?

Manipulation of global variables. Here are a few examples off the top of
my head:

Try running "git diff" from your Ruby hook, then try running "git
diff-files" within the same process. I believe the latter will start
respecting porcelain diff config like diff.mnemonicprefix. To clear
state you need to reset a list of global variables back to their initial
states (some of which are the BSS-default zero, but some of which are
not).

Try running "git log" followed by another "git log". The log family of
commands does not clear its marks from the commit objects, since it
expects to exit after the traversal. The second log will sometimes give
wrong answers if its traversal overlaps with the first (e.g., commits
marked SEEN or UNINTERESTING that should not be). You can add a call to
clear them at the end of the process, but that does not cover any cases
where we die().

These are problems that can be solved. But there is a lot of work
involved in finding these subtle bugs and coming up with fixes. I think
you would be better off working on an implementation of git that was
designed from scratch to work in-process, like libgit2. And it even has
an actively developed and maintained Ruby binding[1].

libgit2 doesn't have feature parity with regular git yet, but there are
many clients based around it that use the library internally for speed,
and then exec regular git to fill in the gaps.

-Peff

[1] https://github.com/libgit2/rugged

  reply	other threads:[~2013-06-08 17:15 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
2013-06-08 17:15                   ` Jeff King [this message]
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=20130608171513.GA28029@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=felipe.contreras@gmail.com \
    --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=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).