AgeCommit message (Collapse)AuthorLines
Correct the test comments that went staleBryce Kwon-10/+10
Trim the tidy check down to what it doesBryce Kwon-17/+3
Nothing sets NO_TIDY_WARNINGS, and a warning never fails the check, so the knob only quieted the output of a verbose run.
Drop the exit lines that follow test_doneBryce Kwon-6/+0
test_done ends the script on every path, skip_all included.
Share one lock-file helper between the cachesBryce Kwon-0/+25
Ask for every path below the about page in one testBryce Kwon-22/+12
All of them stop at the same early return in about_fn, so each now gets the status, the html error page and a clean log.
Name the missing home without searching for oneBryce Kwon-10/+1
strace logs a call that names the path whether or not it succeeds, so a home that existed would still be caught, and cgit unsets HOME before git runs anyway.
Work out each gitlink's target onceBryce Kwon-11/+2
Test bodies run in the main shell, so the target named in the fixture reaches every check that greps for it.
Serve both readme escaping checks from one configBryce Kwon-16/+9
Ask each page that sorts odd branches in one loopBryce Kwon-23/+8
Write the test filter scripts with write_scriptBryce Kwon-9/+3
Derive the API test's config from the loud oneBryce Kwon-6/+1
Check the filter flush on the pages already fetchedBryce Kwon-16/+7
The about check already finds the div right before the filtered text, so its copy went, and the tree page is flattened where it was first read.
Cut test comments that repeat what is said nearbyBryce Kwon-13/+4
Correct two test comments that went staleBryce Kwon-3/+3
Drop test lines that add nothingBryce Kwon-4/+0
The trash directory starts empty and setup.sh already made the cache, the clamp check already fails on a short query, and the commit the setup named is still there to pin.
Leave two log checks to the log testsBryce Kwon-12/+0
t0103 already renders foo/log and finds commit 5, and its search for a bracket fails the same way this literal search did if --fixed-strings ever goes.
Leave the blob size refusals to the limits testsBryce Kwon-22/+5
t0204 asks the tree, plain, blob and blame pages for one oversized blob and checks the exact status and message, so the looser copy here went.
Look up a request's commit in one placeBryce Kwon-0/+10
The diff page now names a revision that is no commit the way the request wrote it, as the other pages already did, rather than as the full id it resolved to. The helpers sit beside the error page in ui-shared.c, since shared.c prints nothing.
Reuse the ids t0109 has already looked upBryce Kwon-2/+0
Drop the patch greps the comparisons already makeBryce Kwon-20/+0
The From, Date, Subject and signature lines are part of what the next test compares in full against git format-patch, for the single commit and for the range alike.
Put the valgrind comment above the loop it explainsBryce Kwon-3/+3
Drop two setup.sh lines that change nothingBryce Kwon-5/+3
The library has read TEST_RESULTS_SAN_DIR for the last time by the time it returns, and the trash directory it makes is empty, so there is no cache to remove.
Tighten the checks that match stray textBryce Kwon-8/+8
Every page holds foo in its footer element, the foo+bar row holds bar, the branch switcher holds master, and commit 1 and file-1 also match commits 10 to 19 and file-10 to file-19. A search page repeats its term in the search box. So these checks passed on pages that lacked what they look for, and each now matches the link itself.
Require a whole page when a filter exits earlyBryce Kwon-2/+3
When a filter cannot run, cgit dies mid-page with its Status line already out, so the check passed with no filter at all. That is the case wherever true lives only in /bin, as on busybox. true now comes from the PATH, and the page has to reach its end.
Make the main cgitrc filter check run the filterBryce Kwon-3/+6
The check asked for the summary page, which never runs an about filter, so it passed with exec:/bin/true on macOS, which has no such file, and with a filter that does not exist at all. Its first line read the stderr the previous test left behind. execvp searches the PATH, so a plain true runs the same on macOS, Debian and busybox.
Let go of a slot lock that cannot take its keyBryce Kwon-0/+15
A failed truncate or key write returned with the descriptor still open, so the lock was held while the page rendered uncached and the file was left behind. It is removed before its last close, as every holder does.
Keep lock contention out of the error logBryce Kwon-2/+20
process_slot logged every failure to lock, so each request that found its slot being filled left a line, while refresh_slot logged none, so an expired slot in a directory the server cannot write was served stale for good without a word. lock_slot now logs the step that failed, as the scan does, and leaves out only another request at work.
Lock the cached repolist with flockBryce Kwon-0/+38
The slot lock has to be an flock, since an exec filter drops a record lock when it closes the stdout a fill writes through. The scan only got by with fcntl because nothing reopens its file while it runs. One kind of lock lets the two share their code, and on Linux, where the kinds never see each other, an flock on the scan's file now holds a scan off like any other.
Open the lock files close-on-execBryce Kwon-0/+27
Each exec filter and snapshot compressor a fill runs inherited the slot's lock descriptor beside the stdout it writes into. An flock lasts until its last copy closes and nothing waits for a process a filter leaves behind, so a fill killed before its rename could leave the slot locked, and served stale or uncached, for as long as such a process lived. The scan holds its lock across no exec and opens the same way so that the two stay alike.
Tidy the cache test's helpers and outputsBryce Kwon-24/+18
The header's last sentence named two of the many later subjects, so it goes too. The second request's stderr is still kept, for the lock tests that come next.
Use test_dir_is_empty for the empty cache checksBryce Kwon-16/+8
The library's check also lists whatever was left behind when it fails.
Write a session's expiry in whole secondsBryce Kwon-0/+11
On Lua 5.3 and later a length worked out with a fraction, such as 1.5 * 24 * 60 * 60, is a float, so the signed expiry came out as 1793609024.0, which validate_value refuses, and every login failed. Max-Age took the same .0, which makes a browser ignore it.
Drop an auth prerequisite no test asks forBryce Kwon-4/+2
Set the Lua prerequisite once for every testBryce Kwon-87/+27
setup.sh already asks the binary, so the seven scripts that each turned the answer into a prerequisite now share one. test-lib names the missing prerequisite beside every test it skips, so the notes that cgit lacks Lua go, while the ones announcing a fallback stay. The list of standalone interpreters moves into lib.sh and matches the versions the extensions claim directly.
Move the highlighter fallback check into t0502Bryce Kwon-24/+12
t0502 owns the shipped highlighter and already writes a cgitrc naming it, so the check needs no config of its own there. t0204's header still called it the last case long after it stopped being one.
Share the request helpers in the auth checksBryce Kwon-77/+49
The two identical posts for an unknown user become one, and no two checks share a name, so a failure report points at a single check.
Let an unmirrored sink fail the way Lua wouldBryce Kwon-12/+0
Drop the auth stubs no check reachesBryce Kwon-20/+6
Every check replaces get_secret, the only caller of posix.sys.stat, link and unlink, and nothing outside the harness calls preload.
Drop auth guards for input cgit never sendsBryce Kwon-3/+4
cgit names no repository with an empty string, never nil, so the check that the index stays up proved nothing, and auth-file in fact refuses the index too while its repos file cannot be read. A session_seconds of 0 signs a session that has expired by the time it comes back, so it needs no branch of its own in set_cookie.
Strip control characters from the location aloneBryce Kwon-2/+0
set_cookie only ever writes an empty value or a token secure_value built from url-encoded text, digits and hex, so stripping it changed nothing.
Take a signed cookie apart with one matchBryce Kwon-0/+1
The loop let a valid cookie through with a field appended, a doubled separator or a zero in front of its expiry. The payload now carries the expiry as written, so only the spelling secure_value issues verifies.
Drop a highlighter check that tested the harnessBryce Kwon-6/+0
The filter hands a NUL through untouched, and only the harness's copy of cgit's sink cut the text there, so the check would have failed the day the filter replaced NULs the way about-render does.
Drop the highlighter's extension fallbackBryce Kwon-14/+5
The table of extensions and the second lookup served only a Scintillua with no detect(), which now leaves every file uncoloured but escaped. The fake detect() names a lexer after the file's suffix, so every test lexer is reached through it.
Drop a stray blank line from the about-render testsBryce Kwon-1/+0
Drop the readme hooks that nothing readsBryce Kwon-6/+5
Nothing in assets/ or in README's list of hooks reads a fenced block's data-lang or the manpage class on a man page's wrapper, so the header now names the two wrappers the stylesheet does style.
Trim a snapshot name without reading out of boundsBryce Kwon-0/+30
For a url of .git, or an empty one, repo_basename stepped its index to the byte before its buffer, read it, and would have cleared it had it held a slash. Git's strbuf trims take the same steps safely, and they lift the 1024-byte cap that failed the page for a longer url.
Open the empty page's clone table on its first urlBryce Kwon-0/+29
The page guessed from the two settings cgit_add_clone_urls reads, so a clone-url that expanded to nothing, or an empty one turning the global off, still drew a Clone heading over no rows. The summary already waits for a first url, and both now draw the heading the same way.
Tidy up after a directory chain however it endsBryce Kwon-0/+27
A row whose first entry is itself a directory leaked that entry's name. A level git could not read as a tree returned early instead, which also left the row's log, stats and plain links on the deeper path.
Free the log's tip when its walk failsBryce Kwon-0/+19
Every exit now goes through one label, which also clears the walk arguments that the normal end used to leave allocated.
Refuse pathspec magic on the stats pageBryce Kwon-0/+9