Commit Graph

1066 Commits

Author SHA1 Message Date
Lars Hjemli
939d32fda7 Redesign the caching layer
The original caching layer in cgit has no upper bound on the number of
concurrent cache entries, so when cgit is traversed by a spider (like the
googlebot), the cache might end up filling your disk. Also, if any error
occurs in the cache layer, no content is returned to the client.

This patch redesigns the caching layer to avoid these flaws by
* giving the cache a bound number of slots
* disabling the cache for the current request when errors occur

The cache size limit is implemented by hashing the querystring (the cache
lookup key) and generating a cache filename based on this hash modulo the
cache size. In order to detect hash collisions, the full lookup key (i.e.
the querystring) is stored in the cache file (separated from its associated
content by ascii 0).

The cache filename is the reversed 8-digit hexadecimal representation of

  hash(key) % cache_size

which should make the filesystem lookup pretty fast (if directory content
is indexed/sorted); reversing the representation avoids the problem where
all keys have equal prefix.

There is a new config option, cache-size, which sets the upper bound for
the cache. Default value for this option is 0, which has the same effect
as setting nocache=1 (hence nocache is now deprecated).

Included in this patch is also a new testfile which verifies that the
new option works as intended.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-28 11:32:42 +02:00
Lars Hjemli
d188ed4f29 ui-diff: remove test on object type
By removing the test for commit objects it's now possible to specify a
tag name for the id query-string parameter (it already worked for id2).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-24 23:41:39 +02:00
Lars Hjemli
fe1230dece Integrate diffstat with diff
This creates a generic diffstat function in ui-diff, which then is
invoked from cgit_print_diff with the result that both commit and diff-
view gets a diffstat.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-24 23:41:32 +02:00
Lars Hjemli
9ec5cd7944 Fix commitdiff annoyance
Someone were a bit sloppy when the commitdiff got included 'inline' in
commit 89aa3c0d0a. This patch deletes a
stray `)` and makes sure the diffstat summary `<div>` is closed before
the full diff is printed.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-17 18:33:33 +02:00
Lars Hjemli
3cfcb086ab Cleanup page header
Fix some invalid html, remove dead code.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-15 00:00:11 +02:00
Lars Hjemli
78031f92b0 Fix search in repo index even if caching is enabled
The repository index page needed to include the querystring in the cache
filename.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-14 23:07:52 +02:00
Lars Hjemli
e9a7042b5b Make a few more columns in repolist and log view clickable
Less mouse movement is nice.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-14 22:23:48 +02:00
Lars Hjemli
5764fe9546 Make branches, tags and log play better together in the summary view
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-14 22:13:38 +02:00
Lars Hjemli
35d19bbb64 Fix more css ugliness
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-14 22:10:33 +02:00
Lars Hjemli
2ee1238cdf cgit.css: set form margins
According to the css2 spec, htmlforms have 1.12em top and bottom margins. That
doesn't play well with the placement of the search form, so lets force it to
use 0em margins.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-14 10:21:18 +02:00
Lars Hjemli
adf61225c4 Fix css font-family
When the sidebar was introduced in v0.7 the default font-family property
got messed up, but this commit should fix the issue.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-14 10:07:43 +02:00
Lars Hjemli
76ba6287bf Merge branch 'lh/layout'
* lh/layout:
  Make repository search case insensitive
  Remove 'patch' link from tab, add to commit view
  Implement minimal freetext search in the repolist
  More layout fixes
  Minor fixup in tree-view css
  Reintroduce the branch switcher
  Add fixed link to index page from repo header
  Include diff in commit view
  Replace sidebar/logo
2008-04-13 12:48:44 +02:00
Lars Hjemli
28d781f34b Make repository search case insensitive
This reuses the strcasestr() compiled or linked by libgit.a to implement a
case insensitive variation of the repository search.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-13 12:46:54 +02:00
Lars Hjemli
39912a24ed Remove 'patch' link from tab, add to commit view
It's a bit confusing to enter the patch view from the tab, since it has no
layout. And the commit view has always lacked showing the commit id. Both of
these warts are fixed by this commit, which adds a new header line in the
commit view which shows the commit id as a 'permalink' to the current commit
and also adds a link to the patch view of the current commit.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-13 12:20:00 +02:00
Lars Hjemli
536b0541fc Implement minimal freetext search in the repolist
This makes the repolist much more usable when there's a lot of repositories
registered in cgitrc.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-13 12:10:03 +02:00
Lars Hjemli
931fc6d1e4 More layout fixes
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-13 10:57:11 +02:00
Lars Hjemli
72a69b77e7 Minor fixup in tree-view css
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-12 20:18:16 +02:00
Lars Hjemli
68cb84839f Reintroduce the branch switcher
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-12 20:11:49 +02:00
Lars Hjemli
7c0d2d9fbd Add fixed link to index page from repo header
This makes it easier to get back to the index page, and also re-enables
the usage of logo-link in cgitrc.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-12 20:01:41 +02:00
Lars Hjemli
89aa3c0d0a Include diff in commit view
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-12 20:00:40 +02:00
Lars Hjemli
f135569b2b Replace sidebar/logo
This replaces the sidebar with a more 'common' header layout and also
updates the logo.

Not quite finished yet, though.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-12 20:00:27 +02:00
Lars Hjemli
4a84228826 Use GIT-1.5.5 2008-04-09 18:06:26 +02:00
Lars Hjemli
fa4dfee548 Don't specify mimetype in ui-blob.c
But be sure to specify correct filename. This way, the client can hopefully
guess a sensible mimetype based on the filename suffix, and cgit can ignore
the issue altogether.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-08 21:35:00 +02:00
Lars Hjemli
23296ad648 Merge branch 'lh/cleanup'
* lh/cleanup: (21 commits)
  Reset ctx.repo to NULL when the config parser is finished
  Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring()
  Move function for configfile parsing into configfile.[ch]
  Add cache.h
  Remove global and obsolete cgit_cmd
  Makefile: copy the QUIET constructs from the Makefile in git.git
  Move cgit_version from shared.c to cgit.c
  Makefile: autobuild dependency rules
  Initial Makefile cleanup
  Move non-generic functions from shared.c to cgit.c
  Add ui-shared.h
  Add separate header-files for each page/view
  Refactor snapshot support
  Add command dispatcher
  Remove obsolete cacheitem parameter to ui-functions
  Add struct cgit_page to cgit_context
  Introduce html.h
  Improve initialization of git directory
  Move cgit_repo into cgit_context
  Add all config variables into struct cgit_context
  ...
2008-04-08 21:29:21 +02:00
Lars Hjemli
c6f747649a Reset ctx.repo to NULL when the config parser is finished
This global variable is used by the config parsing callback to keep track
of the currently configured repository. If it is not reset to NULL when
the config parser is finished, and neither `url` or `r` is specified on the
querystring, cgit will wrongly consider the last configured repo as
selected.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-08 21:27:12 +02:00
Lars Hjemli
e87e896333 Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring()
This is a generic http-function.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-08 21:11:36 +02:00
Lars Hjemli
e2a44cf092 Use GIT-1.5.5-rc2 2008-04-01 00:59:55 +02:00
Lars Hjemli
20a33548b9 Move function for configfile parsing into configfile.[ch]
This is a generic function which wanted its own little object file.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-28 00:09:11 +01:00
Lars Hjemli
ee4056bd2c Add cache.h
The functions found in cache.c are only used by cgit.c, so there's no
point in rebuilding all object files when the cache interface is changed.


Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-27 09:22:13 +01:00
Lars Hjemli
dc3282f0ba Remove global and obsolete cgit_cmd
This variable was obsoleted by cmd.c.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-25 02:00:09 +01:00
Lars Hjemli
c60781d677 Makefile: copy the QUIET constructs from the Makefile in git.git
These constructs were introduced by Shawn O. Pearce in commit
74f2b2a8d006a49e1be7e30731c2f7365d2741d1.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-25 01:41:10 +01:00
Lars Hjemli
92908af455 Move cgit_version from shared.c to cgit.c
With the matching Makefile change, this makes sure that only cgit.o and cgit
proper needs to be rebuildt when VERSION has been modified.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 23:27:16 +01:00
Lars Hjemli
df90b51baf Makefile: autobuild dependency rules
This uses gcc to generate dependency rules for each `.o` file, based on the
corresponding `.c` file, into a new set of `.d` files (which are also defined
to depend on the same set of source files as their `.o` files).

Result:
* all objectfile dependencies are correctly calculated
* only the necessary dependencies are recalculated when a sourcefile is updated

Inspiration for the build rules:
* http://www.gnu.org/software/make/manual/make.html#Automatic-Prerequisites
* http://make.paulandlesley.org/autodep.html

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 23:27:12 +01:00
Lars Hjemli
271818693d Initial Makefile cleanup
Sort the list of object files to improve readability/mergeability and remove
manual dependency information which will soon be generated automatically.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 23:16:30 +01:00
Lars Hjemli
163037e79c Move non-generic functions from shared.c to cgit.c
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 17:26:08 +01:00
Lars Hjemli
a4d1ca1dc6 Add ui-shared.h
This is finally a proper headerfile for the shared ui-functions which
used to reside in cgit.h

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 16:50:57 +01:00
Lars Hjemli
c5984a9896 Add separate header-files for each page/view
Yet another step towards removing cgit.h.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 16:38:47 +01:00
Lars Hjemli
f34478cbe0 Refactor snapshot support
The snapshot support needs to be split between output- and config-related
functions to get the layering between shared.c and ui-*.c right. There
is also some codestyle-issues which needs fixing to make the snapshot
functions more similar to the rest of the cgit code.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 16:00:27 +01:00
Lars Hjemli
e0e4478e7b Add command dispatcher
This simplifies the code in cgit.c and makes it easier to extend cgit with
new pages/commands.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 01:43:48 +01:00
Lars Hjemli
b608e88adb Remove obsolete cacheitem parameter to ui-functions
This parameter hasn't been used for a very long time...

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 01:01:28 +01:00
Lars Hjemli
f3c1a187fe Add struct cgit_page to cgit_context
This struct is used when generating http headers, and as such is another
small step towards the goal of the whole cleanup series; to invoke each
page/view function with a function pointer.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-24 00:51:19 +01:00
Lars Hjemli
cb41af16d9 Use GIT-1.5.5.rc1 2008-03-23 11:36:38 +01:00
Lars Hjemli
b1f9b9c145 Introduce html.h
All html-functions can be quite easily separated from the rest of cgit, so
lets do it; the only issue was html_filemode which uses some git-defined
macros so the function is moved into ui-shared.c::cgit_print_filemode().

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-18 08:13:10 +01:00
Lars Hjemli
e01f1403b9 Fix segfault in patch view for root commit
The code for patch view assumed the current commit would always have a parent,
which made cgit segfault when that wasn't the case.

This fixes the bug and adds a test-script for patch view which includes a test
for the inital commit.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-03-17 23:51:47 +01:00
Lars Hjemli
0537a7d1cf Use GIT-1.5.4.4 2008-03-17 23:01:25 +01:00
Lars Hjemli
538cb4a7d7 tests/setup.sh: cleanup test script output and logging
Log the complete output from each test-script in test-output.log and tell the
user about the logfile when a test-script fails.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-24 20:25:20 +01:00
Lars Hjemli
20cdffd5e0 t0010-validate.sh: return on cgit errors
The earlier segfault in cgit passed by unnoticed by this test-script due to
the pipe between cgit and sed.

There might be a more elegant solution to this problem, but my shellscript-
foo is weak.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-24 19:53:08 +01:00
Lars Hjemli
b44b02a982 Make output from make test more readable
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-24 16:05:58 +01:00
Lars Hjemli
e5ca46bf4b Brown paper bag: don't use grep -v
For some inexplicable reason I'd gotten the semantics of `grep -v` totally
backwards, thinking it somehow would make the exitcode from grep indicate
the non-match of the specified pattern.

This fixes the broken tests and gives me a valuable lession about shell
programming at the same time.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-24 15:55:01 +01:00
Lars Hjemli
19134112bf Add regression-test for description-less repos
The segfault fixed in commit eacde43d71 was
triggered when the html-functions manipulated string literals. One callpatch
which could trigger the bug is in ui-repolist.c when repo descriptions are
passed to html_ntxt(): if a repo is lacking a description, the literal
string "[no description]" is used.

This patch changes test/setup.sh such that the first repo has no description,
and adds tests for both "[no description]" and "the bar repo" (description
of the other repo) to tests/t0101-index.sh, which should be enought to catch
regressions in these functions.

Noticed-by: Hiroki Hattori <seagull.kamome@gmail.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-24 15:27:33 +01:00