refSpec method
Implementation
Future<GitObjectResult> refSpec(GitTree tree, String spec) async {
assert(!spec.startsWith(p.separator));
if (spec.isEmpty) {
return GitObjectResult(tree);
}
var parts = splitPath(spec);
var name = parts.item1;
var remainingName = parts.item2;
for (var leaf in tree.entries) {
if (leaf.name == name) {
var result = await read(leaf.hash);
var obj = result.get();
if (remainingName.isEmpty) {
return GitObjectResult(obj);
}
if (obj is GitTree) {
return refSpec(obj, remainingName);
} else {
return GitObjectResult.fail(
GitObjectWithRefSpecNotFound(spec),
);
}
}
}
return GitObjectResult.fail(
GitObjectWithRefSpecNotFound(spec),
);
}