Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Show state changes and actor/assignee filters in activity

8e93a8f0e42847734facadaa8a56f857ed1a1565 · Keenan Nemetz · 15d ago · parent 2973f727

Show state changes and actor/assignee filters in activity

Issue state changes now write a canonical "issue: <id> <state>" subject, the same shape requests already used, so the feed can read closed, reopened, and merged events from the metadata log without diffing historical files. The CLI and the web share metadata.SetIssueState.

The repository feed filters by type, actor, and assignee. Filters survive type changes and HTMX swaps, and are applied before the 100-event limit so an older matching event is not hidden by newer unrelated ones.

client/branch.go +25

@@ -228,6 +228,31 @@ func (b *Branch) ApplyIssue(id string, mutate func(*metadata.Issue) error, actor
228 228 return updated, nil
229 229 }
230 230
231 // SetIssueState closes or reopens one issue. It is a dedicated path rather than
232 // ApplyIssue so the metadata commit names the state, which is what the activity
233 // feed reads.
234 func (b *Branch) SetIssueState(id, state, actor string, noPush bool) (*metadata.Issue, error) {
235 var updated *metadata.Issue
236 reapply := func() error {
237 var uerr error
238 updated, uerr = metadata.SetIssueState(b.Repo, id, state, actor)
239 if errors.Is(uerr, metadata.ErrNoChange) {
240 return nil
241 }
242 return uerr
243 }
244 if err := reapply(); err != nil {
245 return nil, err
246 }
247 if updated == nil {
248 return nil, nil
249 }
250 if err := b.CommitAndPush(noPush, reapply); err != nil {
251 return nil, err
252 }
253 return updated, nil
254 }
255
231 256 // ResolveCommentID turns a typed comment id into a full one, the way
232 257 // ResolveIssueID does for issues: a prefix has to work or printed ids are unusable.
233 258 func (b *Branch) ResolveCommentID(issueID, given string) (string, error) {