From 7a74d4e0f4f111473072b295678a450c05347459 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Tue, 20 Nov 2012 13:08:53 +0000 Subject: Initial work to add 'diff' support --- git2.nobj.lua | 1 + src/diff.nobj.lua | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/diff.nobj.lua diff --git a/git2.nobj.lua b/git2.nobj.lua index d937d5c..e582269 100644 --- a/git2.nobj.lua +++ b/git2.nobj.lua @@ -74,6 +74,7 @@ subfiles { "src/tag.nobj.lua", "src/revwalk.nobj.lua", "src/reference.nobj.lua", +"src/diff.nobj.lua", }, } diff --git a/src/diff.nobj.lua b/src/diff.nobj.lua new file mode 100644 index 0000000..cc7005d --- /dev/null +++ b/src/diff.nobj.lua @@ -0,0 +1,61 @@ +-- Copyright (c) 2010-2012 by Robert G. Jakabosky +-- Copyright (c) 2012 by Daniel Silverstone +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy +-- of this software and associated documentation files (the "Software"), to deal +-- in the Software without restriction, including without limitation the rights +-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-- copies of the Software, and to permit persons to whom the Software is +-- furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in +-- all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +-- THE SOFTWARE. + +object "Diff" { + c_source [[ +typedef git_diff_list Diff; + +static int print_cb_fn(void *cb_data, + git_diff_delta *delta, + git_diff_range *range, + char line_origin, /**< GIT_DIFF_LINE_... value from above */ + const char *content, + size_t content_len) +{ + lua_State *L = (lua_State *)cb_data; + lua_pushlstring(L, content, content_len); + return 0; +} + + +]], + constructor "tree_to_tree" { + c_call { "GitError", "err" } "git_diff_tree_to_tree" + { "Repository *", "repo", "void *", "opts", + "Tree *", "old_tree", "Tree *", "new_tree", "Diff *", "&this" }, + }, + method "entrycount" { + c_method_call "int" "git_diff_entrycount" { "int", "delta_t" } + }, + method "print_patch" { + c_source [[ + { + int cur_top = lua_gettop(L); + git_diff_print_patch(${this}, L, print_cb_fn); + if (lua_gettop(L) != cur_top) { + lua_concat(L, lua_gettop(L) - cur_top); + return 1; + } + } + ]] + }, +} + -- cgit v1.2.1