summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* Bump version. v1.0Jason A. Donenfeld2016-06-071-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* git: update to v2.8.3Christian Hesse2016-05-202-1/+1
| | | | | | Update to git version v2.8.3, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-diff: action='.' is not correctJason A. Donenfeld2016-05-121-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* forms: action should not be emptyJason A. Donenfeld2016-05-122-2/+2
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-shared: Remove a name attribute with an empty valueJuuso Lapinlampi2016-05-121-1/+1
| | | | | | | | The name attribute is optional in an input element, but it must not be an empty value. See: https://html.spec.whatwg.org/#attr-fe-name See: https://html.spec.whatwg.org/#the-input-element
* ui-shared: HTML-ize DOCTYPE and <html>Juuso Lapinlampi2016-05-121-3/+2
| | | | | Get rid of the XHTML headers, bringing cgit slowly to the modern age of HTML.
* ui-shared: Simplify cgit_print_error_page() logicJuuso Lapinlampi2016-05-121-4/+2
|
* git: update to v2.8.2Christian Hesse2016-05-123-2/+2
| | | | | | | | | Update to git version v2.8.2. * Upstream commit 1a0c8dfd89475d6bb09ddee8c019cf0ae5b3bdc2 (strbuf: give strbuf_getline() to the "most text friendly" variant) changed API. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-log: Simplify decoration codeTim Nordell2016-05-121-24/+22
| | | | | | | | The decoration code inside of git returns the decoration type, so utilize this to create the decoration spans. Additionally, use prettify_refname(...) to get the shorter name for the ref. Signed-off-by: Tim Nordell <tim.nordell@logicpd.com>
* ui-log: Do not always emit decoration spanTim Nordell2016-05-121-0/+2
| | | | | | | | The decoration span does not need to be emited if there aren't any decorations to show. This modification saves slightly on bandwidth. Signed-off-by: Tim Nordell <tim.nordell@logicpd.com>
* Renamed repo-specific configuration for enable-html-serving in cgitrc.5.txtMatt Comben2016-03-081-1/+1
|
* ui-shared: redirect should not exit early for cacheJason A. Donenfeld2016-02-261-1/+0
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* about: path_info might not be validJason A. Donenfeld2016-02-261-1/+2
|
* tabs: do not use target=_blankJason A. Donenfeld2016-02-231-1/+1
|
* css: fix indentationJason A. Donenfeld2016-02-231-4/+4
|
* css: use less blurry icon for external linkChristian Hesse2016-02-231-1/+2
| | | | | | | | Your mileage may vary, but for me the old icon looks blurry. The new one is character 0xf08e from OTF font awsome in size 10. The icon color is black, gray level is adjusted via opacity. Signed-off-by: Christian Hesse <mail@eworm.de>
* md2html: Do syntax highlighting tooJason A. Donenfeld2016-02-231-1/+5
|
* git: update to v2.7.2Christian Hesse2016-02-232-1/+1
| | | | | | Update to git version v2.7.2, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-plain: fix to show a repo's root directory listing in plain viewJoe Anakata2016-02-221-1/+1
| | | | | | | | | | | | This is to fix the case of accessing http://host.com/cgit.cgi/repo.git/plain/ There is code here to make this case work (match_baselen is set to -1 for top-of-the-tree views) but the unsigned to signed comparison was always false in this case, causing an empty directory listing without this fix. Signed-off-by: Joe Anakata <jea-signup-github@anakata.org> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* cmd: redirect empty about/ to homepage or summaryJason A. Donenfeld2016-02-221-1/+10
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-shared: add homepage to tabsJason A. Donenfeld2016-02-227-5/+26
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-atom: avoid DATE_STRFTIMEJohn Keeping2016-02-082-12/+4
| | | | | | | | | | | | | | Git's DATE_STRFTIME ignores the timezone argument and just uses the local timezone regardless of whether the "local" flag is set. Since Atom accepts ISO8601 dates [1], we can use Git's DATE_ISO8601_STRICT instead, which does get this right. Additionally, we never use the local timezone here so we can use the date_mode_from_type() wrapper to simplify the code a bit. [1] https://tools.ietf.org/html/rfc4287#section-3.3 Signed-off-by: John Keeping <john@keeping.me.uk>
* Avoid DATE_STRFTIME for long/short datesJohn Keeping2016-02-085-13/+10
| | | | | | | | | | | Git's DATE_STRFTIME ignores the timezone argument and just uses the local timezone regardless of whether the "local" flag is set. Since our existing FMT_LONGDATE and FMT_SHORTDATE are pretty-much perfect matches to DATE_ISO8601 and DATE_SHORT, switch to taking a date_mode_type directly in cgit_date_mode(). Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-stats: cast pointer before checking for zeroJohn Keeping2016-02-081-2/+2
| | | | | | | | | | | | | We abuse the "void *util" field as a counter and recently started to cast it to a uintptr_t to avoid risking nasal demons by performing arithmetic on a void pointer. However, compilers are also known to do "interesting" things if they know that a pointer is or isn't NULL. Make this safer by checking if the counter (after casting) is non-zero rather than checking if the pointer is non-null. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-stats: if we're going to abuse void*, do it safelyJason A. Donenfeld2016-02-081-10/+7
|
* git: update to v2.7.1Christian Hesse2016-02-082-1/+1
| | | | | | Update to git version v2.7.1, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-shared: remove cgit_print_date()John Keeping2016-02-082-21/+0
| | | | | | There are no longer any users of this function. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-atom: use show_date directly for atom datesJohn Keeping2016-02-081-2/+7
| | | | | | | This will allow us to remove cgit_print_date and use Git's show_date consistently. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: use show_date for footer timestampJohn Keeping2016-02-081-1/+1
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* ui: show ages in the originator's timezoneJohn Keeping2016-02-085-18/+18
| | | | | | | 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-{commit,tag}: show dates in originator's timezoneJohn Keeping2016-02-082-3/+6
| | | | | | | This is done by switching to Git's show_date() function and the mode given by cgit_date_mode(). Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: add cgit_date_mode()John Keeping2016-02-082-0/+10
| | | | | | | | This returns the correct mode value for use with Git's show_date() based on the current CGit configuration and will be used in the following patches. Signed-off-by: John Keeping <john@keeping.me.uk>
* parsing: add timezone to ident structuresJohn Keeping2016-02-082-4/+9
| | | | | | | This will allow us to mimic Git's behaviour of showing times in the originator's timezone when displaying commits and tags. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: remove "format" from cgit_print_age()John Keeping2016-02-085-9/+9
| | | | | | | 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-tree: put reverse path in titleJason A. Donenfeld2016-01-181-0/+34
|
* syntax-highlighting: always use utf-8 to avoid ascii codec issuesJason A. Donenfeld2016-01-181-0/+3
|
* cache: don't check for match with no keyJohn Keeping2016-01-171-2/+3
| | | | | | | | | | | We call open_slot() from cache_ls() without a key since we simply want to read the path out of the header. Should the file happen to contain an empty key then we end up calling memcmp() with NULL and a non-zero length. Fix this by assigning slot->match only if a key is set, which is always will be in the code paths where we use slot->match. Coverity-id: 13807 Signed-off-by: John Keeping <john@keeping.me.uk>
* cache: use size_t for string lengthsJohn Keeping2016-01-171-2/+2
| | | | | | | Avoid integer truncation on 64-bit systems. Coverity-id: 13864 Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-log: handle parse_commit() errorsJohn Keeping2016-01-171-1/+3
| | | | | | | | | | | | | If parse_commit() fails, none of the fields in the commit structure will have been populated so we will dereference NULL when accessing item->tree. There isn't much we can do about the error at this point, but if we return true then we'll try parsing the commit again from print_commit() and we can report an error to the user at that point. Coverity-id: 13801 Signed-off-by: John Keeping <john@keeping.me.uk>
* Bump version v0.12Jason A. Donenfeld2016-01-141-1/+1
|
* ui-plain: add enable-html-serving flagJason A. Donenfeld2016-01-145-0/+29
| | | | Unrestricts plain/ to contents likely to be executed by browser.
* ui-blob: set CSP just in caseJason A. Donenfeld2016-01-141-0/+3
|
* ui-blob: always use generic mimetypesJason A. Donenfeld2016-01-141-6/+4
|
* ui-blob: Do not accept mimetype from userJason A. Donenfeld2016-01-143-4/+0
|
* ui-shared: prevent malicious filename from injecting headersJason A. Donenfeld2016-01-143-3/+32
|
* ui-shared: Avoid new line injection into redirect headerJason A. Donenfeld2016-01-141-1/+3
|
* Fix missing prototype declarationsPeter Colberg2016-01-146-15/+15
| | | | Signed-off-by: Peter Colberg <peter@colberg.org>
* ui-repolist: return HTTP 404 if no repositories foundPeter Colberg2016-01-131-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 Colberg2016-01-131-3/+10
| | | | Signed-off-by: Peter Colberg <peter@colberg.org>
* Fix segmentation fault in hc()Lukas Fleischer2016-01-131-0/+3
| | | | | | | | The ctx.qry.page variable might be unset at this point, e.g. when an invalid command is passed and cgit_print_pageheader() is called to show an error message. Signed-off-by: Lukas Fleischer <lfleischer@lfos.de>
* git: update to v2.7.0Christian Hesse2016-01-1313-26/+26
| | | | | | | | | | | | | | Update to git version v2.7.0. * Upstream commit ed1c9977cb1b63e4270ad8bdf967a2d02580aa08 (Remove get_object_hash.) changed API: Convert all instances of get_object_hash to use an appropriate reference to the hash member of the oid member of struct object. This provides no functional change, as it is essentially a macro substitution. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-repolist: initialize char *buf to NULLChristian Hesse2016-01-131-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>
* filter: avoid integer overflow in authenticate_postJason A. Donenfeld2015-11-241-1/+1
| | | | | | | | | | | | ctx.env.content_length is an unsigned int, coming from the CONTENT_LENGTH environment variable, which is parsed by strtoul. The HTTP/1.1 spec says that "any Content-Length greater than or equal to zero is a valid value." By storing this into an int, we potentially overflow it, resulting in the following bounding check failing, leading to a buffer overflow. Reported-by: Erik Cabetas <Erik@cabetas.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* about-formatting.sh: comment text out of dateJason A. Donenfeld2015-11-121-1/+1
|
* filters: port syntax-highlighting.py to python 3.xChristian Hesse2015-10-121-10/+9
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* md2html: the default of stdin works fineJason A. Donenfeld2015-10-121-2/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* filters: misc cleanupsJason A. Donenfeld2015-10-122-2/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* md2html: use pure pythonJason A. Donenfeld2015-10-121-6/+9
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* cache: fix resource leak: close file handle before returnChristian Hesse2015-10-101-3/+9
| | | | | Coverity-id: 13910 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-atom: fix resource leak: free allocation from cgit_pageurlChristian Hesse2015-10-101-1/+4
| | | | | Coverity-id: 13945 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-atom: fix resource leak: free before returnChristian Hesse2015-10-101-1/+2
| | | | | Coverity-id: 13946 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-atom: fix resource leak: free allocation from cgit_repourlChristian Hesse2015-10-101-1/+3
| | | | | Coverity-id: 13947 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-blob: fix resource leak: free before returnChristian Hesse2015-10-101-0/+1
| | | | | Coverity-id: 13944 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-blob: fix resource leak: free before returnChristian Hesse2015-10-101-0/+1
| | | | | Coverity-id: 13943 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-plain: fix resource leak: free before assigning NULLChristian Hesse2015-10-091-1/+3
| | | | | Coverity-id: 13939 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-plain: fix resource leak: free before returnChristian Hesse2015-10-091-0/+1
| | | | | Coverity-id: 13940 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-repolist: fix resource leak: free allocation from cgit_currenturlChristian Hesse2015-10-091-1/+3
| | | | | Coverity-id: 13930 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-repolist: fix resource leak: free before returnChristian Hesse2015-10-091-1/+3
| | | | | Coverity-id: 13931 Signed-off-by: Christian Hesse <mail@eworm.de>
* filters: Simplify convertersJason A. Donenfeld2015-10-094-1734/+284
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-shared: fix resource leak: free allocation from cgit_hosturlChristian Hesse2015-10-091-2/+3
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-shared: return value of cgit_hosturl is not constChristian Hesse2015-10-092-4/+4
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* cmd: fix resource leak: free allocation from cgit_currenturl and fmtallocChristian Hesse2015-10-091-3/+7
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-shared: fix resource leak: free allocation from cgit_currenturlChristian Hesse2015-10-091-3/+8
| | | | | Coverity-id: 13927 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-shared: return value of cgit_currenturl is not constChristian Hesse2015-10-092-3/+3
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-shared: fix resource leak: free allocation from cgit_fileurlChristian Hesse2015-10-091-5/+11
| | | | | Coverity-id: 13918 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-ssdiff: fix resource leak: free allocation from cgit_fileurlChristian Hesse2015-10-091-2/+6
| | | | | Coverity-id: 13929 Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-tree: fix resource leak: free before returnChristian Hesse2015-10-091-0/+1
| | | | | Coverity-id: 13938 Signed-off-by: Christian Hesse <mail@eworm.de>
* Avoid use of non-reentrant functionsJason A. Donenfeld2015-10-091-3/+3
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* Makefile: fix MAKEFLAGS tests with multiple flagsJohn Keeping2015-10-091-1/+1
| | | | | | | | findstring is defined as $(findstring FIND,IN) so if multiple flags are set these tests do the wrong thing unless $(MAKEFLAGS) is the second argument. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-refs: remove useless null checkJohn Keeping2015-10-091-1/+1
| | | | | | | There is no way that "tag" can be null here. Coverity-id: 13950 Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-blob: remove useless null checkJohn Keeping2015-10-091-1/+1
| | | | | | | | We have already called strlen() on "path" by the time we get here, so we know it can't be null. Coverity-id: 13954 Signed-off-by: John Keeping <john@keeping.me.uk>
* scan-tree: remove useless strdup()John Keeping2015-10-091-1/+1
| | | | | | | | | parse_configfile() takes a "const char *" and doesn't hold any references to it after it returns; there is no reason to pass it a duplicate. Coverity-id: 13941 Signed-off-by: John Keeping <john@keeping.me.uk>
* cgit.c: remove useless null checkJohn Keeping2015-10-091-1/+1
| | | | | | | | Everywhere else in this function we do not check whether the value is null and parse_configfile() never passes a null value to this callback. Coverity-id: 13846 Signed-off-by: John Keeping <john@keeping.me.uk>
* git: update to v2.6.1Christian Hesse2015-10-062-1/+1
| | | | | | Update to git version v2.6.1, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* mime: rewrite detection functionJason A. Donenfeld2015-08-171-36/+26
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-summary: send images plain for about pageChristian Hesse2015-08-171-2/+13
| | | | | | | | | The about page used to display just fine, but images were broken: The binary image data was embedded in html code. Use cgit_print_plain() to send images in plain mode and make them available on about page. Signed-off-by: Christian Hesse <mail@eworm.de>
* refactor get_mimetype_from_file() to get_mimetype_for_filename()Christian Hesse2015-08-173-47/+40
| | | | | | | * handle mimetype within a single function * return allocated memory on success Signed-off-by: Christian Hesse <mail@eworm.de>
* move get_mimetype_from_file() to sharedChristian Hesse2015-08-173-40/+42
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* cmd: fix command definitionJohn Keeping2015-08-141-1/+1
| | | | | | | | The previous commit removed the "pre" field from "struct cgit_cmd" but forgot to update this macro. Signed-off-by: John Keeping <john@keeping.me.uk> Reviewed-by: Christian Hesse <mail@eworm.de>
* cmd: no need for pre function hook nowJason A. Donenfeld2015-08-143-20/+9
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-shared: cache errors for "dynamic TTL"John Keeping2015-08-141-0/+1
| | | | | | | Most errors we generate are (potentially) transient, such as non-existent object IDs so we don't want them to be cached forever. Signed-off-by: John Keeping <john@keeping.me.uk>
* cmd: remove "want_layout" fieldJohn Keeping2015-08-143-34/+24
| | | | | | No commands use this any more. Signed-off-by: John Keeping <john@keeping.me.uk>
* tree: move layout into page functionJohn Keeping2015-08-142-6/+19
| | | | | | | | This also allows us to return proper HTTP error codes when the requested tree is not found and display an error message in one case (invalid path inside valid commit) where we previously just displayed an empty page. Signed-off-by: John Keeping <john@keeping.me.uk>
* tag: move layout into page functionJohn Keeping2015-08-142-4/+11
| | | | | | | This also allows us to return proper HTTP error codes when something goes wrong. Signed-off-by: John Keeping <john@keeping.me.uk>
* summary: move layout into page functionJohn Keeping2015-08-142-1/+3
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* stats: move layout into page functionJohn Keeping2015-08-142-3/+7
| | | | | | | This also allows us to return proper HTTP error codes for invalid requests. Signed-off-by: John Keeping <john@keeping.me.uk>
* refs: move layout to page functionJohn Keeping2015-08-142-2/+3
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* log: move layout into page functionJohn Keeping2015-08-142-2/+5
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* diff: move layout to page functionJohn Keeping2015-08-142-6/+15
| | | | | | | The existing "show_ctrls" flag is used to control whether we are running in an existing page or control the page ourselves. Signed-off-by: John Keeping <john@keeping.me.uk>
* commit: move layout into page functionJohn Keeping2015-08-142-3/+7
| | | | | | | This allows us to return a proper HTTP status code when an object is not found by switching from cgit_print_error() to cgit_print_error_page(). Signed-off-by: John Keeping <john@keeping.me.uk>
* about: move layout into page functionsJohn Keeping2015-08-143-4/+11
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: add cgit_print_layout_{start,end}()John Keeping2015-08-142-0/+15
| | | | | | | | These will avoid needing to call three functions to start page layout in subsequent patches when we move the layout setup into each individual page. Signed-off-by: John Keeping <john@keeping.me.uk>
* html: remove html_status()John Keeping2015-08-142-8/+0
| | | | | | This is now unused. Signed-off-by: John Keeping <john@keeping.me.uk>
* snapshot: don't reimplement cgit_print_error_page()John Keeping2015-08-141-17/+4
| | | | | | | | | | cgit_print_error_page() has the advantage that it sets a suitable HTTP status code for the response. Note that setting "mimetype" is redundant here since it cannot have changed since being initialized in cgit.c::prepare_context(), so we do not need to worry that cgit_print_error_page() does not set it. Signed-off-by: John Keeping <john@keeping.me.uk>
* snapshot: use cgit_print_error_page() for HTTP status codesJohn Keeping2015-08-141-2/+4
| | | | | | | | This is a bugfix as well as an improvement to the HTTP status code handling since previously we would not print HTTP headers on any of these code paths. Signed-off-by: John Keeping <john@keeping.me.uk>
* patch: use cgit_print_error_page() for HTTP status codesJohn Keeping2015-08-141-8/+8
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* blob: use cgit_print_error_page() to add HTTP headersJohn Keeping2015-08-141-4/+8
| | | | | | | | This is a bugfix as well as an improvement to the HTTP status code handling since previously we would not print HTTP headers on any of these code paths. Signed-off-by: John Keeping <john@keeping.me.uk>
* snapshot: use cgit_print_error_page() instead of html_status()John Keeping2015-08-141-1/+1
| | | | | | | This provides a formatted error response rather than a simple HTTP error. Signed-off-by: John Keeping <john@keeping.me.uk>
* plain: use cgit_print_error_page() instead of html_status()John Keeping2015-08-141-5/+5
| | | | | | | This provides a formatted error response rather than a simple HTTP error. Signed-off-by: John Keeping <john@keeping.me.uk>
* clone: use cgit_print_error_page() instead of html_status()John Keeping2015-08-141-5/+5
| | | | | | | This provides a formatted error response rather than a simple HTTP error. Signed-off-by: John Keeping <john@keeping.me.uk>
* cgit: use cgit_print_error_page() where appropriateJohn Keeping2015-08-141-20/+7
| | | | | | | | These are more-or-less one-to-one translations but in the final hunk we gain an HTTP error code where we used to send "200 OK", which is an improvement. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: add cgit_print_error_page() functionJohn Keeping2015-08-142-0/+16
| | | | | | | This will allow us to generate error responses with the correct HTTP response code without needing all of the layout boilerplate. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-patch: make sure to send http headersChristian Hesse2015-08-141-0/+4
| | | | | | | | | | Requesting a text/plain patch with bad commit id made cgit send text without proper http headers. This results in "500 Internal Server Error" with "Premature end of script headers" in server logs. So print http headers before error message and return. Signed-off-by: Christian Hesse <mail@eworm.de> Reviewed-by: John Keeping <john@keeping.me.uk>
* Makefile: make "git/config.mak.uname" inclusion optionalJohn Keeping2015-08-131-1/+1
| | | | | | | If we haven't got a "git" directory, it should still be possible to run "make get-git", so we cannot include this file unconditionally. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: show full date in tooltip if longer ago than max_relativeJohn Keeping2015-08-131-0/+4
| | | | | | | | | | | Commit caed6cb (ui-shared: show absolute time in tooltip for relative dates, 2014-12-20) added a toolip when we show a relative time. However, in some cases we show a short date (that is, the date but not the time) if an event was sufficiently far in the past and that commit did not update that case to add the same tooltip. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: use common function in print_rel_date()John Keeping2015-08-131-10/+1
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: extract date formatting to a functionJohn Keeping2015-08-131-4/+9
| | | | | | This will allow this code to be common with print_rel_date. Signed-off-by: John Keeping <john@keeping.me.uk>
* filter: don't use dlsym unnecessarilyJohn Keeping2015-08-131-36/+42
| | | | | | | We only need to hook write() if Lua filter's are in use. If support has been disabled, remove the dependency on dlsym(). Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-tree: use "sane" isgraph()John Keeping2015-08-132-1/+3
| | | | | | | | | | | | | | | | | | Git's git-compat-util.h defines a "sane ctype" that does not use locale information and works with signed chars, but it does not include isgraph() so we have included ctype.h ourselves. However, this means we have to include a system header before git-compat-util.h which may lead to the system defining some macros (e.g. _FILE_OFFSET_BITS on Solaris) before git-compat-util.h redefines them with a different value. We cannot include ctype.h after git-compat-util.h because we have defined many of its functions as macros which causes a stream of compilation errors. Defining our own "sane" isgraph() using Git's sane isprint() and isspace() avoids all of these problems. Signed-off-by: John Keeping <john@keeping.me.uk>
* cgit.h: move stdbool.h from ui-shared.hJohn Keeping2015-08-132-2/+2
| | | | | | Follow the Git policy of including system headers in only one place. Signed-off-by: John Keeping <john@keeping.me.uk>
* cache.c: fix header orderJohn Keeping2015-08-131-3/+3
| | | | | | | | git-compat-util.h may define values that affect how system headers are interpreted, so move sys/sendfile.h after cgit.h (which includes git-compat-util.h). Signed-off-by: John Keeping <john@keeping.me.uk>
* configfile.c: don't include system headers directlyJohn Keeping2015-08-131-2/+1
| | | | | | | | | git-compat-util.h may define various values that affect the interpretation of system headers. In most places we include cgit.h first, which pulls in git-compat-util.h, but this file does not depend on anything else in CGit, so use git-compat-util.h directly. Signed-off-by: John Keeping <john@keeping.me.uk>
* Remove redundant includesJohn Keeping2015-08-136-16/+0
| | | | | | | These are all included in git-compat-util.h (when necessary), which we include in cgit.h. Signed-off-by: John Keeping <john@keeping.me.uk>
* Makefile: include Git's config.mak.unameJohn Keeping2015-08-131-0/+1
| | | | | | | This pulls in the correct value of $(INSTALL) on a wide variety of systems. Signed-off-by: John Keeping <john@keeping.me.uk>
* tests: allow shell to be overriddenJohn Keeping2015-08-131-1/+5
| | | | | | | | | | | On some systems (e.g. Solaris), /bin/sh is not a POSIX shell. Git already provides suitable overrides in its config.mak.uname file and we provide cgit.conf to allow the user to further change this. The code for this is taken from Git's t/Makefile, meaning that we now invoke the tests in the same way that Git does. Signed-off-by: John Keeping <john@keeping.me.uk>
* redirect: cleanlinessJason A. Donenfeld2015-08-131-2/+1
|
* redirect: be more careful for different cgi setupsJason A. Donenfeld2015-08-131-1/+4
|
* ui-log: fix double countingJohn Keeping2015-08-121-2/+2
| | | | | | | This crept in while rebasing the previous commit onto an updated upstream. Signed-off-by: John Keeping <john@keeping.me.uk>
* log: allow users to follow a fileJohn Keeping2015-08-1210-18/+194
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Teach the "log" UI to behave in the same way as "git log --follow", when given a suitable instruction by the user. The default behaviour remains to show the log without following renames, but the follow behaviour can be activated by following a link in the page header. Follow is not the default because outputting merges in follow mode is tricky ("git log --follow" will not show merges). We also disable the graph in follow mode because the commit graph is not simplified so we end up with frequent gaps in the graph and many lines that do not connect with any commits we're actually showing. We also teach the "diff" and "commit" UIs to respect the follow flag on URLs, causing the single-file version of these UIs to detect renames. This feature is needed only for commits that rename the path we're interested in. For commits before the file has been renamed (i.e. that appear later in the log list) we change the file path in the links from the log to point to the old name; this means that links to commits always limit by the path known to that commit. If we didn't do this we would need to walk down the log diff'ing every commit whenever we want to show a commit. The drawback is that the "Log" link in the top bar of such a page links to the log limited by the old name, so it will only show pre-rename commits. I consider this a reasonable trade-off since the "Back" button still works and the log matches the path displayed in the top bar. Since following renames requires running diff on every commit we consider, I've added a knob to the configuration file to globally enable/disable this feature. Note that we may consider a large number of commits the revision walking machinery no longer performs any path limitation so we have to examine every commit until we find a page full of commits that affect the target path or something related to it. Suggested-by: René Neumann <necoro@necoro.eu> Signed-off-by: John Keeping <john@keeping.me.uk>
* shared: make cgit_diff_tree_cb publicJohn Keeping2015-08-122-2/+5
| | | | | | | This will allow us to use this nice wrapper function elsewhere, avoiding dealing with the diff queue when we only need to inspect a filepair. Signed-off-by: John Keeping <john@keeping.me.uk>
* t0110: Chain together using &&Jason A. Donenfeld2015-08-121-8/+8
|
* about: always ensure page has a trailing slashJason A. Donenfeld2015-08-125-2/+26
| | | | | | Otherwise we can't easily embed links to other /about/ pages. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* filters: apply HTML escapingLazaros Koromilas2015-08-121-1/+1
| | | | http://www.w3.org/International/questions/qa-escapes#use
* git: update to v2.5.0Christian Hesse2015-08-128-14/+14
| | | | | | | | | | | | | | | Update to git version v2.5.0. * Upstream commit 5455ee0573a22bb793a7083d593ae1ace909cd4c (Merge branch 'bc/object-id') changed API: for_each_ref() callback functions were taught to name the objects not with "unsigned char sha1[20]" but with "struct object_id". * Upstream commit dcf692625ac569fefbe52269061230f4fde10e47 (path.c: make get_pathname() call sites return const char *) Signed-off-by: Christian Hesse <mail@eworm.de>
* Fix processing of repo.hide and repo.ignoreDaniel Reichelt2015-08-121-4/+4
| | | | | | | | If the global option enable-filter-overrides is set to 1 the repo-specific options repo.hide and repo.ignore never got processed. Signed-off-by: Daniel Reichelt <hacking@nachtgeist.net> Reviewed-by: John Keeping <john@keeping.me.uk>
* contrib/hooks: add sample post-receive hook using agefileJohn Keeping2015-08-121-0/+19
| | | | | | | | | | | | One of the most frequent questions on the mailing list relates to the idle time in the repository list. The answer to this is to use the "agefile" feature to calculate the time of the last change whenever the repository receives changes. Add a sample post-receive hook in a new "contrib" directory so that we can just point people at the repository in the future. Signed-off-by: John Keeping <john@keeping.me.uk>
* git: update to v2.4.1Christian Hesse2015-05-142-1/+1
| | | | | | Update to git version v2.4.1, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-shared: allow remote refs in branch switcherChristian Hesse2015-03-181-0/+2
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* git: update to v2.3.3Christian Hesse2015-03-142-1/+1
| | | | | | Update to git version v2.3.3, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* Bump version v0.11.2Jason A. Donenfeld2015-03-131-1/+1
|
* Remove no-op link from submodule entriesLukas Fleischer2015-03-132-18/+25
| | | | | | | Instead of linking to the current page ("href='#'"), do not add a link to a submodule entry at all if the module-link setting is not used. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* filters: Add sample gentoo scriptJason A. Donenfeld2015-03-131-0/+320
|
* cgit: remember to set up env vars before empty clone pathJason A. Donenfeld2015-03-091-0/+1
|
* ui-shared: currenturl should take into account leading slashJason A. Donenfeld2015-03-091-1/+5
|
* html: avoid using a plain integer as a NULL pointerJohn Keeping2015-03-091-22/+32
| | | | | | | | | Sparse complains about this table because we use the integer zero as the NULL pointer. Use this as an opportunity to reformat the table so that it always contains 8 elements per row, making it easier to see which values are being set and which are not. Signed-off-by: John Keeping <john@keeping.me.uk>
* cache: don't use an integer as a NULL pointerJohn Keeping2015-03-091-1/+1
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: don't use an integer as a NULL pointerJohn Keeping2015-03-091-1/+1
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: avoid initializing static variable to zeroJohn Keeping2015-03-091-1/+1
| | | | | | | | | Sparse complains that we are using a plain integer as a NULL pointer here, but in fact we do not have to specify a value for this variable at all since it has static storage duration and thus will be initialized to NULL by the compiler. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-stats: make cgit_period definitions 'static const'John Keeping2015-03-092-8/+8
| | | | | | | These definitions should not be modified (and never are) so we can move them to .rodata. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: make cgit_doctype 'static'John Keeping2015-03-091-1/+1
| | | | | | This is not used outside this file and is not declared. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-repolist: make sortcolumn definitions 'static const'John Keeping2015-03-091-2/+2
| | | | | | | These are not used outside this file and are not declared; they are also never modified. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-log: make some variables 'static'John Keeping2015-03-091-1/+1
| | | | | | These are not used outside this file and are not declared. Signed-off-by: John Keeping <john@keeping.me.uk>
* shared: make some variables 'static'John Keeping2015-03-091-2/+2
| | | | | | These are not used outside this file and are not declared. Signed-off-by: John Keeping <john@keeping.me.uk>
* scan-tree: make some variables 'static'John Keeping2015-03-091-2/+2
| | | | | | These are not used outside this file and are not declared. Signed-off-by: John Keeping <john@keeping.me.uk>
* Avoid signed bitfieldsJohn Keeping2015-03-092-3/+3
| | | | | | | | Bitfields are only defined for unsigned types. Detected by sparse. Signed-off-by: John Keeping <john@keeping.me.uk>
* Avoid non-ANSI function declarationsJohn Keeping2015-03-099-25/+25
| | | | | | | | Sparse says things like: warning: non-ANSI function declaration of function 'calc_ttl' Signed-off-by: John Keeping <john@keeping.me.uk>
* Makefile: add a target to run CGit through sparseJohn Keeping2015-03-092-1/+11
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* git: update to v2.3.2Christian Hesse2015-03-072-1/+1
| | | | | | Update to git version v2.3.2, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* Bump version v0.11.1Jason A. Donenfeld2015-03-051-1/+1
|
* Drop return value from parse_user()Lukas Fleischer2015-03-051-11/+7
| | | | | | | | | In commit 936295c (Simplify commit and tag parsing, 2015-03-03), the commit and tag parsing code was refactored. This broke tag messages in ui-tag since the line after the tagger header was erroneously skipped. Rework parse_user() and skip the line manually outside parse_user(). Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Remove leading newline characters from tag messagesLukas Fleischer2015-03-051-0/+3
| | | | | | | Fixes a regression introduced in commit 936295c (Simplify commit and tag parsing, 2015-03-03). Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* simple-authentication.lua: tie secure cookies to field namesJason A. Donenfeld2015-03-051-13/+21
|
* cgit: show clone URLs for empty repoJason A. Donenfeld2015-03-052-1/+17
|
* cache: use F_SETLK to avoid stale lock filesJohn Keeping2015-03-031-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If CGit is killed while it holds a lock on a cache slot (for example because it is taking too long to generate a page), the lock file will be left in place. This prevents any future attempt to use the same slot since it will fail to exclusively create the lock file. Since CGit is the only program that should be manipulating lock files, we can use advisory locking to detect whether another process is actually using the lock file or if it is now stale. I have confirmed that this works on Linux by setting a short TTL in a custom cgitrc and running the following with CGit patched to print a message to stderr if the fcntl(2) fails: $ export CGIT_CONFIG=$PWD/cgitrc $ export QUERY_STRING=url=cgit/tree/ui-shared.c $ ./cgit | grep -v -e '^<div class=.footer.>' \ -e '^Last-Modified: ' \ -e ^'Expires: ' >expect $ seq 50000 | dd bs=8192 | parallel -j200 "diff -u expect <(./cgit | grep -v -e '^<div class=.footer.>' \ -e '^Last-Modified: ' \ -e ^'Expires: ') || echo BAD" This printed the fail message several times without ever printing "BAD". Signed-off-by: John Keeping <john@keeping.me.uk>
* Make root handling sane again.Jason A. Donenfeld2015-03-033-14/+14
|
* ui-shared: Add current url helper function.Jason A. Donenfeld2015-03-033-4/+12
|
* ui-shared: keep filter repolist page in paginationJason A. Donenfeld2015-03-031-3/+3
|
* ui-repolist: use ctx.qry.url instead of rooturl, in case we're filteringJason A. Donenfeld2015-03-032-3/+3
|
* ui-repolist: use correct owner query linkJason A. Donenfeld2015-03-031-1/+1
|
* Simplify commit and tag parsingLukas Fleischer2015-03-031-71/+41
| | | | | | | | * Use skip_prefix to avoid magic numbers in the code. * Use xcalloc() instead of xmalloc(), followed by manual initialization. * Split out line splitting. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* git: update to v2.3.1Christian Hesse2015-03-032-1/+1
| | | | | | Update to git version v2.3.1, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* Bump verison v0.11.0Jason A. Donenfeld2015-02-151-1/+1
|
* shrink cgit.png file sizeChristian Hesse2015-02-151-0/+0
| | | | | | | | | | | Ran optipng against cgit.png, which shrank file size by more than eight percent. The image (including protocol overhead) should fit into a single network packet now. Optipng optimizes filters and compression. The actual pixel results are not altered. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-clone.c: Fix off-by-one error in pack pathJason A. Donenfeld2015-02-091-5/+11
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-clone.c: Fix path checkLukas Fleischer2015-02-091-2/+2
| | | | | | | | | | | The starts_with() check was broken in two ways: For one thing, the parameters were passed in the wrong order, for another thing, starts_with() returns 1 if the string starts with the prefix (not 0). Note that this bug existed since commit 02a545e (Add support for cloning over http, 2008-08-06) but only pops in in corner cases. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* git: update for v2.3.0Christian Hesse2015-02-086-23/+19
| | | | | | | | | * sort_string_list(): rename to string_list_sort() (upstream commit 3383e199) * update read_tree_recursive callback to pass strbuf as base (upstream commit 6a0b0b6d) Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-shared.c: Refactor add_clone_urls()Lukas Fleischer2015-02-051-22/+10
| | | | | | Make use of strbuf_split_str() and strbuf lists to split clone URLs. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Add repo.hide and repo.ignoreLukas Fleischer2015-01-295-0/+23
| | | | | | | | These options can be used to hide a repository from the index or completely ignore a repository, respectively. They are particularly useful when used in combination with scan-path. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Add Etags for snapshotsJanus2015-01-281-0/+1
|
* tag: reference with "h" instead of "id"John Keeping2015-01-194-9/+8
| | | | | | | | | | | | | | | When clicking on "log" from a tag we end up showing the log of whatever branch we used to reach the tag. If the tag doesn't point onto a branch then the tagged commit won't appear in this output. By linking to tags with the head parameter instead of the "id" parameter the log link will show the log of the tag. This is clearly desirable when the tag has been reached from the refs UI and changing the behaviour for tag decorations makes them match branch decorations where log -> decoration -> log shows the log of the decoration. Reported-by: Ferry Huberts <mailings@hupie.com> Signed-off-by: John Keeping <john@keeping.me.uk>
* Return proper HTTP response when accessing info/Lukas Fleischer2015-01-151-1/+3
| | | | | | | | | | | Currently, when a user directly accesses the info command of a repository, we exit cgit without printing anything to stdout, bringing up error messages like "502 Bad Gateway" or "An error occurred while reading CGI reply (no response received)". Instead of bailing out, at least print the HTTP headers, including a reasonable error message. Reported-by: Janus Troelsen Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* git: update to v2.2.2Christian Hesse2015-01-132-1/+1
| | | | | | Update to git version v2.2.2, no changes required. Signed-off-by: Christian Hesse <mail@eworm.de>
* ui-diff: don't link to single file diff statJohn Keeping2014-12-301-0/+10
| | | | | | | | | Seeing the diff stat for a single file is pretty useless, so reset the diff type before generating the links to individual files in the diff stat so that the links will show a useful diff. Reported-by: Konstantin Ryabitsev <mricon@kernel.org> Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-patch: match git-format-patch(1) outputJohn Keeping2014-12-282-3/+4
| | | | | | | | | | | | | Using (DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH) causes Git to emit a "---" line between the commit message and the body of the patch, which fixes a regression introduced in commit 455b598 (ui-patch.c: Use log_tree_commit() to generate diffs, 2013-08-20), prior to which we inserted the "---" line ourselves. DIFF_FORMAT_SUMMARY is added so that we match the output of git-format-patch(1) without the "-p" option. Signed-off-by: John Keeping <john@keeping.me.uk>
* t0108: modernize styleJohn Keeping2014-12-281-10/+10
| | | | | | | | * &&-chaining * use test_cmp instead of cmp * use strip_headers instead of knowing how many lines there will be Signed-off-by: John Keeping <john@keeping.me.uk>
* Revert "git: use xz compressed archive for download"Jason A. Donenfeld2014-12-241-2/+2
| | | | | | This reverts commit a87c9d8a9779eab0499efd3c44e090a28c7d1cdf. We want to make OpenBSD people happy.
* Use split_ident_line() in parse_user()Lukas Fleischer2014-12-241-28/+17
| | | | | | | | Use Git's built-in ident line splitting algorithm instead of reimplementing it. This does not only simplify the code but also makes sure that cgit is consistent with Git when it comes to author parsing. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* footer: link back to cgit home pageJason A. Donenfeld2014-12-232-1/+8
| | | | | The footer has always been overrideable using the footer= in cgitrc, so this won't anger anybody who cares about their footer.
* ui-shared: show absolute time in tooltip for relative datesJohn Keeping2014-12-231-12/+23
| | | | Signed-off-by: John Keeping <john@keeping.me.uk>
* git: use xz compressed archive for downloadChristian Hesse2014-12-231-2/+2
|
* match other common markdown file extensionsChris Burroughs2014-12-231-1/+1
|
* repolist: add owner-filterChris Burroughs2014-12-237-8/+64
| | | | | | This allows custom links to be used for repository owners by configuring a filter to be applied in the "Owner" column in the repository list.
* ui-shared: add rel-vcs microformat links to HTML headerJohn Keeping2014-12-231-0/+11
| | | | | | As described at https://joeyh.name/rfc/rel-vcs/. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-summary: add "rel='vcs-git'" to clone URL linksJohn Keeping2014-12-231-2/+4
| | | | | | | | This is described in the rel-vcs microformat[1]. [1] https://joeyh.name/rfc/rel-vcs/ Signed-off-by: John Keeping <john@keeping.me.uk>
* Extract clone URL printing to ui-shared.cJohn Keeping2014-12-233-46/+51
| | | | | | | | This will allow us to reuse the same logic to add clone URL <link/> elements to the header of all repo-specific pages in order to support the rel-vcs microformat. Signed-off-by: John Keeping <john@keeping.me.uk>
* Remove trailing slash after remove-suffixLukas Fleischer2014-12-231-3/+6
| | | | | | | When removing the ".git" suffix of a non-bare repository, also remove the trailing slash for compatibility with cgit_repobasename(). Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* git: update to v2.2.1Christian Hesse2014-12-235-7/+8
| | | | | | Update to git version v2.2.1, including API changes. Signed-off-by: Christian Hesse <mail@eworm.de>
* filter: fix libravatar email-filter https issueChristian Hesse2014-12-131-1/+2
| | | | | | Serving cgit via https and getting avatar via http gives error messages about untrusted content. This decides whether or not to use https link by looking at the environment variable HTTPS, which is set in CGI.
* ui-diff: add "stat only" diff typeJohn Keeping2014-12-132-1/+5
| | | | | | | | | | | This prints the diffstat but stops before printing (or generating) any of the body of the diff. No cgitrc option is added here so that we can wait to see how useful this is before letting people set it as the default. Suggested-by: Konstantin Ryabitsev <mricon@kernel.org> Signed-off-by: John Keeping <john@keeping.me.uk>
* Change "ss" diff flag to an enumJohn Keeping2014-12-134-14/+24
| | | | | | | | | | | This will allow us to introduce a new "stat only" diff mode without needing an explosion of mutually incompatible flags. The old "ss" query parameter is still accepted in order to avoid breaking saved links, but we no longer generate any URIs using it; instead the new "dt" (diff type) parameter is used. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: remove toggle_ssdiff arg to cgit_diff_link()John Keeping2014-12-134-8/+8
| | | | | | | This argument is never used with a value other than zero, so remove it and simplify the code. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-shared: remove toggle_ssdiff arg to cgit_commit_link()John Keeping2014-12-135-13/+11
| | | | | | | This argument is never used with a value other than zero, so remove it and simplify the code. Signed-off-by: John Keeping <john@keeping.me.uk>
* git: update to v2.0.4John Keeping2014-08-072-1/+1
| | | | | | No CGit changes required. Signed-off-by: John Keeping <john@keeping.me.uk>
* Always check if README exists in choose_readme()Lukas Fleischer2014-08-071-6/+0
| | | | | | | | | | | | | Specifying a nonexistent README file via the readme option is sometimes useful, e.g. when using scan-path and setting a global default. Currently, we check whether there is only one option in the readme option and, if so, we choose that file without checking whether it exists. As a consequence, all repositories are equipped with an about link in the aforementioned scenario, even if there is no about file. Remove the early check for the number of keys and always check whether the file exists instead. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* cgitrc.5: we mean a cgi response, not requestJason A. Donenfeld2014-08-011-1/+1
|
* ui-stats.c: set parent pointer to NULL after freeing itJohn Keeping2014-07-281-0/+1
| | | | | | We do this everywhere else, so we should be doing it here as well. Signed-off-by: John Keeping <john@keeping.me.uk>
* git: update to v2.0.3John Keeping2014-07-286-9/+7
| | | | | | | | | | This is slightly more involved than just bumping the version number because it pulls in a change to convert the commit buffer to a slab, removing the "buffer" field from "struct commit". All sites that access "commit->buffer" have been changed to use the new functions provided for this purpose. Signed-off-by: John Keeping <john@keeping.me.uk>
* parsing.c: make commit buffer constJohn Keeping2014-07-281-4/+4
| | | | | | | This will be required in order to incorporate the changes to commit buffer handling in Git 2.0.2. Signed-off-by: John Keeping <john@keeping.me.uk>
* Bump version. v0.10.2Jason A. Donenfeld2014-06-301-1/+1
|
* remove debug fprinf() calls that sneaked in with commit 79c985Christian Hesse2014-06-291-4/+0
|
* git: update to 2.0.1Christian Hesse2014-06-282-1/+1
| | | | | Everything works just bumping the version in Makefile and commit hash in submodule. No code changes required.
* ui-patch: Flush stdout after outputting dataJohn Keeping2014-06-281-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It looks like cached patches are truncated to the nearest 1024-byte boundary in the patch body. E.g.: > mricon@nikko:[/tmp]$ wget -O no-cache > "http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=6e1b4fdad5157bb9e88777d525704aba24389bee" ... > 2014-06-11 15:34:51 (80.4 MB/s) - ‘no-cache’ saved [4767] Patch is complete, without truncation. Next hit, with cache in place: > mricon@nikko:[/tmp]$ wget -O yes-cache > "http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=6e1b4 > fdad5157bb9e88777d525704aba24389bee" ... > 2014-06-11 15:35:01 (17.0 MB/s) - ‘yes-cache’ saved [4096/4096] Length truncated to 4096. The cache on disk looks truncated as well, so the bug must me during the process of saving cache. The same is true for larger patches: > mricon@nikko:[/tmp]$ wget -O no-cache > "http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=2840c566e95599cd60c7143762ca8b49d9395050" ... > 2014-06-11 15:41:33 (1.07 MB/s) - ‘no-cache’ saved [979644] 979644 bytes with a cache-miss > mricon@nikko:[/tmp]$ wget -O yes-cache > "http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=2840c > 566e95599cd60c7143762ca8b49d9395050" ... > 2014-06-11 15:41:46 (1.05 MB/s) - ‘yes-cache’ saved [978944] 978944 (956KB exactly) with a cache-hit Since the "html" functions use raw write(2) to STDIO_FILENO, we don't notice problems with most pages, but raw patches write using printf(3). This is fine if we're outputting straight to stdout since the buffers are flushed on exit, but we close the cache output before this, so the cached output ends up being truncated. Make sure the buffers are flushed when we finish outputting a patch so that we avoid this. No other UIs use printf(3) so we do not need to worry about them. Actually, it's slightly more interesting than this... since we don't set GIT_FLUSH, Git decides whether or not it will flush stdout after writing each commit based on whether or not stdout points to a regular file (in maybe_flush_or_die()). Which means that when writing directly to the webserver, Git flushes stdout for us, but when we redirect stdout to the cache it points to a regular file so Git no longer flushes the output for us. The patch is still correct, but perhaps the full explanation is interesting! Reported-by: Konstantin Ryabitsev <mricon@kernel.org>
* ui-log: ignore unhandled argumentsJohn Keeping2014-06-281-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If you search for a bogus range string here: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/log/ Using something like "range" and "qwerty123456", it returns an "Internal Server Error" and the following in the logs: > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] fatal: > ambiguous argument 'qwerty123456': unknown revision or path not in the > working tree., referer: > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] Use '--' to > separate paths from revisions, like this:, referer: > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] 'git <command> > [<revision>...] -- [<file>...]', referer: > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ > [Tue Jun 10 17:45:32 2014] [error] [client 172.21.1.6] Premature end > of script headers: cgit, referer: > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ The cache will kick in, so if you search for the same string again, it'll show an empty range, so you have to change the bogus strings each time. This is because we just pass the arguments straight to Git's revision parsing machinery which die()s if it cannot parse an argument, printing the above to stderr and exiting. The patch below makes it a bit friendlier by just ignoring unhandled arguments, but I can't see an easy way to report errors when we can't parse revision arguments without losing the flexibility of supporting all of the revision specifiers supported by Git. Reported-by: Konstantin Ryabitsev <mricon@kernel.org>
* git: update for git 2.0Christian Hesse2014-06-2812-36/+40
| | | | | | | prefixcmp() and suffixcmp() have been remove, functionality is now provided by starts_with() and ends_with(). Retrurn values have been changed, so instead of just renaming we have to fix logic. Everything else looks just fine.
* remove trailing whitespaces from source filesChristian Hesse2014-04-176-24/+24
|
* git: update to 1.9.2Christian Hesse2014-04-122-1/+1
| | | | | Everything works just bumping the version in Makefile and commit hash in submodule. No code changes required.
* Fix cgit_parse_url when a repo url is contained in another repo urlJulian Maurice2014-04-051-9/+14
| | | | | | | | | For example, if I have two repos (remove-suffix is enabled): /foo /foo/bar http://cgit/foo/bar/ is interpreted as "repository 'foo', command 'bar'" instead of "repository 'foo/bar'"
* Makefile: use more reliable git tarball mirrorJason A. Donenfeld2014-03-201-1/+1
|
* git: update to 1.9.1Christian Hesse2014-03-202-1/+1
| | | | | Everything works just bumping the version in Makefile and commit hash in submodule. No code changes required.
* filter: add libravatar email-filter lua scriptChristian Hesse2014-03-131-0/+26
|
* Bump version. v0.10.1Jason A. Donenfeld2014-02-281-1/+1
|
* ui-refs: simplify cmp_age logicJason A. Donenfeld2014-02-261-11/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The check in parse_user that eventually makes it into committer_date and tagger_date is: else if (mode == 3 && isdigit(*p)) { *date = atol(p); mode++; } Since isdigit('-') is always false, date will never be negative. Thus the sign of this function: static int cmp_age(int age1, int age2) { if (age1 != 0 && age2 != 0) return age2 - age1; if (age1 == 0 && age2 == 0) return 0; if (age1 == 0) return +1; return -1; } Will always be the same as the sign of this function: static inline int cmp_age(int age1, int age2) { return age2 - age1; } Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Idea-by: Lukas Fleischer <cgit@cryptocrack.de>
* Remove unused parameter from cgit_print_snapshot()Lukas Fleischer2014-02-213-3/+3
|
* print download link for reference string length == 1Christian Hesse2014-02-211-1/+1
| | | | | | I have a number of repositories that start tagging with just '1' and count up. Actually references with sting length of one are skipped, this patch changes that.
* Clean up cache documentation.Jason A. Donenfeld2014-02-211-22/+25
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* Skip cache slot when time-to-live is zeroLukas Fleischer2014-02-212-9/+15
| | | | | | | | | | If time-to-live is set to zero, we don't need to regenerate the cache slots on every request. Instead, just skip the caching process and immediately provide the dynamically generated version of the page. Setting time-to-live to zero is useful when you want to disable caching for certain pages. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* git: Update to 1.9.0Lukas Fleischer2014-02-212-1/+1
| | | | | | No code changes required, just bump the submodule and Makefile versions. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Makefile: suppress pkg-config errorJason A. Donenfeld2014-02-201-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* Add a cache-snapshot-ttl configuration variableLukas Fleischer2014-02-203-0/+12
| | | | | | | | | | | | | This can be used to specify the TTL for snapshots. Snapshots are usually static and do not ever change. On the other hand, tarball generation is CPU intensive. One use case of this setting (apart from increasing the lifetime of snapshot cache slots) is caching of snapshots while disabling the cache for static/dynamic HTML pages (by setting TTL to zero for everything except for snapshot requests). Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* diffstat: do not rely on uninitialized dataJason A. Donenfeld2014-02-201-0/+1
| | | | | | | | | | | Right now if you visit: <http://git.zx2c4.com/systemd/diff/src/udev/udev-builtin-input_id.c?id=bcfce235> you'll see that if you reload the page a few times, a bunch of times the diffstat comes out with no lines being shown or changed. I'm not currently sure what the cause of this is, but I suspect it might have to do with this uninitialized data. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* gen-version.sh: check if git is available before trying to call itFabien C2014-02-051-1/+1
| | | | | | | | Some people may clone the cgit repository and compile within a sandbox or on another machine where git is not necessarily installed. When it happens, cgit is getting compiled with an empty version number. This commit fixes this.
* simple-authentication: styleJason A. Donenfeld2014-01-231-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* makefile: use LUA_PKGCONFIG to set Lua implementationNatanael Copa2014-01-222-31/+16
| | | | | | | | 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>
* tests: only do lua tests if lua is compiled-inJason A. Donenfeld2014-01-202-2/+17
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* cgit: add --version argument for printing infoJason A. Donenfeld2014-01-201-0/+17
| | | | | | We need this to do runtime tests for make test. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* cache: use sendfile() instead of a pair of read() + write()Sebastian Andrzej Siewior2014-01-193-1/+34
| | | | | | | | | | | 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>
* README: document pkg-config for luajitJason A. Donenfeld2014-01-191-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* makefile: bump version v0.10Jason A. Donenfeld2014-01-171-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* mailmap: source before lighttpdJason A. Donenfeld2014-01-171-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-shared: do not allow negative minutesJason A. Donenfeld2014-01-171-0/+2
| | | | | | | Do to timestamp differences, sometimes cgit would should "-0 min", which doesn't make any sense. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* auth: document tweakables in lua scriptJason A. Donenfeld2014-01-171-0/+10
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* repolist: make owner clickable to searchJason A. Donenfeld2014-01-171-0/+6
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-shared: move about tab all the way to the leftJason A. Donenfeld2014-01-171-4/+4
| | | | | | | | There were no objections (at the time of committing this): http://lists.zx2c4.com/pipermail/cgit/2013-May/001393.html http://lists.zx2c4.com/pipermail/cgit/2014-January/001904.html Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* filter: don't forget to reap the auth filterJason A. Donenfeld2014-01-171-0/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* cgit.c: free tmp variableJason A. Donenfeld2014-01-171-0/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* Switch to exclusively using global ctxLukas Fleischer2014-01-1719-441/+436
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Drop the context parameter from the following functions (and all static helpers used by them) and use the global context instead: * cgit_print_http_headers() * cgit_print_docstart() * cgit_print_pageheader() Remove context parameter from all commands Drop the context parameter from the following functions (and all static helpers used by them) and use the global context instead: * cgit_get_cmd() * All cgit command functions. * cgit_clone_info() * cgit_clone_objects() * cgit_clone_head() * cgit_print_plain() * cgit_show_stats() In initialization routines, use the global context variable instead of passing a pointer around locally. Remove callback data parameter for cache slots This is no longer needed since the context is always read from the global context variable. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* auth: have cgit calculate login addressJason A. Donenfeld2014-01-166-10/+16
| | | | | | | This way we're sure to use virtual root, or any other strangeness encountered. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* auth: lua string comparisons are time invariantJason A. Donenfeld2014-01-161-2/+2
| | | | | | By default, strings are compared by hash, so we can remove this comment. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* authentication: use hidden form instead of refererJason A. Donenfeld2014-01-163-94/+131
| | | | | | | This also gives us some CSRF protection. Note that we make use of the hmac to protect the redirect value. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* auth: add basic authentication filter frameworkJason A. Donenfeld2014-01-166-16/+387
| | | | | | | | | | | | | | | | This leverages the new lua support. See filters/simple-authentication.lua for explaination of how this works. There is also additional documentation in cgitrc.5.txt. Though this is a cookie-based approach, cgit's caching mechanism is preserved for authenticated pages. Very plugable and extendable depending on user needs. The sample script uses an HMAC-SHA1 based cookie to store the currently logged in user, with an expiration date. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>