AgeCommit message (Collapse)AuthorLines
Say which index column is sortedBryce Kwon-1/+6
Say when nothing matches a mistyped urlBryce Kwon-1/+23
Read the description file without repo.descBryce Kwon-0/+5
Only a scanned repository fell back to its description file, so one listed in cgitrc without repo.desc showed "[no description]" however its file read. repo.desc may follow repo.path, so the file is read where a page shows the description, which also spares every other request the reads.
Drop cgit_read_first_line's unread size outputBryce Kwon-2/+1
Inline the repository list's description linkBryce Kwon-2/+4
Open and close each page through the layout callsBryce Kwon-4/+2
Sort with git's QSORTBryce Kwon-1/+1
QSORT skips a list of fewer than two entries, so an empty list's null base never reaches qsort, which is what cgit_qsort was written for.
Return a repository's age rather than a found flagBryce Kwon-41/+14
Sort an empty list without handing qsort a nullBryce Kwon-1/+1
Every list sorted here is null until its first entry, and C leaves a null base undefined even with nothing to sort. glibc declares it nonnull, and a UBSan build aborted the stats page of a repository with no commits in the window.
Hold a scanned defbranch to a ref nameBryce Kwon-1/+3
The index stats the default branch below the repository to date it, and a scanned repository sets its own defbranch, which was not held to what a ref may hold, so one spelled as a path reached a file outside.
Give a repository without a path no ageBryce Kwon-0/+6
The index built its paths from a NULL repo.path, which the C library prints as "(null)", so it looked for refs under that name in the working directory.
Date a reftable repository on the indexBryce Kwon-0/+10
The idle column falls back on the mtime of the branch's loose ref or of packed-refs, and a reftable repository has neither, so its cell stayed empty. Git rewrites reftable/tables.list on every ref update.
Hand the about filter the tree url its links needBryce Kwon-1/+1
With nothing below the about page, a readme's relative links have to be written against the tree, and only cgit knows how this site spells the url of a tree page and which ref the readme was read from. Both reach the filter already escaped for a url, built by the same writer as cgit's own links.
Indent continuation lines with one tabBryce Kwon-1/+1
Keep string literals behind const pointersBryce Kwon-4/+4
Git's DEVELOPER=1 build turns on -Wwrite-strings as an error, and the literals stored through plain char pointers failed cgit's own objects there. The exec filter's argv takes the cast execvp needs once, the way git's run-command does.
Add stable markup hooks for site themesBryce Kwon-7/+10
Harden the page renderersBryce Kwon-4/+7
Clean up the whole treeBryce Kwon-12/+6
Trim the comments and dead code across the treeBryce Kwon-3/+2
Use standard HTTP reason phrasesBryce Kwon-1/+1
Tidy the structure of the generated markupBryce Kwon-5/+5
Skip the owner link when a repo has no ownerBryce Kwon-7/+11
Let the listings wrap and the diff tables scrollBryce Kwon-1/+1
Restyle the sources and fix the audit's findingsBryce Kwon-159/+204
Stop the index and the log repeating workBryce Kwon-20/+35
Settle the names, types and layout of the sourcesBryce Kwon-2/+2
Remove the owner filter hookBryce Kwon-5/+1
Point the fork's links and credits at itselfBryce Kwon-1/+1
AUTHORS now records the upstream developers as the project's history rather than as maintainers of the fork.
Compare repository idle times by signBryce Kwon-1/+7
The idle-sort comparator returned a 64-bit time difference truncated to int, which could flip sign and leave the ordering inconsistent.
Date repositories from HEAD and guard its branchBryce Kwon-2/+27
The index derived a repository's age from refs/heads/master alone, so a repository on any other default branch showed no age. HEAD is repo-controlled and the age stat walks under refs/heads, so a branch name carrying a parent-directory component is rejected.
Adapt the layout to small screensBryce Kwon-8/+10
On a phone the description, owner and shortcut columns crowded the index and pushed the age off screen, and tapping the name already opens the repository, so the index collapses to name and age.
Reorganise into source, assets and librariesBryce Kwon-0/+0
Everything the build generates now lands in build/, so a clean is a single remove and the source tree stays free of build output.
cgit: truncate all config values at the newlineJason A. Donenfeld-1/+1
These would be largely invalid anyway (save, I suppose, for Linux file paths that technically can contain new lines). The actual problem is that these get printed back out into cached -- and trusted -- cgitrc files, and if the fields have newlines, the git-config way of less trusted users configuring repos on a shared system can be abused to inject newlines, which then can be used to smuggle global options (including filters, which execute code) into the cached cgitrc. So now, only ever duplicate up to the newline, when dealing with these inputs. Reported-by: Adrian Denkiewicz <adrian@doyensec.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
ui-repolist,ui-shared: remove redundant title on repo anchorsChris Mayo-1/+1
The title attribute was being set to the same value as the anchor element text. Signed-off-by: Chris Mayo <aklhfex@gmail.com> Reviewed-by: Eric Wong <e@80x24.org> Reviewed-by: Petr Vorel <petr.vorel@gmail.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
ui-repolist: do not return unsigned (negative) valueChristian Hesse-1/+1
The function read_agefile() returns time_t, which is a signed datatime. We should not return unsigned (negative) value here. Reported-by: Johannes Stezenbach <js@linuxtv.org> Signed-off-by: Christian Hesse <mail@eworm.de>
global: make 'char *path' const where possibleChristian Hesse-1/+1
Signed-off-by: Christian Hesse <mail@eworm.de>
global: remove functionality we deprecated for cgit v1.0Christian Hesse-3/+0
The man page states these were deprecated for v1.0. We are past v1.1, so remove the functionality. Signed-off-by: Christian Hesse <mail@eworm.de> Reviewed-by: John Keeping <john@keeping.me.uk>
html: html_ntxt with no ellipsisJeff Smith-1/+2
For implementing a ui-blame page, there is need for a function that outputs a selection from a block of text, transformed for HTML output, but with no further modifications or additions. Signed-off-by: Jeff Smith <whydoubt@gmail.com> Reviewed-by: John Keeping <john@keeping.me.uk>
Remove unused variable from sort_section()Lukas Fleischer-1/+0
Signed-off-by: Lukas Fleischer <lfleischer@lfos.de>
ui-repolist: properly sort by ageJason A. Donenfeld-21/+17
When empty repos exist, comparing them against an existing repo with a good mtime might, with particular qsort implementations, not sort correctly, because of this brokenness: if (get_repo_modtime(r1, &t) && get_repo_modtime(r2, &t)) However, sorting by the age column works as expected, so anyway, to tidy things up, we simply reuse that function. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
css: highlight even table rows and skip empty rowsChristian Hesse-1/+1
This is stolen from kernel.org css [0]. [0] https://git.kernel.org/cgit-korg-0.10.1.css
ui-repolist: fix memory leakChristian Hesse-1/+3
ui-repolist: fix memory leakChristian Hesse-1/+4
ui: show ages in the originator's timezoneJohn Keeping-1/+1
This affects the tooltip showing the full time and the case when a date is sufficiently old to be shown in full rather than as an offset. Signed-off-by: John Keeping <john@keeping.me.uk>
ui-shared: remove "format" from cgit_print_age()John Keeping-1/+1
We never use any format other than FMT_SHORTDATE, so move that into the function. Signed-off-by: John Keeping <john@keeping.me.uk>
ui-repolist: return HTTP 404 if no repositories foundPeter Colberg-3/+17
Return HTTP status code 404 Not found when querying a non-existent repository, which signals to search engines that a repository no longer exists. Further, some webservers such as nginx permit logging requests to different files depending on the HTTP code. Signed-off-by: Peter Colberg <peter@colberg.org>
ui-repolist: extract repo visibility criteria to separate functionPeter Colberg-3/+10
Signed-off-by: Peter Colberg <peter@colberg.org>
ui-repolist: initialize char *buf to NULLChristian Hesse-1/+1
readfile() can fail if the agefile is not readable. Make sure free() does not free an ininitialized string. Signed-off-by: Christian Hesse <mail@eworm.de>
ui-repolist: fix resource leak: free allocation from cgit_currenturlChristian Hesse-1/+3
Coverity-id: 13930 Signed-off-by: Christian Hesse <mail@eworm.de>
ui-repolist: fix resource leak: free before returnChristian Hesse-1/+3
Coverity-id: 13931 Signed-off-by: Christian Hesse <mail@eworm.de>