Skip to content
Merged
27 changes: 27 additions & 0 deletions generate/input/callbacks.json
Original file line number Diff line number Diff line change
Expand Up @@ -798,6 +798,33 @@
"throttle": 100
}
},
"git_push_transfer_progress": {
"args": [
{
"name": "current",
"type": "unsigned int"
},
{
"name": "total",
"type": "unsigned int"
},
{
"name": "bytes",
"type": "size_t"
},
{
"name": "payload",
"type": "void *"
}
],
"return": {
"type": "int",
"noResults": 0,
"success": 0,
"error": -1,
"throttle": 100
}
},
"git_transport_cb": {
"args": [
{
Expand Down
3 changes: 0 additions & 3 deletions generate/input/descriptor.json
Original file line number Diff line number Diff line change
Expand Up @@ -2311,9 +2311,6 @@
"push_negotiation": {
"ignore": true
},
"push_transfer_progress": {
"ignore": true
},
"sideband_progress": {
"ignore": true
},
Expand Down
5 changes: 5 additions & 0 deletions generate/input/libgit2-supplement.json
Original file line number Diff line number Diff line change
Expand Up @@ -698,6 +698,11 @@
"type": "git_transfer_progress_cb",
"name": "transfer_progress"
},
{
"type": "git_push_transfer_progress",
"name": "push_transfer_progress",
"isCallback": true
},
{
"type": "git_transport_cb",
"name": "transport",
Expand Down
6 changes: 3 additions & 3 deletions generate/scripts/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ var Helpers = {
});
},

isCallbackFunction: function(cType) {
return callbackTypePattern.test(cType);
isCallbackFunction: function(cType, isCallback) {
return isCallback === true || callbackTypePattern.test(cType);
},

isPayloadFor: function(cbField, payloadName) {
Expand Down Expand Up @@ -228,7 +228,7 @@ var Helpers = {
field.jsClassName = utils.titleCase(Helpers.cTypeToJsName(field.type));
field.ownedByThis = true;

if (Helpers.isCallbackFunction(field.cType)) {
if (Helpers.isCallbackFunction(field.cType, field.isCallback)) {
Helpers.processCallback(field);

var argOverrides = fieldOverrides.args || {};
Expand Down
58 changes: 58 additions & 0 deletions test/tests/remote.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ var _ = require("lodash");
var fp = require("lodash/fp");

var garbageCollect = require("../utils/garbage_collect.js");
var RepoUtils = require("../utils/repository_setup");

describe("Remote", function() {
var NodeGit = require("../../");
var Repository = NodeGit.Repository;
var Remote = NodeGit.Remote;

var reposPath = local("../repos/workdir");
var bareReposPath = local("../repos/bare");
var url = "https://github.com/nodegit/test";
var url2 = "https://github.com/nodegit/test2";
var privateUrl = "[email protected]:nodegit/private";
Expand Down Expand Up @@ -44,6 +46,9 @@ describe("Remote", function() {
test.remote = remote;

return removeNonOrigins(test.repository);
})
.then(function() {
return RepoUtils.createRepository(bareReposPath, 1);
});
});

Expand Down Expand Up @@ -129,6 +134,59 @@ describe("Remote", function() {
});
});

it("can monitor transfer progress while pushing", function() {
var repo = this.repository;
var wasCalled = false;

return Remote.create(repo, "bare", bareReposPath)
.then(function(remote) {
var fetchOpts = {
callbacks: {
pushTransferProgress: function() {
wasCalled = true;
}
}
};

var ref = "refs/heads/master";
var refs = [ref + ":" + ref];

return remote.push(refs, fetchOpts)
.then(function(res) {
assert.ok(wasCalled);
});
});
});

it("can monitor transfer progress while pushing with throttling",
function() {
var repo = this.repository;
var wasCalled = false;

return Remote.create(repo, "bare", bareReposPath)
.then(function(remote) {
var fetchOpts = {
callbacks: {
pushTransferProgress: {
throttle: 200,
callback: function() {
wasCalled = true;
},
}
}
};

var ref = "refs/heads/master";
var refs = [ref + ":" + ref];

return remote.push(refs, fetchOpts)
.then(function(res) {
assert.ok(wasCalled);
});
});
}
);

it("can monitor transfer progress while downloading", function() {
// Set a reasonable timeout here now that our repository has grown.
this.timeout(600000);
Expand Down
5 changes: 3 additions & 2 deletions test/utils/repository_setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@ var RepositorySetup = {
},

createRepository:
function createRepository(repoPath){
function createRepository(repoPath, isBare){
// Create a new repository in a clean directory
return fse.remove(repoPath)
.then(function() {
return fse.ensureDir(repoPath);
})
.then(function() {
return NodeGit.Repository.init(repoPath, 0);
var bare = typeof isBare !== "undefined" ? isBare : 0;
return NodeGit.Repository.init(repoPath, bare);
});
},

Expand Down