/** * This code is auto-generated; unless you know what you're doing, do not modify! **/ #include #include #include #include "git2.h" #include "../include/functions/copy.h" #include "../include/patch.h" #include "../include/delta.h" #include "../include/diff_range.h" using namespace v8; using namespace node; GitPatch::GitPatch(git_diff_patch *raw) { this->raw = raw; } GitPatch::~GitPatch() { git_diff_patch_free(this->raw); } void GitPatch::Initialize(Handle target) { NanScope(); Local tpl = FunctionTemplate::New(New); tpl->InstanceTemplate()->SetInternalFieldCount(1); tpl->SetClassName(NanSymbol("Patch")); NODE_SET_PROTOTYPE_METHOD(tpl, "delta", Delta); NODE_SET_PROTOTYPE_METHOD(tpl, "size", Size); NODE_SET_PROTOTYPE_METHOD(tpl, "stats", Stats); NODE_SET_PROTOTYPE_METHOD(tpl, "hunk", Hunk); NODE_SET_PROTOTYPE_METHOD(tpl, "lines", Lines); NODE_SET_PROTOTYPE_METHOD(tpl, "line", Line); NODE_SET_METHOD(tpl, "toString", ToString); NanAssignPersistent(FunctionTemplate, constructor_template, tpl); target->Set(String::NewSymbol("Patch"), tpl->GetFunction()); } NAN_METHOD(GitPatch::New) { NanScope(); if (args.Length() == 0 || !args[0]->IsExternal()) { return NanThrowError(String::New("git_diff_patch is required.")); } GitPatch* object = new GitPatch((git_diff_patch *) External::Cast(*args[0])->Value()); object->Wrap(args.This()); NanReturnValue(args.This()); } Handle GitPatch::New(void *raw) { NanScope(); Handle argv[1] = { External::New((void *)raw) }; Local instance; Local constructorHandle = NanPersistentToLocal(constructor_template); instance = constructorHandle->GetFunction()->NewInstance(1, argv); return scope.Close(instance); } git_diff_patch *GitPatch::GetValue() { return this->raw; } /** * @return {Delta} result */ NAN_METHOD(GitPatch::Delta) { NanScope(); const git_diff_delta * result = git_diff_patch_delta( ObjectWrap::Unwrap(args.This())->GetValue() ); Handle to; if (result != NULL) { result = (const git_diff_delta * )git_diff_delta_dup(result); } if (result != NULL) { to = GitDelta::New((void *)result); } else { to = Null(); } NanReturnValue(to); } /** * @return {Number} result */ NAN_METHOD(GitPatch::Size) { NanScope(); size_t result = git_diff_patch_num_hunks( ObjectWrap::Unwrap(args.This())->GetValue() ); Handle to; to = Uint32::New(result); NanReturnValue(to); } /** * @return {Number} total_context * @return {Number} total_additions * @return {Number} total_deletions */ NAN_METHOD(GitPatch::Stats) { NanScope(); size_t total_context = 0; size_t total_additions = 0; size_t total_deletions = 0; int result = git_diff_patch_line_stats( &total_context , &total_additions , &total_deletions , ObjectWrap::Unwrap(args.This())->GetValue() ); if (result != GIT_OK) { if (giterr_last()) { return NanThrowError(String::New(giterr_last()->message)); } else { return NanThrowError(String::New("Unkown Error")); } } Handle toReturn = Object::New(); Handle to; to = Integer::New(total_context); toReturn->Set(String::NewSymbol("total_context"), to); to = Integer::New(total_additions); toReturn->Set(String::NewSymbol("total_additions"), to); to = Integer::New(total_deletions); toReturn->Set(String::NewSymbol("total_deletions"), to); NanReturnValue(toReturn); } /** * @param {Number} hunk_idx * @return {DiffRange} range * @return {String} header * @return {Number} header_len * @return {Number} lines_in_hunk */ NAN_METHOD(GitPatch::Hunk) { NanScope(); if (args.Length() == 0 || !args[0]->IsUint32()) { return NanThrowError(String::New("Number hunk_idx is required.")); } const git_diff_range * range = 0; const char * header = 0; size_t header_len = 0; size_t lines_in_hunk = 0; size_t from_hunk_idx; from_hunk_idx = (size_t) args[0]->ToUint32()->Value(); int result = git_diff_patch_get_hunk( &range , &header , &header_len , &lines_in_hunk , ObjectWrap::Unwrap(args.This())->GetValue() , from_hunk_idx ); if (result != GIT_OK) { if (giterr_last()) { return NanThrowError(String::New(giterr_last()->message)); } else { return NanThrowError(String::New("Unkown Error")); } } Handle toReturn = Object::New(); Handle to; if (range != NULL) { range = (const git_diff_range * )git_diff_range_dup(range); } if (range != NULL) { to = GitDiffRange::New((void *)range); } else { to = Null(); } toReturn->Set(String::NewSymbol("range"), to); to = String::New(header); toReturn->Set(String::NewSymbol("header"), to); to = Uint32::New(header_len); toReturn->Set(String::NewSymbol("headerLength"), to); to = Uint32::New(lines_in_hunk); toReturn->Set(String::NewSymbol("lines"), to); NanReturnValue(toReturn); } /** * @param {Number} hunk_idx * @return {Number} result */ NAN_METHOD(GitPatch::Lines) { NanScope(); if (args.Length() == 0 || !args[0]->IsUint32()) { return NanThrowError(String::New("Number hunk_idx is required.")); } size_t from_hunk_idx; from_hunk_idx = (size_t) args[0]->ToUint32()->Value(); int result = git_diff_patch_num_lines_in_hunk( ObjectWrap::Unwrap(args.This())->GetValue() , from_hunk_idx ); Handle to; to = Int32::New(result); NanReturnValue(to); } /** * @param {Number} hunk_idx * @param {Number} line_of_hunk * @return {Number} line_origin * @return {String} content * @return {Number} content_len * @return {Number} old_lineno * @return {Number} new_lineno */ NAN_METHOD(GitPatch::Line) { NanScope(); if (args.Length() == 0 || !args[0]->IsUint32()) { return NanThrowError(String::New("Number hunk_idx is required.")); } if (args.Length() == 1 || !args[1]->IsUint32()) { return NanThrowError(String::New("Number line_of_hunk is required.")); } char line_origin = 0; const char * content = 0; size_t content_len = 0; int old_lineno = 0; int new_lineno = 0; size_t from_hunk_idx; from_hunk_idx = (size_t) args[0]->ToUint32()->Value(); size_t from_line_of_hunk; from_line_of_hunk = (size_t) args[1]->ToUint32()->Value(); int result = git_diff_patch_get_line_in_hunk( &line_origin , &content , &content_len , &old_lineno , &new_lineno , ObjectWrap::Unwrap(args.This())->GetValue() , from_hunk_idx , from_line_of_hunk ); if (result != GIT_OK) { if (giterr_last()) { return NanThrowError(String::New(giterr_last()->message)); } else { return NanThrowError(String::New("Unkown Error")); } } Handle toReturn = Object::New(); Handle to; to = Integer::New(line_origin); toReturn->Set(String::NewSymbol("lineOrigin"), to); to = String::New(content, content_len); toReturn->Set(String::NewSymbol("content"), to); to = Uint32::New(content_len); toReturn->Set(String::NewSymbol("length"), to); to = Int32::New(old_lineno); toReturn->Set(String::NewSymbol("oldLineNumber"), to); to = Int32::New(new_lineno); toReturn->Set(String::NewSymbol("newLineNumber"), to); NanReturnValue(toReturn); } /** * @return {String} string */ NAN_METHOD(GitPatch::ToString) { NanScope(); char * string = 0; int result = git_diff_patch_to_str( &string , ObjectWrap::Unwrap(args.This())->GetValue() ); if (result != GIT_OK) { if (giterr_last()) { return NanThrowError(String::New(giterr_last()->message)); } else { return NanThrowError(String::New("Unkown Error")); } } Handle to; to = String::New(string); free(string); NanReturnValue(to); } Persistent GitPatch::constructor_template;