diff --git a/generate/templates/manual/patches/convenient_patches.cc b/generate/templates/manual/patches/convenient_patches.cc index 79823e37a..27de54fcf 100644 --- a/generate/templates/manual/patches/convenient_patches.cc +++ b/generate/templates/manual/patches/convenient_patches.cc @@ -95,8 +95,15 @@ void GitPatch::ConvenientFromDiffWorker::HandleOKCallback() { } if (baton->error) { + Local err; + if (baton->error->message) { + err = Nan::Error(baton->error->message)->ToObject(); + } else { + err = Nan::Error("Method convenientFromDiff has thrown an error.")->ToObject(); + } + err->Set(Nan::New("errno").ToLocalChecked(), Nan::New(baton->error_code)); Local argv[1] = { - Nan::Error(baton->error->message) + err }; callback->Call(1, argv); if (baton->error->message) diff --git a/generate/templates/manual/revwalk/fast_walk.cc b/generate/templates/manual/revwalk/fast_walk.cc index 2f263f83f..ec3a10cd7 100644 --- a/generate/templates/manual/revwalk/fast_walk.cc +++ b/generate/templates/manual/revwalk/fast_walk.cc @@ -88,8 +88,15 @@ void GitRevwalk::FastWalkWorker::HandleOKCallback() { if (baton->error) { + Local err; + if (baton->error->message) { + err = Nan::Error(baton->error->message)->ToObject(); + } else { + err = Nan::Error("Method fastWalk has thrown an error.")->ToObject(); + } + err->Set(Nan::New("errno").ToLocalChecked(), Nan::New(baton->error_code)); Local argv[1] = { - Nan::Error(baton->error->message) + err }; callback->Call(1, argv); if (baton->error->message) diff --git a/generate/templates/manual/revwalk/file_history_walk.cc b/generate/templates/manual/revwalk/file_history_walk.cc index 0f511969f..220482679 100644 --- a/generate/templates/manual/revwalk/file_history_walk.cc +++ b/generate/templates/manual/revwalk/file_history_walk.cc @@ -289,8 +289,15 @@ void GitRevwalk::FileHistoryWalkWorker::HandleOKCallback() } if (baton->error) { + Local err; + if (baton->error->message) { + err = Nan::Error(baton->error->message)->ToObject(); + } else { + err = Nan::Error("Method fileHistoryWalk has thrown an error.")->ToObject(); + } + err->Set(Nan::New("errno").ToLocalChecked(), Nan::New(baton->error_code)); Local argv[1] = { - Nan::Error(baton->error->message) + err }; callback->Call(1, argv); if (baton->error->message) diff --git a/generate/templates/partials/async_function.cc b/generate/templates/partials/async_function.cc index 633ebbfae..b8e19ddb0 100644 --- a/generate/templates/partials/async_function.cc +++ b/generate/templates/partials/async_function.cc @@ -155,8 +155,15 @@ void {{ cppClassName }}::{{ cppFunctionName }}Worker::HandleOKCallback() { callback->Call(2, argv); } else { if (baton->error) { + v8::Local err; + if (baton->error->message) { + err = Nan::Error(baton->error->message)->ToObject(); + } else { + err = Nan::Error("Method {{ jsFunctionName }} has thrown an error.")->ToObject(); + } + err->Set(Nan::New("errno").ToLocalChecked(), Nan::New(baton->error_code)); v8::Local argv[1] = { - Nan::Error(baton->error->message) + err }; callback->Call(1, argv); if (baton->error->message) diff --git a/test/tests/merge.js b/test/tests/merge.js index 5bf3cb81c..66728bdb9 100644 --- a/test/tests/merge.js +++ b/test/tests/merge.js @@ -1612,4 +1612,26 @@ describe("Merge", function() { assert.ok(repository.isDefaultState()); }); }); + + it("can retrieve error code on if common merge base not found", function() { + var repo; + return NodeGit.Repository.open(local("../repos/workdir")) + .then(function(r) { + repo = r; + return repo.getCommit("4bd806114ce26503c103c85dcc985021951bbc18"); + }) + .then(function(commit) { + return commit.getParents(commit.parentcount()); + }) + .then(function(parents) { + return NodeGit.Merge.base(repo, parents[0], parents[1]) + .then(function() { + return Promise.reject(new Error( + "should not be able to retrieve common merge base")); + }, function(err) { + assert.equal("no merge base found", err.message); + assert.equal(NodeGit.Error.CODE.ENOTFOUND, err.errno); + }); + }); + }); });