On Sat, Sep 28, 2013 at 11:40 PM, Ramkumar Ramachandra
<artag...@gmail.com> wrote:
> Felipe Contreras wrote:
>> +$(RUBY_PROGRAMS): git-ruby$X
>> +       $(QUIET_BUILT_IN)$(RM) $@ && \
>> +       ln >lt; $@ 2>/dev/null || \
>> +       ln -s >lt; $@ 2>/dev/null || \
>> +       cp >lt; $@
>
> Why so many fallbacks? Will the hard-link (the first ln) ever fail?

Because that's what the code right on top of this is doing. I presume
it would fail in file-systems that don't have hard-links.

>> 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".

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

Reply via email to