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.

Unify account terminology and clarify ACL commands

2e024cc96a391c0959ad2914caeed78b600fcfc1 · Keenan Nemetz · 14d ago · parent ab326d3a

Unify account terminology and clarify ACL commands

Use account consistently in the CLI, help, docs, and remote admin messages. Rename the CLI account command from user to account while retaining the old user spelling as an alias.

Replace positional ACL mutations with explicit verbs such as set-role, protect add, runners remove, and checks enable. Update local and remote admin parsing, hints, docs, and tests.

Tidy repository filter alignment and remove duplicated issue/change counts from page subtitles.

server/web/static/vole.css +26−2

@@ -256,6 +256,7 @@ img { max-width: 100%; }
256 256 letter-spacing: -0.005em;
257 257 margin: 0 0 3px;
258 258 }
259 .repohead + .page-head h1:last-child { margin-bottom: 0; }
259 260 .repohead + .page-head .page-sub { font-size: 12.5px; }
260 261
261 262 @media (max-width: 720px) {
@@ -393,6 +394,7 @@ select, input[type="text"], input[type="password"], input[type="search"], textar
393 394 padding: 5px 8px;
394 395 font: inherit;
395 396 font-size: 12.5px;
397 min-height: 30px;
396 398 }
397 399 select:focus, input:focus, textarea:focus {
398 400 outline: 2px solid var(--accent-soft);
@@ -419,9 +421,24 @@ label > select { width: 100%; max-width: 34rem; }
419 421 flex-wrap: wrap;
420 422 align-items: center;
421 423 gap: 8px;
422 margin: 12px 0;
424 margin: 10px 0 12px;
425 }
426 .filters input[type="text"],
427 .filters input[type="search"] { max-width: 18rem; }
428 /* A label and its control stay on one line when the filter row wraps. */
429 .filter-field {
430 display: inline-flex;
431 align-items: center;
432 gap: 6px;
433 margin: 0;
423 434 }
424 .filters input[type="text"] { max-width: 18rem; }
435 .filter-field > input,
436 .filter-field > select {
437 width: auto;
438 max-width: none;
439 margin-top: 0;
440 }
441 .chips + .filters { margin-top: 0; }
425 442
426 443 /* ---------- labels, flashes, empty pages ---------- */
427 444
@@ -1184,6 +1201,13 @@ details[open] > summary .tree-chevron { transform: rotate(90deg); }
1184 1201 margin-left: auto;
1185 1202 }
1186 1203 .page-head-actions .clone-pop { left: auto; right: 0; }
1204 /* Search and branch pickers are filters, not inline prose: a row layout keeps the
1205 input, its icon button, and the select on the same baseline. */
1206 .page-head-actions form.inline {
1207 display: inline-flex;
1208 align-items: center;
1209 gap: 6px;
1210 }
1187 1211 .page-sub { color: var(--fg-muted); font-size: 13px; margin: 0; max-width: 80ch; }
1188 1212
1189 1213 @media (max-width: 720px) {