Range-diff !531

back to !531 Saved queries for issues and merge requests across repositories

1:  4d805b1 ! 1:  efe33ae store: saved queries and a cross-repository issue and MR query
    @@ Commit message
     
         Ref #292
     
    - ## internal/store/migrations/0068_saved_queries.down.sql (new) ##
    + ## internal/store/migrations/0071_saved_queries.down.sql (new) ##
     @@
     +DROP TABLE saved_queries;
     
    - ## internal/store/migrations/0068_saved_queries.up.sql (new) ##
    + ## internal/store/migrations/0071_saved_queries.up.sql (new) ##
     @@
     +-- A user's named issue and merge request queries (#292). query is the
     +-- canonical text of the query; it is parsed again on every run, and @me
2:  46da2c4 ! 2:  7b68821 control: query save|list|show|run|remove|pin|unpin, issue and mr list --query/--q, pinned queries on dashboard
    @@ Commit message
         Ref #292
     
      ## cmd/gitbay/local.go ##
    -@@ cmd/gitbay/local.go: func worktreeDirty() (bool, error) {
    +@@ cmd/gitbay/local.go: func gitRaw(env, stdin string, args ...string) (string, int) {
      	}
    - 	return strings.TrimSpace(string(out)) != "", nil
    + 	return string(out), 0
      }
     +
     +// anyFlag reports whether any of flags is in args.
3:  bd6f535 ! 3:  6194895 web: pinned queries on the dashboard, /{owner}/-/queries and /{owner}/-/queries/{name}
    @@ internal/httpd/queries_test.go (new)
     
      ## internal/httpd/routes.go ##
     @@ internal/httpd/routes.go: func (s *Server) Routes() []Route {
    - 			Route{Method: "POST", Pattern: "/{owner}/{repo}/labels", Mutating: true,
    - 				Handler: s.checkOrigin(s.requireUser(s.labelSubmit))},
    + 			Route{Method: "POST", Pattern: "/{owner}/-/milestones", Mutating: true,
    + 				Handler: s.checkOrigin(s.requireUser(s.orgMilestoneSubmit))},
      			Route{Method: "GET", Pattern: "/bookmarks", Handler: s.requireUser(s.bookmarksPage)},
     +			Route{Method: "GET", Pattern: "/{owner}/-/queries", Handler: s.requireUser(s.queriesPage)},
     +			Route{Method: "GET", Pattern: "/{owner}/-/queries/{name}", Handler: s.requireUser(s.queriesPage)},
4:  f820162 = 4:  04879db e2e: saved queries over ssh and the web; query reads in the read-only sweep
5:  6a20806 ! 5:  d5176c7 saved queries: cap saved at 50 and pinned at 10, readability per repository, repo_id/created_at indexes, refuse is:merged assignee:
    @@ internal/control/querylang_test.go: func TestParseItemQueryRefuses(t *testing.T)
      		{"repo:krz", "repo:krz"},
      		{"repo:*/gitbay", "repo:*/gitbay"},
     
    - ## internal/store/migrations/0068_saved_queries.down.sql ##
    + ## internal/store/migrations/0071_saved_queries.down.sql ##
     @@
     +DROP INDEX merge_requests_repo_created;
     +DROP INDEX issues_repo_created;
      DROP TABLE saved_queries;
     
    - ## internal/store/migrations/0068_saved_queries.up.sql ##
    -@@ internal/store/migrations/0068_saved_queries.up.sql: CREATE TABLE saved_queries (
    + ## internal/store/migrations/0071_saved_queries.up.sql ##
    +@@ internal/store/migrations/0071_saved_queries.up.sql: CREATE TABLE saved_queries (
          updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
          UNIQUE (user_id, name)
      );
6:  ee6b442 ! 6:  418efce wiki, changelog: saved queries
    @@ .gitbay/wiki/Users.org: Lists narrow the same way on every surface: =issue list
      carry it, and =label remove= takes one off all of them. =issue label
     
      ## CHANGELOG.org ##
    -@@ CHANGELOG.org: Versioning follows semver from v0.1.0. Database migrations run
    - automatically on daemon start; upgrade notes appear per release when
    - anything beyond "replace the binary and restart" is needed.
    - 
    -+* Unreleased
    -+
    +@@ CHANGELOG.org: anything beyond "replace the binary and restart" is needed.
    + - Reactions on issues, merge requests and their comments: =issue react=
    +   and =mr react= with a fixed set of eight, counts and your own in
    +   =show=, comment ids in =show=, and buttons on the web pages (#291).
     +- Saved queries: =query save|list|show|run|remove|pin|unpin= keep a
     +  named query over issues and merge requests across every repository
     +  the caller can read (=repo:=, =owner:=, =is:=, =label:=, =no:=,
    @@ CHANGELOG.org: Versioning follows semver from v0.1.0. Database migrations run
     +  with ={items, next}=. =dashboard= gains =queries= for pinned ones; the
     +  web shows them on the dashboard and at =/<you>/-/queries=. An account
     +  keeps at most 50 saved queries, 10 pinned (#292).
    -+
    + 
      * v1.38.0 — 2026-09-29
      
    - Merge when ready, build egress by trust class, and restore-drill