Re: [PATCH v2 02/44] ruby: add support for internal ruby programs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Sep 28, 2013 at 11:56 PM, Felipe Contreras
<felipe.contreras@xxxxxxxxx> wrote:
> On Sat, Sep 28, 2013 at 11:40 PM, Ramkumar Ramachandra

>>> diff --git a/ruby.c b/ruby.c
>>> index ee6a0e7..339e376 100644
>>> --- a/ruby.c
>>> +++ b/ruby.c
>>> @@ -52,5 +52,22 @@ static int run_ruby_command(const char *cmd, int argc, const char **argv)
>>>
>>>  int main(int argc, const char **argv)
>>>  {
>>> -       return run_ruby_command(argv[1], argc, argv);
>>> +       if (!strcmp(argv[0], "git-ruby")) {
>>> +               return run_ruby_command(argv[1], argc, argv);
>>> +       } else {
>>> +               const char *cmd = argv[0];
>>> +               static char buf[PATH_MAX + 1];
>>> +               const char *args[argc + 1];
>>> +               int i;
>>> +
>>> +               snprintf(buf, PATH_MAX, "%s/%s.rb",
>>> +                               git_exec_path(), basename((char *)cmd));
>>> +
>>> +               args[0] = "git";
>>> +               args[1] = buf;
>>> +               for (i = 0; i < argc - 1; i++)
>>> +                       args[i + 2] = (char *)argv[i + 1];
>>> +
>>> +               return run_ruby_command(cmd, argc + 1, args);
>>> +       }
>>>  }
>>
>> Can you explain this in greater detail in your commit message? When I
>> pass an argument,
>>
>>   $ git ruby foo
>>   git-ruby: No such file or directory -- foo (LoadError)
>>
>> I get this as before. How exactly will new ruby scripts be executed?
>> (I can only guess at this point)
>
> If you do:
>
> % git ruby foo
>
> It's the same as
>
> % ruby foo
>
> You need the script right there, as a file named "foo".
>
> However, this already works before this patch.
>
> What this patch does is enable:
>
> % git foo
>
> But for this you need two things:
>
> 1) A binary named git-foo in your path, that is a link to git-ruby,
> which is what the variable RUBY_PROGRAMS is for in the Makefile
>
> 2) A script named git-foo.rb in your exec-path.
>
> So basically "git-foo" is the same as "git ruby $GIT_EXEC_PATH/git-foo.rb".

Note that this is for _internal_ Ruby programs, if you want "git foo"
to run yours, or a third party script, you can do it like this:

cat > git-foo <<EOF
#!git ruby

#ruby code
EOF

chmod +x and put it on your PATH, done :)

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]