Re: [PATCH v2 02/44] ruby: add support for internal ruby programs
- From
Ramkumar Ramachandra <artagnon@gmail.com>
- Date
- Sep 29, 2013, 04:40 UTC
- Message-ID
- <CALkWK0=XSxiz+MoU2H7Zxo4gSRvs+C5fGpnD2ioBvrXzdLpmww@mail.gmail.com>
- In-Reply-To
- <1380405849-13000-3-git-send-email-felipe.contreras@gmail.com>
Felipe Contreras wrote:
Show 5 quoted lines
> +$(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?
Show 28 quoted lines
> 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)