This is a different patch series that tries a different approach.
First, this series allows external scripts to also access libgit through Ruby
bindings:
git ruby <<EOF
for_each_ref() do |name, sha1, flags|
puts "%s: %s" % [name, sha1_to_hex(sha1)]
end
EOF
This way third party script writers can write Ruby code that resembles Git's
internal C code, but in a much simpler way.
Since the importance of the contrib area is fading, and it's important to move
all Git commands to C, it's helpful to have tools that allows third parties to
rewrite scripts that are easier to rewrite to C.
In addition, this would help Git developers to create quick prototypes and test
new code.
Finally, and perhaps most importantly, Ruby scripts can be intermediaries
between perl/shell scripts, and the final desired C code.
I already argued this, but here is a clear demonstration.
I took git-request-pull.sh, converted it to Ruby and incrementally moodified it
until the resulting code was essentially what the code would look like in C,
and then, finally, the rewrite to C, which follows the exact same logic of the
Ruby script.
In the progress of doing this, it was clear the shell script was buggy, so it
was fixed, and the C code needed fixes as well.
If we are serious about converting *all scripts* to C, clearly a powerful tool
is needed, and Ruby bindings fit the bill.
Ruby scripts could be provided alongside the perl/shell alternatives, so people
that build with NO_RUBY=y don't loose any functionality. And eventually the
Ruby scripts (and originals) get removed once the conversion to C is completed.
Even if Ruby is not used as an intermediary tool, and no official Git scripts
are
converted to C this way, the bindings would still be useful to third parties.
Who wouldn't benefit from adding this support?
Felipe Contreras (44):
Add support for ruby commands
ruby: add support for internal ruby programs
request-pull: fix annotated tag check
request-pull: fix for specific branch
request-pull: use appropriate ref
request-pull: fix exact match checking
request-pull: trivial simplification
request-pull: t: trivial whitespace style fixes
request-pull: t: add missing cat
ruby: rewrite 'request-pull'
ruby: request-pull: rewrite perl script
ruby: request-pull: trivial simplifications
ruby: bind setup_git_directory()
ruby: bind dwim_ref()
ruby: request-pull: use native dwim_ref()
ruby: bind git_config()
ruby: request-pull: use native git_config()
ruby: bind read_ref()/peel_ref()
ruby: bind get_sha1()
ruby: request-pull: simplify tag fetching
ruby: request-pull: use get_sha1()
ruby: add Commit class
ruby: bind get_merge_bases()
ruby: request-pull: use get_merge_bases()
ruby: request-pull: trivial cleanups
ruby: bind remote and transport stuff
ruby: request-pull: use native remote and transport
ruby: bind find_unique_abbrev()
ruby: request-pull: use native commit info
ruby: bind read_sha1_file()
ruby: request-pull: use read_sha1_file()
revision: add missing include
shortlog: add missing declaration
shortlog: split builtin from common code
ruby: add RevInfo and DiffOptions
ruby: bind shortlog()
ruby: request-pull: use shortlog()
ruby: bind diff_tree_sha1()
ruby: bind log_tree_diff_flush()
ruby: request-pull: use native diff_tree stuff
ruby: request-pull: remove rescue block
ruby: remove GIT_PAGER from environment
ruby: add simpler option parser
request-pull: rewrite to C
.gitignore | 1 +
Makefile | 31 ++-
builtin.h | 1 +
builtin/request-pull.c | 275 +++++++++++++++++++++++
builtin/shortlog.c | 184 +--------------
git-rb-setup.rb | 109 +++++++++
git-request-pull.sh | 162 --------------
git.c | 1 +
revision.h | 1 +
ruby.c | 584 ++++++++++++++++++++++++++++++++++++++++++++++++
shortlog.c | 181 +++++++++++++++
shortlog.h | 8 +
t/t10000-ruby.sh | 233 +++++++++++++++++++
t/t5150-request-pull.sh | 81 +++++--
14 files changed, 1492 insertions(+), 360 deletions(-)
create mode 100644 builtin/request-pull.c
create mode 100644 git-rb-setup.rb
delete mode 100755 git-request-pull.sh
create mode 100644 ruby.c
create mode 100644 shortlog.c
create mode 100755 t/t10000-ruby.sh
--
1.8.4-fc
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html