feat: implement muse rev-list — raw commit ID stream with filters
Closes staging issue #11.
New command: muse rev-list [<ref>|<A>..<B>] [flags]
Flags: --count emit single integer (O(1) memory — counter, no list) -n / --max-count short-circuit walk after N matches --first-parent linear chain only, skip merge parents --no-merges exclude merge commits --merges only merge commits --author PATTERN regex/substring filter on author --after DATE commits after YYYY-MM-DD (UTC) --before DATE commits before YYYY-MM-DD (UTC) --touches PATH commits that changed PATH (prefix-matched, manifest cache) --reverse oldest-first output --json {"commit_ids": [...]} envelope
Range syntax: A..B emits commits reachable from B not from A. _walk_from uses deque (O(1) popleft/appendleft). _commit_touches_path uses per-invocation manifest cache (same pattern as log.py). --touches path validated against traversal sequences before any I/O.
Tests: 26 passing — unit (AST deque check, _parse_range, _parse_date), integration (all flags, range syntax, filters), security (traversal, ref injection, bad regex), stress (500-commit --count flat memory, 50-commit touches)
0 comments
muse hub commit comment sha256:b0f78cddeee7edb8e5cf6fc9df7959d1ede1a3b607cc9c35c1ae58205430403e --body "your comment"
No comments yet. Be the first to start the discussion.