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/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

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

Search issues, changes and comments from one page

72f222921280b3c6c920ee81f6595b52563bb648 · Keenan Nemetz · 10d ago · parent 6762a520

Search issues, changes and comments from one page

/search asks one question across the whole instance. The results are the
rows from the search table, shown with the kind, the repository, the
`#42` number when there is one, the author, and the matched sentence with
the match marked.

Two rules make the page honest:

- Visibility is the page rule, not a second one. The handler asks the
  index for the repositories the request may read and passes only those
  ids to the query, so a private repository's titles cannot appear.
- Freshness does not depend on a page having been visited. A search
  refreshes the repositories it is allowed to see before querying, so an
  issue pushed a minute ago is found even if nobody opened its repository
  since.

An exact `#42` or id prefix is answered before the text search, so the
entity someone named is the first row. The snippet is escaped before its
match markers become tags.

The header gains a Search item next to Activity; the repository search
box on the home page is unchanged.

server/web/templates/chrome.html +1

@@ -29,6 +29,7 @@
29 29 <nav class="topnav" aria-label="Global">
30 30 <a class="{{if eq .Section "repos"}}active{{end}}" href="/"{{if eq .Section "repos"}} aria-current="page"{{end}}>{{icon "house"}}Home</a>
31 31 <a class="{{if eq .Section "activity"}}active{{end}}" href="/activity"{{if eq .Section "activity"}} aria-current="page"{{end}}>{{icon "activity"}}Activity</a>
32 <a class="{{if eq .Section "search"}}active{{end}}" href="/search"{{if eq .Section "search"}} aria-current="page"{{end}}>{{icon "search"}}Search</a>
32 33 {{if .InstanceAdmin}}<a class="{{if eq .Section "users"}}active{{end}}" href="/users"{{if eq .Section "users"}} aria-current="page"{{end}}>{{icon "users"}}Accounts</a>{{end}}
33 34 </nav>
34 35 <form class="topsearch" method="get" action="/" role="search">