Lindenii Project Forge
Warning: Due to various recent migrations, viewing non-HEAD refs may be broken.
/git/walk.ha (raw)
use errors;
use fs;
use io;
use strconv;
// List recent commits starting from the given commit ID, following first
// parents only.
// TODO: Consider cases with merge commits.
export fn recent_commits(r: repo, start: oid, limit: int)
([]commit | error) = {
if (limit <= 0) {
let empty: []commit = [];
return empty;
};
let out: []commit = [];
let cur = start;
for (let n = 0; n < limit; n += 1) {
match (read_object(r, cur)) {
case let c: commit =>
append(out, c)!;
if (len(c.parents) == 0) {
return out;
};
cur = c.parents[0];
case let b: blob =>
blob_finish(b);
return errors::invalid;
case let t: tree =>
tree_finish(t);
return errors::invalid;
case let e: (fs::error | io::error | errors::invalid | strconv::invalid | strconv::overflow | nomem) =>
return (e: error);
};
};
return out;
};