forked from nodegit/nodegit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwalk-history-for-file.js
More file actions
55 lines (46 loc) · 1.61 KB
/
walk-history-for-file.js
File metadata and controls
55 lines (46 loc) · 1.61 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
var nodegit = require("../"),
path = require("path");
// This code walks the history of the master branch and prints results
// that look very similar to calling `git log` from the command line
nodegit.Repository.open(path.resolve(__dirname, "../.git"))
.then(function(repo) {
return repo.getMasterCommit();
})
.then(function(firstCommitOnMaster){
// History returns an event.
var history = firstCommitOnMaster.history(nodegit.Revwalk.SORT.Time);
var commits = [];
// History emits "commit" event for each commit in the branch's history
history.on("commit", function(commit) {
return commit.getDiff()
.then(function(diffList) {
var addCommit = diffList.reduce(function(prevVal, diff) {
var result =
prevVal ||
diff.patches().reduce(function(prevValDiff, patch) {
var result =
prevValDiff ||
!!~patch.oldFile().path().indexOf("descriptor.json") ||
!!~patch.newFile().path().indexOf("descriptor.json");
return result;
}, false);
return result;
}, false);
if (addCommit) {
commits.push(commit);
}
});
});
history.on("end", function() {
commits.forEach(function(commit) {
console.log("commit " + commit.sha());
console.log("Author:", commit.author().name() +
" <" + commit.author().email() + ">");
console.log("Date:", commit.date());
console.log("\n " + commit.message());
});
});
// Don't forget to call `start()`!
history.start();
})
.done();