-
Notifications
You must be signed in to change notification settings - Fork 695
/
signature.js
134 lines (113 loc) · 3.85 KB
/
signature.js
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
var assert = require("assert");
var path = require("path");
var local = path.join.bind(path, __dirname);
var garbageCollect = require("../utils/garbage_collect.js");
var exec = require("../../utils/execPromise");
describe("Signature", function() {
var NodeGit = require("../../");
var Repository = NodeGit.Repository;
var Signature = NodeGit.Signature;
var reposPath = local("../repos/workdir");
var name = "Bob Gnarley";
var email = "gnarlee@bob.net";
var arbitraryDate = 123456789;
var timezoneOffset = 60;
it("can be created at an arbitrary time", function() {
var create = Signature.create;
var signature = create(name, email, arbitraryDate, timezoneOffset);
assert.equal(signature.name(), name);
assert.equal(signature.email(), email);
assert.equal(signature.when().time(), arbitraryDate);
assert.equal(signature.when().offset(), 60);
});
it("can be created now", function() {
var signature = Signature.now(name, email);
var now = new Date();
var when = signature.when();
var diff = Math.abs(when.time() - now/1000);
assert.equal(signature.name(), name);
assert.equal(signature.email(), email);
assert(diff <= 1);
// libgit2 does its timezone offsets backwards from javascript
assert.equal(when.offset(), -now.getTimezoneOffset());
});
it("can get a default signature when no user name is set", function() {
var savedUserName;
var savedUserEmail;
var cleanUp = () => {
return exec("git config --global user.name \"" + savedUserName + "\"")
.then(() => {
exec("git config --global user.email \"" + savedUserEmail + "\"");
});
};
return exec("git config --global user.name")
.then((userName) => {
savedUserName = userName.trim();
return exec("git config --global user.email");
})
.then((userEmail) => {
savedUserEmail = userEmail.trim();
return exec("git config --global --unset user.name");
})
.then(() => {
return exec("git config --global --unset user.email");
})
.then(() => {
return Repository.open(reposPath);
})
.then((repo) => {
return repo.defaultSignature();
})
.then((sig) => {
assert.equal(sig.name(), "unknown");
assert.equal(sig.email(), "unknown@example.com");
})
.then(cleanUp)
.catch((e) => {
return cleanUp()
.then(function() {
return Promise.reject(e);
});
});
});
it("duplicates time", function() {
garbageCollect();
var Time = NodeGit.Time;
var startSelfFreeingCount = Time.getSelfFreeingInstanceCount();
var startNonSelfFreeingCount =
Time.getNonSelfFreeingConstructedCount();
var time = Signature.now(name, email).when();
garbageCollect();
var endSelfFreeingCount = Time.getSelfFreeingInstanceCount();
var endNonSelfFreeingCount = Time.getNonSelfFreeingConstructedCount();
// we should get one duplicated, self-freeing time
assert.equal(startSelfFreeingCount + 1, endSelfFreeingCount);
assert.equal(startNonSelfFreeingCount, endNonSelfFreeingCount);
time = null;
garbageCollect();
endSelfFreeingCount = Time.getSelfFreeingInstanceCount();
// the self-freeing time should get freed
assert.equal(startSelfFreeingCount, endSelfFreeingCount);
});
it("toString does not provide a timestamp by default", function () {
const signature = Signature.create(
"Shaggy Rogers",
"shaggy@mystery.com",
987654321,
90
);
assert.equal(signature.toString(), "Shaggy Rogers <shaggy@mystery.com>");
});
it("toString provides the correct timestamp when requested", function() {
const signature = Signature.create(
"Shaggy Rogers",
"shaggy@mystery.com",
987654321,
90
);
assert.equal(
signature.toString(true),
"Shaggy Rogers <shaggy@mystery.com> 987654321 +0130"
);
});
});