AgeCommit message (Collapse)AuthorLines
Harden the request path, scan and error recoveryBryce Kwon-14/+12
Clean up the whole treeBryce Kwon-6/+3
Trim the comments and dead code across the treeBryce Kwon-13/+15
Move `gen-version.sh` into toolsBryce Kwon-4/+5
Restyle the sources and fix the audit's findingsBryce Kwon-31/+30
Pin the sources to gnu17Bryce Kwon-0/+11
Give empty repositories their own pageBryce Kwon-0/+1
Drop the help tab and its built-in guideBryce Kwon-1/+0
Add `CGIT_EXTRA_CFLAGS` for cgit-only build flagsBryce Kwon-0/+4
Reorganize the tree into vendor/ and custom/Bryce Kwon-3/+3
Reorganize and simplify the MakefileBryce Kwon-25/+30
Build the sources with `-fno-common`Bryce Kwon-0/+7
Apple clang still defaults to `-fcommon`, so git's 64 KB packet_buffer became a common symbol whose size drove a 32 KB section alignment that ld64 then clamped to the 16 KB page size, warning on every macOS link. Everywhere else already compiles with `-fno-common`.
Add a help page with common workflowsBryce Kwon-0/+1
Let cgit build with or without LuaBryce Kwon-1/+1
Lua only powers the filter extensions, so it stays optional and autodetected. `NO_LUA` yields a self-contained binary and the release script links Lua only when asked to.
Reorganize into source, assets and librariesBryce Kwon-26/+35
The C sources move to source/, the served files to assets/, the bundled Git submodule to libraries/git and the filter scripts to extensions/. Everything the build generates now lands in build/, so a clean is a single remove and the tree stays clean.
ui-blame: add blame UIJeff Smith-0/+1
Implement a page which provides the blame view of a specified file. This feature is controlled by a new config variable, "enable-blame", which is disabled by default. Signed-off-by: Jeff Smith <whydoubt@gmail.com> Reviewed-by: John Keeping <john@keeping.me.uk>
Link with -ldl on GNU HurdPeter Colberg-1/+1
Debian GNU/Hurd uses the GNU C library. Signed-off-by: Peter Colberg <peter@colberg.org>
Link with -ldl on GNU/kFreeBSDPeter Colberg-2/+2
GNU/kFreeBSD uses the FreeBSD kernel with the GNU C library. Signed-off-by: Peter Colberg <peter@colberg.org>
cgit.mk: Use $PKG_CONFIGKylie McClain-3/+5
PKG_CONFIG is a variable dictated by autoconf standards; it should be used if set.
Makefile: add a target to run CGit through sparseJohn Keeping-1/+8
Signed-off-by: John Keeping <john@keeping.me.uk>
Makefile: suppress pkg-config errorJason A. Donenfeld-1/+1
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
makefile: use LUA_PKGCONFIG to set Lua implementationNatanael Copa-24/+12
This breaks compat with the previous LUA_IMPLEMENTATION but gives more flexibility in that user can specify the pkg-config package name directly. Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
cache: use sendfile() instead of a pair of read() + write()Sebastian Andrzej Siewior-0/+8
sendfile() does the same job and avoids to copy the content into userland and back. One has to define NO_SENDFILE in case the OS (kernel / libc) does not supported. It is disabled by default on non-linux environemnts. According to the glibc, sendfile64() was added in Linux 2.4 (so it has been there for a while) but after browsing over the mapage of FreeBSD's I noticed that the prototype is little different. Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
makefile: only display lua message onceJason A. Donenfeld-8/+7
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
makefile: auto-detect presence of various Lua, bsdJason A. Donenfeld-10/+37
We favor LuaJIT over Lua. We disable Lua if neither can be found. We error out if a particular Lua is specified via LUA_IMPLEMENTATION=JIT or LUA_IMPLEMENTATION=VANILLA, but cannot be found. We print a status message depending on what happens. Also, we do not link against libdl on the BSDs, since they include it as part of libc. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
filter: add lua supportJason A. Donenfeld-3/+19
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
filter: basic write hooking infrastructureJason A. Donenfeld-1/+3
Filters can now call hook_write and unhook_write if they want to redirect writing to stdout to a different function. This saves us from potential file descriptor pipes and other less efficient mechanisms. We do this instead of replacing the call in html_raw because some places stdlib's printf functions are used (ui-patch or within git itself), which has its own internal buffering, which makes it difficult to interlace our function calls. So, we dlsym libc's write and then override it in the link stage. While we're at it, we move considerations of argument count into the generic new filter handler. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
filter: split filter functions into their own fileJason A. Donenfeld-0/+1
A first step for more interesting things. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Use argv_array in place of vectorLukas Fleischer-1/+0
Instead of using our own vector implementation, use argv_array from Git which has been specifically designed for dynamic size argv arrays. Drop vector.h and vector.c which are no longer needed. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
cgit.mk: fix dependency handlingJohn Keeping-0/+8
Git calculates the dependency files to be included using a simply expanded Makefile variable, so it does not include the CGit objects that are added after that Makefile has been processed. We therefore need to include the dependency files ourselves in order to get the dependency calculations right. Do this. Signed-off-by: John Keeping <john@keeping.me.uk>
Makefile: re-include cgit.conf in cgit.mkJohn Keeping-0/+2
This avoids needed to export every variable that might be used in cgit.mk from the top-level Makefile. Signed-off-by: John Keeping <john@keeping.me.uk>
cgit.mk: Use SHELL_PATH_SQ to run gen-version.shJohn Keeping-1/+1
On some platforms (notably Solaris) /bin/sh doesn't support enough of POSIX for gen-version.sh to run. Git's Makefile provides SHELL_PATH_SQ to address this issue so we just have to use it. Signed-off-by: John Keeping <john@keeping.me.uk>
cgit.mk: don't rebuild everything if CGIT_VERSION changesJohn Keeping-1/+8
If CGIT_VERSION is in CGIT_CFLAGS then a change in version (for example because you have committed your changes) causes all of the CGit objects to be rebuilt. Avoid this by using EXTRA_CPPFLAGS to add the version for only those files that are affected and make them depend on VERSION. Signed-off-by: John Keeping <john@keeping.me.uk>
Makefile: re-use Git's Makefile where possibleJohn Keeping-0/+74
Git does quite a lot of platform-specific detection in its Makefile, which can result in it defining preprocessor variables that are used in its header files. If CGit does not define the same variables it can result in different sizes of some structures in different places in the same application. For example, on Solaris Git uses it's "compat" regex library which has a different sized regex_t structure than that available in the platform regex.h. This has a knock-on effect on the size of "struct rev_info" and leads to hard to diagnose runtime issues. In order to avoid all of this, introduce a "cgit.mk" file that includes Git's Makefile and make all of the existing logic apply to CGit's objects as well. This is slightly complicated because Git's Makefile must run in Git's directory, so all references to CGit files need to be prefixed with "../". In addition, OBJECTS is a simply expanded variable in Git's Makefile so we cannot just add our objects to it. Instead we must copy the two applicable rules into "cgit.mk". This has the advantage that we can split CGit-specific CFLAGS from Git's CFLAGS and hence avoid rebuilding all of Git whenever a CGit-specific value changes. Signed-off-by: John Keeping <john@keeping.me.uk> Acked-by: Jamie Couture <jamie.couture@gmail.com>