about summary refs log tree commit diff
path: root/README
blob: 5917c37ce30b3f0a374c9fa376955f51f1d7bfbf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Cache algorithm
===============

Cgit normally returns cached pages when invoked. If there is no cache file, or
the cache file has expired, it is regenerated. Finally, the cache file is 
printed on stdout.

When it is decided that a cache file needs to be regenerated, an attempt is 
made to create a corresponding lockfile. If this fails, the process gives up
and uses the expired cache file instead.

When there is no cache file for a request, an attempt is made to create a 
corresponding lockfile. If this fails, the process calls sched_yield(2) before
restarting the request handling.

In pseudocode:

	name = generate_cache_name(request);
top:
	if (!exists(name)) {
		if (lock_cache(name)) {
			generate_cache(request, name);
			unlock_cache(name);
		} else {
			sched_yield();
			goto top;
		}
	} else if (expired(name)) {
		if (lock_cache(name)) {
			generate_cache(request, name);
			unlock_cache(name);
		}
	}
	print_file(name);


The following options can be set in /etc/cgitrc to control cache behaviour:
  cache-root:        root directory for cache files
  cache-root-ttl:    TTL for the repo listing page
  cache-repo-ttl:    TTL for any repos summary page
  cache-dynamic-ttl: TTL for pages with symbolic references (not SHA1)
  cache-static-ttl:  TTL for pages with sha1 references

TTL is specified in minutes, -1 meaning "infinite caching". 


Naming of cache files
---------------------
Repository listing:  <cachedir>/index.html
Repository summary:  <cachedir>/<repo>/index.html
Repository subpage:  <cachedir>/<repo>/<page>/<querystring>.html

The corresponding lock files have a ".lock" suffix.

href='/litterbox/commit/scoop.c?h=1.9&id=12149d5b8a1482b6221245320fc2c4c8ce2525b0&follow=1'>Add scoop IRC output formatJune McEnroe 2019-12-31Add scoop output format optionJune McEnroe 2019-12-31Refactor scoop formatters and group colored outputJune McEnroe 2019-12-31Add strftime format string optionJune McEnroe 2019-12-31Refactor binding in scoopJune McEnroe 2019-12-31Add option to group events by contextJune McEnroe 2019-12-31Add missing includeJune McEnroe 2019-12-31Use standout mode for highlightingJune McEnroe 2019-12-31Rewrite scoop(1) argument descriptionsJune McEnroe 2019-12-31Color both nicks in a changeJune McEnroe 2019-12-31Implement nick-colored outputJune McEnroe 2019-12-31Only enable highlighting on terminal outputJune McEnroe 2019-12-31Set up pager pipeJune McEnroe 2019-12-30Normalize date inputJune McEnroe 2019-12-30Add initial rough version of scoopJune McEnroe 2019-12-30Join with USING wherever possibleJune McEnroe 2019-12-30Add -D flag to prospective scoop manualJune McEnroe 2019-12-30Order results by ID in outer query in litterboxJune McEnroe 2019-12-30Use X macro for Type enumJune McEnroe 2019-12-30Remove scoop -ABCJune McEnroe 2019-12-30Add limit option for litterbox's search query interfaceJune McEnroe