On Sat, Sep 28, 2013 at 11:40 PM, Ramkumar Ramachandra <artagnon@xxxxxxxxx> 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html