Commit Graph

263 Commits

Author SHA1 Message Date
Daniel Milde
9bd3a7b1ea Clear the whole context
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2010-02-27 12:52:12 +01:00
Lars Hjemli
4e75d7c9b9 Merge branch 'lh/remote-branches' 2009-12-08 19:34:30 +01:00
Lars Hjemli
f4f6210b4f Merge branch 'ro/ssdiff' 2009-12-08 19:32:48 +01:00
Lars Hjemli
57bb4fdb84 Merge branch 'master' of http://op-co.de/cgit 2009-12-08 18:31:07 +01:00
Lars Hjemli
5c34d96f7e Merge branch 'stable' 2009-12-08 18:30:02 +01:00
Sami Kyöstilä
f2bf0a0528 Don't crash when a repo-specific readme file is used
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-12-08 18:25:40 +01:00
Georg Lukas
ef07ccc72d "max-blob-size" config var to limit generated HTML size
Sometimes it is not feasible to generate the HTML pretty-print for large
files, especially if a source-filter is involved or binary data is to be
displayed. The "max-blob-size" config var allows to disable HTML output
for blobs bigger than X KBytes. Plain downloads are not affected.

Signed-off-by: Georg Lukas <georg@op-co.de>
2009-11-28 03:44:33 +01:00
Lars Hjemli
41934a3222 Add support for remote branches
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-11-07 19:10:58 +01:00
Stefan Bühler
121898e73d Skip leading "/" in url querystring value
Makes it easier to rewrite :)
lighttpd-sandbox: rewrite "/cgit.cgi?url=%{enc:request.path}&%{request.query}";

Signed-off-by: Stefan Bühler <source@stbuehler.de>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-10-06 18:56:43 +02:00
Ragnar Ouchterlony
c358aa3dfe Add possibility to switch between unidiff and side-by-side-diff.
A new config option side-by-side-diffs added, defaulting to 0,
meaning unidiff. Also a query option (ss) is used toggle this.

In the commit page you can switch between the two diff formats by
clicking on the link on the "commit"-row, to the right of (patch).

In the diff page you can switch by using the link at the start
of the page.

All commit-links and diff-links will remember the choice.

Signed-off-by: Ragnar Ouchterlony <ragnar@lysator.liu.se>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-09-16 20:17:56 +02:00
Lars Hjemli
92f6940975 Merge branch 'lh/repo-scan' 2009-09-13 22:02:07 +02:00
Lars Hjemli
ee554849ac cgit.c: respect repo-local 'snapshots' option for --scan-path
The repo-specific 'snapshots' option is bitwise AND'ed with the global
'snapshots' option during parsing, and since the global cgitrc hasn't
been parsed when --scan-path is processed the global 'snapshots' will
always be 0 (i.e. no repo-specific 'snapshots' setting will have any
effect).

This patch fixes the issue by setting the global 'snapshots' mask to
0xFF (hence relying on later parsing of the generated cgitrc repolist
to do the right thing).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 13:31:49 +02:00
Lars Hjemli
588fb8efc6 cgit.c: only print first line of repo.desc in print_repo()
Since repo.desc might have been populated by reading the 'description'
file in GIT_DIR, it may contain newlines. And by printing the literal
value, we may then generate an invalid cgitrc include-file.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 13:27:15 +02:00
Lars Hjemli
b47b7bd1d0 Add and use cgit_find_stats_periodname() in print_repo()
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 11:02:48 +02:00
Lars Hjemli
5ca8df0a3d cgit.c: generate repo.snapshots in print_repo()
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:55:01 +02:00
Lars Hjemli
3548320004 cgit.c: add missing options to print_repo()
Note: print_repo() still ignores repo.max-stats and repo.snapshots,
which both requires additional work since these settings are represented
internally as an enum and a bitmap.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:59 +02:00
Lars Hjemli
2273c2c821 Add config option 'enable-filter-overrides'
This option must be enabled if repo-specific cgitrc files should be
allowed to override any of the 'filter' options.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:59 +02:00
Lars Hjemli
e01229cf80 ui-repolist: handle empty sections similar to NULL sections
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:58 +02:00
Lars Hjemli
74061ed5f0 Add support for repo-local cgitrc file
When recursively scanning a directory tree looking for git repositories,
cgit will now parse cgitrc files found within such repositories.

The repo-specific config files can include any repo-specific options
except 'repo.url' and 'repo.path'. Also, in such config files the 'repo.'
prefix can not be used, i.e. the valid options then becomes:
* name
* clone-url
* desc
* ower
* defbranch
* snapshots
* enable-log-filecount
* enable-log-linecount
* max-stats
* module-link
* section
* about-filter
* commit-filter
* source-filter
* readme

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:58 +02:00
Lars Hjemli
a1b3938f71 cgit.c: refactor repo_config() from config_cb()
The new function repo_config() is used to handle all 'simple' repo
options, for the following reasons:
* code readability
* parser performance
* upcoming support for repo-local cgitrc files during scanning

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:58 +02:00
Lars Hjemli
3939854578 Add config option 'repo.section'
This option can be used to specify the section name for the current
repository.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:58 +02:00
Lars Hjemli
e7af002d5c Introduce 'section' as canonical spelling for 'repo.group'
The 'repo.' prefix should be reserved for repo-specific options, but
the option 'repo.group' must still be honored to stay backwards
compatible.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:58 +02:00
Lars Hjemli
50d5af3adc Add support for --scan-path command line option
This is an alias for --scan-tree (which might be deprecated in the
future).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:58 +02:00
Lars Hjemli
0046637692 Rename 'repo.scan' to 'scan-path'
The 'repo.' prefix will soon be reserved for repo-specific config
options.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:58 +02:00
Lars Hjemli
d746827ec4 cgit.c: add support for caching autodetected repositories
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:57 +02:00
Lars Hjemli
302a3efa26 cgit.c: make print_repolist() and print_repo() reusable for caching
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:57 +02:00
Lars Hjemli
6f3bf1ae1e cgit.c: add support for cgitrc option 'repo.scan'
When specified, the specified path will be scanned for repositories.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-24 10:22:57 +02:00
Lars Hjemli
b0f946bcc7 Rename "linenumbers" to "enable-tree-linenumbers", change default to "1"
This makes the name of the cgitrc option more descriptive and at the
same time changes the default from "0" to "1" in an attempt to stay
backwards compatible - prior to the introduction of "source-filter"
and "linenumbers", cgit always generated linenumber links in the
tree view, but now this feature can be turned off (one might want to
do this if the source-filter performs line-wrapping etc).

While at it, the documentation is updated to match the surrounding
descriptions.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-21 14:26:52 +02:00
Florian Pritz
d67cc7f9d5 Add 'linenumbers' config option
Signed-off-by: Florian Pritz <bluewind@xssn.at>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-21 14:17:49 +02:00
Lars Hjemli
0374a76ce1 cgit.c: fix caching keyed on PATH_INFO with no QUERY_STRING
When generating a hash for caching, ctx.qry.raw is used as key. And
since cgit_parse_url() zero-terminates it's argument (after the repo
path), ctx.qry.raw must xstrdup(ctx.qry.url).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-20 10:07:51 +02:00
Lars Hjemli
cb92d05b6b Merge branch 'stable' 2009-08-17 10:17:23 +02:00
Lars Hjemli
435a1da8d1 cgit.c: do not segfault on unexpected query-string format
The querystring_cb() function will be invoked with a NULL value when
the querystring contains a name not followed by a '='. Such a value
used to cause a segfault, which this patch fixes.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-17 09:26:17 +02:00
Lars Hjemli
2c742d1a92 Merge branch 'lh/embedded' 2009-08-11 10:12:53 +02:00
Lars Hjemli
92f9b53c42 cgit.c: make '/cgit.png' the default value for 'logo' option
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-10 18:59:31 +02:00
Lars Hjemli
8b2252b0b6 ui-shared: add support for NO_HTTP=1/--nohttp
cgit_print_http_headers() used to do nothing if 'embedded' was
specified in cgitrc, but that was wrong - we never want to skip the
headers when invoked as a CGI app. Sadly, there's no easy way to
detect if we're invoked as a CGI app or if we're invoked by another
CGI app, so for the latter case cgit needs to be invoked with either
--nohttp on the command line or NO_HTTP=1 in the environment.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-10 09:20:17 +02:00
Lars Hjemli
60a26272e0 Cleanup handling of environment variables
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-10 08:21:09 +02:00
Lars Hjemli
db8b8cb946 Merge branch 'lh/about'
Conflicts:
	cgit.h
2009-08-09 13:46:34 +02:00
Lars Hjemli
db6303b588 Merge branch 'lh/plugins'
Conflicts:
	cgit.c
	cgit.h
2009-08-09 13:46:01 +02:00
Lars Hjemli
17e3ff4264 Merge branch 'lh/mimetypes' 2009-08-09 13:45:36 +02:00
Lars Hjemli
537c05f138 Add 'about-filter' and 'repo.about-filter' options
These options can be used to execute a filter command on each about-page,
both top-level and for each repository (repo.about-filter can be used
to override the current about-filter).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-09 13:41:54 +02:00
Lars Hjemli
97b3d25262 cgit.c: allow repo.*-filter options to unset the current default
If e.g. repo.commit-filter is specified as an empty string, this
is now properly handled as disabling the global commit-filter setting
for the current repository.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-09 13:39:44 +02:00
Lars Hjemli
e976df2795 Add support for repo.commit-filter and repo.source-filter
These options can be used to override the default commit- and source-
filter settings per repository.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-08-09 13:22:00 +02:00
Martin Szulecki
2f56e390f0 Introduce noplainemail option to hide email adresses from spambots
Signed-off-by: Martin Szulecki <opensuse@sukimashita.com>
2009-08-08 14:23:28 +02:00
Lars Hjemli
f35db1cd2b ui-commit: add support for 'commit-filter' option
This new option specifies a filter which is executed on the commit
message, i.e. the commit message is written to the filters STDIN and
the filters STDOUT is included verbatim as the commit message.

This can be used to implement commit linking by creating a simple
shell script in e.g. /usr/bin/cgit-commit-filter.sh like this:

#/bin/sh
sed -re 's|\b([0-9a-fA-F]{6,40})\b|<a href="./?id=\1">\1</a>|g'

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-07-31 17:42:57 +02:00
Lars Hjemli
46b7abed99 ui-tree: add support for source-filter option
This new option is used to specify an external command which will be
executed when displaying blob content in the tree view. Blob content
will be written to STDIN of the filter and STDOUT from the filter
will be included verbatim in the html output from cgit. The file name
of the blob will be passed as the only argument to the filter command.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-07-31 17:41:21 +02:00
Lars Hjemli
d6f6072560 Add generic filter/plugin infrastructure
The functions cgit_open_filter() and cgit_close_filter() can be used to
execute filters on the output stream from cgit.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-07-31 17:39:51 +02:00
Lars Hjemli
c4d46c7035 Add support for mime type registration and lookup
This patch makes it possible to register mappings from filename
extension to mime type in cgitrc and use this mapping when returning
blob content in `plain` view.

The reason for adding this mapping to cgitrc (as opposed to parsing
something like /etc/mime.types) is to allow quick lookup of a limited
number of filename extensions (/etc/mime-types on my machine currently
contains over 700 entries).

NB: A nice addition to this patch would be to parse /etc/mime.types
when `plain` view is requested for a file with an extension for which
there is no mapping registered in cgitrc.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-07-25 12:55:15 +02:00
Lars Hjemli
286a905842 Merge branch 'lh/embedded'
Conflicts:
	cgitrc.5.txt
	ui-shared.c
2009-07-25 12:29:22 +02:00
Lars Hjemli
ef0c6aadf7 Add support for 'noheader' option
This option can be used to disable the standard cgit page header, which
might be useful in combination with the 'embedded' option.

Suggested-by: Mark Constable <markc@renta.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-07-25 12:19:31 +02:00
Lars Hjemli
542f6a4330 Merge branch 'ml/head-include' 2009-07-25 12:04:08 +02:00
Lars Hjemli
681fdc4547 Merge branch 'plain-etag'
Conflicts:
	ui-shared.c
2009-07-25 11:59:22 +02:00
Lars Hjemli
e429fb0cca Return http statuscode 404 on unknown branch
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-06-07 20:43:08 +02:00
Mark Lodato
b5a3a20496 Add head-include configuration option.
This patch adds an option to the configuration file, "head-include",
which works just like "header" or "footer", except the content is put
into the HTML's <head> tag.
2009-06-07 18:55:44 +02:00
Lars Hjemli
3ff58ddd51 Add support for HEAD requests
This is a quick 'n dirty hack which makes cgit honor HEAD requests.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-02-19 23:24:15 +01:00
Lars Hjemli
488a214a81 Add support for ETag in 'plain' view
When downloading a blob identified by its path, the client might want
to know if the blob has been modified since a previous download of the
same path. To this end, an ETag containing the blob SHA1 seems to be
ideal.

Todo: add support for HEAD requests...

Suggested-by: Owen Taylor <otaylor@redhat.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-02-19 22:38:36 +01:00
Lars Hjemli
0cbb50841a Add support for an 'embedded' option in cgitrc
When activated, cgit will neither generate http headers nor any 'framing'
html elements (like <html> and <body>). Also, all page content is now
wrapped in a <div id='cgit'> element to make it easier to select the
correct cgit classes when embedded/themed.

Suggested-by: Matt Sealey <matt@genesi-usa.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-02-02 08:11:29 +01:00
Lars Hjemli
b115955d71 Add support for a custom header
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-01-29 21:27:39 +01:00
Lars Hjemli
7710178e45 Merge branch 'lh/stats'
Conflicts:
	cgit.c
	cgit.css
	cgit.h
	ui-tree.c

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-01-27 20:16:37 +01:00
Lars Hjemli
31665579c2 Merge branch 'stable' 2009-01-11 22:00:25 +01:00
Lars Hjemli
eb14609dc4 Avoid SEGFAULT on invalid requests
When an unknown page is requested, either on the querystring or via
PATH_INFO, we end up with a null-referencing cgit_cmd. This null-
pointer is then used as argument to the hc() function (which decides
what tab to render as 'active'), but this function failed to check if a
valid cmd was specified and a SEGFAULT would occur. This patch fixes the
issue by introducing a 'fallback-cmd' which specifies what tab to render
as 'active' when no valid cmd is requested.

While at it, we now also keep track of the active repository even if an
invalid cmd was requested since we want to show the error message about
the invalid request in the correct context.

Noticed-by: Robin Redeker <elmex@ta-sa.org>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2009-01-11 21:23:04 +01:00
Lars Hjemli
377a1c8ced Untie logic for SCRIPT_NAME and PATH_INFO
SCRIPT_NAME is used as fallback for virtual-root when virtual-root is
unspecified in cgitrc and PATH_INFO is used as fallback for the query-
string parameter 'url' when the latter is unspecified. But until now,
the use of PATH_INFO depended on virtual-root also being unspecified,
i.e. it was impossible to use PATH_INFO when virtual-root was specified.

This commit makes the fallback on SCRIPT_NAME and PATH_INFO independent
code paths, i.e. it is now possible to specify virtual-root in cgitrc
while still using PATH_INFO (instead of rewrite rules) to get 'pretty
urls'.

Noticed-by: Jack Moffitt <jack@chesspark.com>
Noticed-by: LiKai Liu <liulk@cs.bu.edu>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-12-26 10:33:01 +01:00
Lars Hjemli
fb2f3f6c29 ui-stats: replace 'enable-stats' setting with 'max-stats'
The new 'max-stats' and 'repo.max-stats' settings makes it possible to
define the maximum statistics period, both globally and per repo. Hence,
it is now feasible to allow statistics on repositories with a high commit
frequency, like linux-2.6, by setting repo.max-stats to e.g. 'month'.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-12-07 13:17:21 +01:00
Lars Hjemli
f86a23ff53 Add a 'stats' page to each repo
This new page, which is disabled by default, can be used to print some
statistics about the number of commits per period in the repository,
where period can be either weeks, months, quarters or years.

The function can be activated globally by setting 'enable-stats=1' in
cgitrc and disabled for individual repos by setting 'repo.enable-stats=0'.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-12-06 17:38:19 +01:00
Lars Hjemli
3c32fe0771 Merge branch 'full-log'
Conflicts:
	cgit.c
	cgit.h
2008-12-06 11:37:37 +01:00
Lars Hjemli
0274b57d55 ui-log: add support for showing the full commit message
Some users prefer to see the full message, so to make these users happy
the new querystring parameter "showmsg" can be used to print the full
commit message per log entry.

A link is provided in the log heading to make this function accessible,
and all links and forms tries to preserve the users preference.

Note: the new link is not displayed on the summary page since the point
of the summary page is to be a summary, but it is still obeyed if specified
manually.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-11-29 18:39:41 +01:00
Benjamin Close
d71c0c725d Add support for sorting by Age in the repolist
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-11-29 13:25:54 +01:00
Lars Hjemli
5632ba35d1 Add cgit_query.nohead flag
This flag is set when no HEAD is specified in the querystring. Currently
it has no users, but it will be used by ui-snapshot to invoke a DWIM-mode
where the revision is extracted from the snapshot name.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-10-11 19:05:50 +02:00
Lars Hjemli
93397a765b Add support for --scan-tree=<path> option to cgit
This option makes cgit scan a directory tree looking for git repositories,
generating suitable definitions for a cgitrc file on stdout.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-09-15 23:35:27 +02:00
Lars Hjemli
e154edd807 Teach cgit how to use PATH_INFO
This commit makes cgit use the cgi variables SCRIPT_NAME and PATH_INFO
when virtual-root is unspecified in cgitrc and no url-parameter is
specified on the querystring. This has two nice effects:

* Virtual urls works out of the box, no more need for rewrite-rules in httpd.
* Virtual urls with special querystring characters are handled correctly.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-09-15 23:00:30 +02:00
Lars Hjemli
e5da4bca54 Implement plain view
This implements a way to access plain blobs by path (similar to the
tree view) instead of by sha1.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-08-06 11:21:30 +02:00
Stefan Naewe
0f0ab148c6 Added local-time option to cgitrc
When `local-time` is set, commit, tag and patch timestamps will be printed
in the servers timezone. Also, regardless of the value of `local-time`,
these timestamps will now always show the timezone.

Signed-off-by: Stefan Naewe <stefan.naewe@atlas-elektronik.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-08-01 22:09:13 +02:00
Lars Hjemli
952f4ece29 Modify default value for a few cgitrc options
The default max-length used when printing commit messages and repo
descriptions can be increased due to the new layout (no sidebar).

Also, on the repo summary page I believe it makes sense to only show the
ten most recent branches and tags by default, just as it makes sense to
show the ten most recent commit messages for the active branch.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-07-27 12:58:37 +02:00
Lars Hjemli
25c84326de Be prepared for empty repositories
Before this patch, cgit would segfault on repositories with no refs.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-07-27 12:32:08 +02:00
Lars Hjemli
502865a5ec Add a favicon option to cgitrc
This option is used to specify a shortcut icon on all cgit pages.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-07-19 20:47:39 +02:00
Lars Hjemli
de5e928171 Add support for including a footer on all pages
The new cgitrc option `footer` can be used to include a html-file which
replaces the standard 'generated by cgit' message at the bottom of each
page.

Suggested-by: Peter Danenberg <pcd@wikitex.org>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-06-26 13:53:30 +02:00
Michael Krelin
42effc9390 allow specification of directly linked blobs mimetypes
Signed-off-by: Michael Krelin <hacker@klever.net>
2008-06-24 23:42:32 +02:00
Lars Hjemli
af2e75616d cache.c: do not ignore errors from print_slot()
If print_slot() fails, the client will be served an inferior response.
This patch makes sure that such an error will be returned to main(), which
in turn will try to inform about the error in the response itself.

The error is also printed to the cache_log, i.e. stderr, which will make
the error message appear in error_log (atleast when httpd==apache).

Noticed-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-05-18 23:59:11 +02:00
Lars Hjemli
c6078b8b00 Add a pager on the repolist
This enables a pager on the repolist which restricts the number of entries
displayed per page, controlled by the new option `max-repo-count` (default
value 50).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-05-03 10:54:39 +02:00
Lars Hjemli
e19683bede Merge branch 'lh/cache'
* lh/cache:
  Add page 'ls_cache'
  Redesign the caching layer
2008-05-03 10:10:07 +02:00
Lars Hjemli
c6431a7150 Prepare for 'about site' page / add 'root-readme' option to cgitrc
The new option names a file which will be included on a new page, next
to the current 'index' page.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-29 01:06:30 +02:00
Lars Hjemli
651ef79768 Make it possible for a single cmd to work both with and without a repo
When cgit_cmd.want_repo was 0, we used to assume that the cmd would never
be invoked for a repo. But soon this will become untrue (the 'about' cmd
is rapidly approching), so from now on we will initialize any requested
repo even if want_repo==0 (and return an error if want_repo==1 but no repo
is specified).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-29 01:01:30 +02:00
Lars Hjemli
4c9916043d Re-enable 'index-info' and add support for 'root-desc' in cgitrc
The 'index-info' option got lost when the layout was converted from
sidebar to old-fashioned header (noticed by Harley Laue, thanks!), and
this commit re-enables it.

But there is now also an alternative in the 'root-desc' option; where
'index-info' specifies a file to include, 'root-desc' specifies the text
literally. This might be nicer for the one-liner descriptions which these
options typically provides.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-04-29 00:55:34 +02:00
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
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
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
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
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
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
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
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
b88fb016d0 Improve initialization of git directory
Using the functions offered by libgit feels like the right thing to do. Also,
make sure that config errors gets properly reported.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-16 21:48:19 +01:00
Lars Hjemli
d1f3bbe9d2 Move cgit_repo into cgit_context
This removes the global variable which is used to keep track of the
currently selected repository, and adds a new variable in the cgit_context
structure.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-16 13:56:09 +01:00
Lars Hjemli
b228d4ff82 Add all config variables into struct cgit_context
This removes another big set of global variables, and introduces the
cgit_prepare_context() function which populates a context-variable with
compile-time default values.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-16 13:10:50 +01:00
Lars Hjemli
d14d77fe95 Introduce struct cgit_context
This struct will hold all the cgit runtime information currently found in
a multitude of global variables.

The first cleanup removes all querystring-related variables.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-02-16 12:07:28 +01:00
Lars Hjemli
f80ff37a17 Handle missing default branch and error out on invalid branch names
When no branch is specified and the repository does not have a default branch,
use the first branch.

Also, print sensible errormessages when the repository does not contain any
branches and when invalid branchnames are specified.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2008-01-04 13:43:40 +01:00
Lars Hjemli
620bb3e5e4 Add plain patch view
The new view mimics the output from `git format-patch`, making it possible
to cherry-pick directly from cgit with something like `curl $url | git am`.

Inspired by a patch to `git-apply` by Mike Hommey:
  http://thread.gmane.org/gmane.comp.version-control.git/67611/focus=67610

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-12-11 02:43:24 +01:00
Lars Hjemli
68ca032dbe Teach log search about --grep, --author and --committer
This makes the log searching more explicit, using a dropdown box to specify
the commit field to match against.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-10-28 15:23:00 +01:00
Lars Hjemli
7937d06090 Add support for refs view
This enables the new urls $repo/refs, $repo/refs/heads and $repo/refs/tags,
which can be used to print _all_ branches and/or tags.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-10-27 10:53:27 +02:00
Lars Hjemli
1a6025b7a5 Add prefix parameter to cgit_print_diff()
This allows a diff to be restricted to the path prefix specified in the url.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-10-01 11:46:38 +02:00
Lars Hjemli
eb45342e73 cgit_print_snapshot_links: use url to specify snapshot name
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-07-23 00:27:32 +02:00
Lars Hjemli
1d4aaff696 Merge branch 'master' of git://git.klever.net/patchwork/cgit
* 'master' of git://git.klever.net/patchwork/cgit:
  link raw blob from tree file view
  fix: changed view link to blob in summary.
  allow selective enabling of snapshots
  shorten snapshot names to repo basename
  introduce cgit_repobasename
  added snapshot filename to the link
  add plain uncompressed tar snapshort format
  introduced .tar.bz2 snapshots
  compress .tar.gz using gzip as a filter
  added a chk_non_negative check
  css: adjust vertical-align of commit info th cells
  add support for snapshot tarballs

Conflicts:

	ui-summary.c

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-07-22 23:57:56 +02:00
Lars Hjemli
4e9107abfe Add ui-tag.c
This file implements the tag-command, i.e. printing of annotated tags.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-07-22 23:44:57 +02:00
Michael Krelin
dc3c9b5bc4 allow selective enabling of snapshots
snapshot configuration parameter now can be a
 space/slash/comma/colon/semicolon/pipe-separated list of snaphot suffixes as
 listed in ui-snapshot.c

Signed-off-by: Michael Krelin <hacker@klever.net>
2007-07-21 18:00:53 +02:00
Michael Krelin
97c025ae8e shorten snapshot names to repo basename
Signed-off-by: Michael Krelin <hacker@klever.net>
2007-07-21 15:29:55 +02:00
Michael Krelin
f97c707a3b add support for snapshot tarballs
- reworked cgit_print_snapshot to use a list of supported archivers and pick
	one for the suffix supplied
- moved printing of snaphot links into ui-snapshot and make it iterate through
	the said list
2007-07-18 14:40:03 +02:00
Michael Krelin
51f6547879 make config adjustable via env variable CGIT_CONFIG
Signed-off-by: Michael Krelin <hacker@klever.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-07-03 21:28:13 +02:00
Lars Hjemli
16a3d2779c Merge branch 'lh/menu'
* lh/menu:
  Add ofs argument to cgit_log_link and use it in ui-log.c
  Add trim_end() and use it to remove trailing slashes from repo paths
  Do not include current path in the "tree" menu link
  Add setting to enable/disable extra links on index page
  Change S/L/T to summary/log/tree
  Change "files" to "tree"
  Include querystring as part of cached filename for repo summary page
  Add more menuitems on repo pages
2007-06-29 20:32:08 +02:00
Lars Hjemli
7d6ee4ee8a Include querystring as part of cached filename for repo summary page
When adding support for the h parameter to the summary page (passing current
branch between pages), the builtin cache returned basically random results
for summary page since the cached filename didn't honour the querystring.

This fixes the issue for now, but someday it might be worthwhile to generate
'canonical' filenames in the cache for all pages, i.e. something a bit more
clever than just including the querystring.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-06-18 21:17:24 +02:00
Lars Hjemli
f69250358a Add version info from git-describe
A new script, gen-version.sh, is now invoked from 'make version' to generate
the file VERSION. This file contains a version identifier generated by
git-describe and is included in the Makefile.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-06-18 10:38:40 +02:00
Lars Hjemli
4a0be58666 Add cgit_diff_link()
This adds a new function used to generate links to the diff page and uses
it everywhere such links appear (expect for single files in the diffstat
displayed on the commit page: this is now a link to the tree page).

The updated diff-page now expects zero, one or two revision specifiers, in
parameters head, id and id2. Id defaults to head unless otherwise specified,
while head (as usual) defaults to repo.defbranch. If id2 isn't specified, it
defaults to the first parent of id1.

The most important change is of course that now all repo pages (summary, log,
tree, commit and diff) has support for passing on the current branch and
revision, i.e. the road is now open for a 'static' menu with links to all
of these pages.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-06-17 18:12:03 +02:00
Lars Hjemli
cd79c16844 ui-log: honor id=sha1 on querystring
This teaches ui-log to prefer id=sha1 and fallback to h=rev if no id-
parameter is specified. With this change, summary, log, commit and tree
views now passes current branch using h parameter and current revision
using id parameter.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-06-17 14:58:45 +02:00
Lars Hjemli
42a7eb9c73 Add cgit_commit_link() + support for id=sha1 to commit view
This adds a function to generate links to the commit page and extends said
page to use id from querystring as primary revision specified (fallback to
h).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-06-17 14:53:02 +02:00
Lars Hjemli
ffc69736a6 ui-tree: unify with ui-view, use path to select tree/blob
This teaches ui-tree to show both trees and blobs, thereby making ui-view
superfluous. At the same time, ui-tree is extended to honour the specified
path instead of requiering a tree/blob sha1.
2007-06-16 20:20:42 +02:00
Ondrej Jirman
a922615dae Add option to disable pager to cgit_print_log().
This is needed for upcomming shortlog on summary page
patch.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-31 10:24:37 +02:00
Lars Hjemli
30ccdcaa74 Enable url=value querystring parameter
This makes is possible to use repo-urls like '/pub/scm/git/git.git' and
even add path specifications, like '/pub/scm/git/git.git/log/documentation'.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-18 22:51:01 +02:00
Lars Hjemli
305414df12 Move cgit_get_repoinfo into shared.c
This function will be usefull when parsing url arguments.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-18 22:51:01 +02:00
Lars Hjemli
f9ff7df613 Add support for commitdiff via h parameter
The commitdiff will be generated against the first parent, and the
diff page also gets the benefit of repo.defbranch.

Cleaned up some bad whitespace in cgit.h while at it.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-16 00:58:35 +02:00
Lars Hjemli
a2ddc10479 Change commit-view to expect h parameter, not id
The change makes the commit-page benefit from repo.defbranch.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-16 00:26:23 +02:00
Lars Hjemli
b28b105ec1 Enable default value for head parameter
Pages which expect head to be specified in the querystring can now be
given a default value, configurable per repository (via repo.defbranch,
which defaults to "master").

Currently, only the log page actually works without parameters, but the
defbranch is bound to be exploited.

This also removes some dead code from shared.c

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-16 00:16:00 +02:00
Lars Hjemli
ea2831f1c8 Don't hardcode urls when SCRIPT_NAME is available
Also, let the makefile define the name of the installed cgi and
use that definition as a default value for cgit_script_name variable.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-15 00:48:31 +02:00
Lars Hjemli
9ecde6568a Let makefile override the configfile location
Pass CGIT_CONFIG from makefile during build, to enable stuff like

  make CGIT_CONFIG=/var/cgit/cgit.conf

Noticed by Kristian Høgsberg <krh@bitplanet.net>

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-14 23:09:49 +02:00
Lars Hjemli
5b94c96a83 cgit.c: fix whitespace breakage 2007-05-14 22:58:01 +02:00
Lars Hjemli
9fb53af215 Add log filtering by path and link to it from tree view
This enables path-filtering in log-view, and adds a link per entry in
tree-view to show the log for each file/directory.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-14 11:13:18 +02:00
Lars Hjemli
6a8749d3bd Add commitdiff between commit and each of it's parent
A link is added next to each parent of a commit, leading to the new
diff-functionality in ui-diff.c.

Also added support for a path-parameter to filelevel diffs accessed via the
diffstat.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-13 23:27:53 +02:00
Lars Hjemli
c6cf3a424a Add max-commit-count parameter to cgitrc
This enabled customizing number of commits shown per page in log view. It
also changes the default from 100 to 50, mainly due to the more cpu
intensive log pages (number of files/lines changed) but also since 100
log messages requires excessive scrolling.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-13 17:15:06 +02:00
Lars Hjemli
ca8eb8fc8f Add support for downloading single blobs
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-09 00:48:09 +02:00
Lars Hjemli
7250a15467 ui-view: show pathname if specified in querystring
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-05-08 23:52:56 +02:00
Lars Hjemli
66cacd053b Layout update 2007-02-21 00:24:36 +01:00
Lars Hjemli
ac70cb4795 Make snapshot feature configurable
Snapshots can now be enabled/disabled by default for all repositories in
cgitrc with param "snapshots". Additionally, any repo can override the
default setting with param "repo.snapshots".

By default, no snapshotting is enabled.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-02-08 14:47:56 +01:00
Lars Hjemli
ab2ab95f09 Add support for snapshots
Make a link from the commit viewer to a snapshot of the corresponding tree.

Currently only zip-format is supported.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-02-08 13:58:58 +01:00
Lars Hjemli
ce1c7336e5 Read repo-info from /etc/cgitrc
This makes cgit read all repo-info from the configfile, instead of scanning for
possible git-dirs below a common root path. This is primarily done to get
better security (separate physical path from logical repo-name).

In /etc/cgitrc each repo is registered with the following keys:

repo.url
repo.name
repo.path
repo.desc
repo.owner

Note:

*Required keys are repo.url and repo.path, all others are optional
*Each occurrence of repo.url starts a new repository registration
*Default value for repo.name is taken from repo.url
*The value of repo.url cannot contain characters with special meaning for
 urls (i.e. one of /?%&), while repo.name can contain anything.

Example:

repo.url=cgit-pub
repo.name=cgit/public
repo.path=/pub/git/cgit
repo.desc=My public cgit repo
repo.owner=Lars Hjemli

repo.url=cgit-priv
repo.name=cgit/private
repo.path=/home/larsh/src/cgit/.git
repo.desc=My private cgit repo
repo.owner=Lars Hjemli

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-02-04 21:47:46 +01:00
Lars Hjemli
5cd2bf7e7f WIP: add paths/backlinks to tree/blobview 2007-01-12 00:46:17 +01:00
Lars Hjemli
2c2047ff67 Remove troublesome chars from cachefile names
Add a funtion cache_safe_filename() which replaces possibly bad filename
characters with '_'.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-01-12 00:24:35 +01:00
Lars Hjemli
83a5f35a27 Move cache_prepare() to cgit
This moves some cgit-specific stuff away from cache.c

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2007-01-12 00:00:15 +01:00
Lars Hjemli
a6a1112528 Use TTL-settings even in nocache mode
In nocace mode an uninitialized ttl-setting was used to generate http-Expires
header. Fix it.

Signed-off-by: Lars Hjemli <larsh@hal-2004.(none)>
2007-01-05 18:18:58 +01:00
Lars Hjemli
732d68d240 Add basic log filtering
This enables case-insensitive grep on logentris using the new search box

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-28 02:45:28 +01:00
Lars Hjemli
e39d738c39 Add generic support for search box in page header
This adds the ability to show a search box in any pageheader with correct href and
hidden form data, but does not enable the box on any pages.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-28 02:01:49 +01:00
Lars Hjemli
36aba00273 Add basic diff view
Finally, xdiff is used to show per-file diffs via commit view.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-20 22:48:27 +01:00
Lars Hjemli
7c849d94ec Allow relative paths for cgit_cache_root
Make sure we chdir(2) back to the original getcwd(2) when a page
has been generated. Also, if the cgit_cache_root do not exist,
try to create it.

This is a feature intended to ease testing/debugging.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-16 13:55:58 +01:00
Lars Hjemli
521dc7a4bf Add argument parsing + switch for uncached operation
This adds support for the following options to cgit:
  --root=<path>
  --cache=<path>
  --nocache
  --query=<querystring>
  --repo=<reponame>
  --page=<pagename>
  --head=<branchname>
  --sha1=<sha1>
  --ofs=<number>

On startup, /etc/cgitrc is parsed, followed by argument parsing and
finally querystring parsing.

If --nocache is specified (or set in /etc/gitrc), caching is disabled and
cgit instead generates pages to stdout.

The combined effect of these two changes makes testing/debugging a lot
less painfull.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-16 13:38:45 +01:00
Lars Hjemli
9a8f88658d Add ui-commit.c + misc ui cleanups
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-16 00:19:56 +01:00
Lars Hjemli
420712ac25 Add simple pager to log page
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-14 00:40:34 +01:00
Lars Hjemli
06fe0c2f47 Add display of tree content w/ui-tree.c
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-13 00:13:27 +01:00
Lars Hjemli
fbaf1171b4 Don't truncate valid cachefiles
An embarrassing thinko in cgit_check_cache() would truncate valid cachefiles
in the following situation:
  1) process A notices a missing/expired cachefile
  2) process B gets scheduled, locks, fills and unlocks the cachefile
  3) process A gets scheduled, locks the cachefile, notices that the cachefile
     now exist/is not expired anymore, and continues to overwrite it with an
     empty lockfile.

Thanks to Linus for noticing (again).

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
2006-12-11 22:53:50 +01:00