-
Notifications
You must be signed in to change notification settings - Fork 698
Expand file tree
/
Copy pathworker_context_aware_checkout.js
More file actions
66 lines (59 loc) · 1.85 KB
/
Copy pathworker_context_aware_checkout.js
File metadata and controls
66 lines (59 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const {
isMainThread,
parentPort,
workerData
} = require("worker_threads");
const garbageCollect = require("./garbage_collect.js");
const assert = require("assert");
const NodeGit = require("../../");
const loopingCheckoutHead = require("./loop_checkout.js");
const { promisify } = require("util");
if (isMainThread) {
throw new Error("Must be run via worker thread");
}
const { clonePath, url } = workerData;
const cloneOpts = {
fetchOpts: {
callbacks: {
certificateCheck: () => 0
}
}
};
let repository;
let filterName = "psuedo_filter";
let applyCallbackResult = 1;
return NodeGit.Clone(url, clonePath, cloneOpts)
.then(function(_repository) {
repository = _repository;
assert.ok(repository instanceof NodeGit.Repository);
return NodeGit.FilterRegistry.register(filterName, {
apply: function() {
applyCallbackResult = 0;
},
check: function() {
return NodeGit.Error.CODE.OK;
}
}, 0);
})
.then(function(result) {
assert.strictEqual(result, NodeGit.Error.CODE.OK);
return loopingCheckoutHead(clonePath, repository, 10);
}).then(function() {
assert.strictEqual(applyCallbackResult, 0);
// Tracked objects must work too when the Garbage Collector is triggered
garbageCollect();
// Count total of objects left after being created/destroyed
const freeingCount =
NodeGit.Cert.getNonSelfFreeingConstructedCount() +
NodeGit.FilterSource.getNonSelfFreeingConstructedCount() +
NodeGit.Buf.getNonSelfFreeingConstructedCount() +
NodeGit.Repository.getSelfFreeingInstanceCount();
const numberOfTrackedObjects = NodeGit.getNumberOfTrackedObjects();
if (freeingCount === numberOfTrackedObjects) {
parentPort.postMessage("numbersMatch");
}
else {
parentPort.postMessage("numbersDoNotMatch");
}
return promisify(setTimeout)(50000);
}).catch((err) => parentPort.postMessage("failure"));