Skip to content

Commit e1b64ee

Browse files
committed
Merge pull request #496 from billt2006/fix-symbolic-refs
Fix symbolic reference handling in getReferences
2 parents a09b41a + f3d0812 commit e1b64ee

File tree

2 files changed

+25
-32
lines changed

2 files changed

+25
-32
lines changed

examples/general.js

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -343,23 +343,18 @@ nodegit.Repository.open(path.resolve(__dirname, "../.git"))
343343
// references such as branches, tags and remote references (everything in
344344
// the .git/refs directory).
345345

346-
return repo.getReferenceNames(nodegit.Reference.TYPE.ALL);
346+
return nodegit.Repository.getReferences(repo,
347+
nodegit.Reference.TYPE.LISTALL, false, true);
347348
})
348349

349-
.then(function(referenceNames) {
350-
var promises = [];
351-
352-
referenceNames.forEach(function(referenceName) {
353-
promises.push(repo.getReference(referenceName).then(function(reference) {
354-
if (reference.isConcrete()) {
355-
console.log("Reference:", referenceName, reference.target());
356-
} else if (reference.isSymbolic()) {
357-
console.log("Reference:", referenceName, reference.symbolicTarget());
358-
}
359-
}));
350+
.then(function(references) {
351+
references.forEach(function(reference) {
352+
if (reference.isConcrete()) {
353+
console.log("Reference:", reference.name(), reference.target());
354+
} else if (reference.isSymbolic()) {
355+
console.log("Reference:", reference.name(), reference.symbolicTarget());
356+
}
360357
});
361-
362-
return Promise.all(promises);
363358
})
364359

365360
.done(function() {

lib/repository.js

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -145,29 +145,27 @@ Repository.prototype.getReference = function(name, callback) {
145145
}, callback);
146146
};
147147

148-
Repository.getReferences = function(repo, type, refNamesOnly, callback) {
148+
Repository.getReferences =
149+
function(repo, type, refNamesOnly, includeSymbolic, callback) {
150+
if (!callback && typeof includeSymbolic === "function") {
151+
callback = includeSymbolic;
152+
includeSymbolic = false;
153+
}
149154
return Reference.list(repo).then(function(refList) {
150155
var refFilterPromises = [];
151156
var filteredRefs = [];
152157

153158
refList.forEach(function(refName) {
154159
refFilterPromises.push(Reference.lookup(repo, refName)
155160
.then(function(ref) {
156-
if (type == Reference.TYPE.ALL || ref.type() == type) {
157-
if (refNamesOnly) {
158-
filteredRefs.push(refName);
159-
return;
160-
}
161-
162-
if (ref.isSymbolic()) {
163-
return ref.resolve().then(function(resolvedRef) {
164-
resolvedRef.repo = repo;
165-
166-
filteredRefs.push(resolvedRef);
167-
});
168-
}
169-
else {
170-
filteredRefs.push(ref);
161+
if (type == Reference.TYPE.LISTALL || ref.type() == type) {
162+
if (!ref.isSymbolic() || includeSymbolic) {
163+
if (refNamesOnly) {
164+
filteredRefs.push(refName);
165+
}
166+
else {
167+
filteredRefs.push(ref);
168+
}
171169
}
172170
}
173171
})
@@ -192,7 +190,7 @@ Repository.getReferences = function(repo, type, refNamesOnly, callback) {
192190
* @return {Array<Reference>}
193191
*/
194192
Repository.prototype.getReferences = function(type, callback) {
195-
return Repository.getReferences(this, type, false, callback);
193+
return Repository.getReferences(this, type, false, false, callback);
196194
};
197195

198196
/**
@@ -203,7 +201,7 @@ Repository.prototype.getReferences = function(type, callback) {
203201
* @return {Array<String>}
204202
*/
205203
Repository.prototype.getReferenceNames = function(type, callback) {
206-
return Repository.getReferences(this, type, true, callback);
204+
return Repository.getReferences(this, type, true, false, callback);
207205
};
208206

209207
/**

0 commit comments

Comments
 (0)