CVSTrac Legacy Code

Timeline
Login

Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

839 check-ins using file howitworks.html version cfd0d04667

2022-09-16
19:10
update for some git diff changes (Leaf check-in: e66a083f85 user: cpb tags: trunk)
2019-01-20
21:34
Statically link against a recent version of SQLite. (check-in: e4587a17aa user: drh tags: trunk)
2016-07-18
19:27
slightly cleaner (check-in: 3625b606ff user: cpb tags: trunk)
19:22
block PROXY param. See https://httpoxy.org/ (check-in: 5124b0f577 user: cpb tags: trunk)
2015-06-17
13:04
We need to use the "full" commit id for the base too. (check-in: 6de5916d35 user: root tags: trunk)
2015-06-04
18:55
Need to prefix filenames with the module for browse to work correctly. Fortunately, we can strip it. (check-in: 0b1a22dfae user: cpb tags: trunk)
2015-05-25
16:12
Initial support for multiple GIT modules in a single GitTrac instance (i.e. conceptually similar to multiple CVS modules in a single CvsTrac). (check-in: 8c72a44f1e user: cpb tags: trunk)
2015-03-05
17:30
It appears that Firefox recently triggered a bug in our CSS. (check-in: 360a8812cf user: root tags: trunk)
2011-11-29
14:50
Apparently, nobody has combined an inspection on a branch commit with an RSS feed (check-in: 303444c716 user: cpb tags: trunk)
2011-09-14
12:47
If the user.passwd field is "any" then allow login with any password. (check-in: f81e205041 user: drh tags: trunk)
2011-09-13
22:02
Improvements to the homepage. (check-in: 2832e0a44b user: drh tags: trunk)
21:59
Add the www/index.html document. (check-in: 2845a5cc32 user: drh tags: trunk)
21:48
Add the "directory:" and "project:" lines to the CGI invocation file to allow operation from a chroot CGI without access to a shell. (check-in: 27a4d13d4f user: drh tags: trunk)
2011-02-18
13:43
(#823) MAX() isn't a good function to use on numeric values stored as text. "Force" fields to numbers first. (check-in: d199007454 user: cpb tags: trunk)
2010-11-26
15:55
(#822) add a secondary sort by date as default. Adding a "Sort by date"/"Sort by Relevance" toggle should be trivial from here. (check-in: d339dba99a user: cpb tags: trunk)
2009-12-23
14:03
check for valid ticket and cn before trying to output anything (check-in: 7b0e1f76c7 user: cpb tags: trunk)
14:03
oops... make sure it's a valid ticket number (check-in: 79dd28a1ad user: cpb tags: trunk)
2009-12-09
15:42
minor fixups to the RSS HTML, cleans up inspections a touch (check-in: d3b0aa6518 user: cpb tags: trunk)
2009-12-06
15:57
(#789) searching on a ticket or checking number in the appropriate format will take the user directly to the appropriate page. Implemented =is_ticket()= and =is_chng()= functions to simplify the process and use them in /cvstrac/format.c as well. (check-in: 167d2fdefd user: cpb tags: trunk)
2009-10-24
11:23
(#810) identify milestones in the ticket history (check-in: c0f2ef4f33 user: cpb tags: trunk)
2009-06-19
13:56
(#802) oops, we don't use that yet, if ever. (check-in: 4277e77c9b user: cpb tags: trunk)
2009-06-04
16:42
(#800) end transaction when no GIT repo defined (check-in: 0991d26569 user: cpb tags: trunk)
2009-05-15
21:59
(#39) diff coloring using DIVs and stylesheets classes =diffx= where =x= is *h*eader, *c*hunk, *t*ext, *a*dded, *r*emoved (check-in: 864223dd4b user: ono tags: trunk)
13:55
(#797) make sure we get latest change date relative to specified directory (check-in: 1bdc8232d2 user: ono tags: trunk)
12:32
*: Download tarball is now directory browse action, rather than separate link *: Tarball now contains version and subdirectory only if necessary *: Determines modification date using filechng table *: Subversion now fixed for UNIX environment, also supports pure =tar=, =tar.gz= and =tar.bz2= *: GIT implementation using =git archive= (check-in: 8c8238f05e user: ono tags: trunk)
2009-05-14
12:25
(#799) properly escape %%. (check-in: dab276db97 user: ono tags: trunk)
12:11
(#534, #567) ensure we are not sending Content-Length with value of 0 (zero), that may happen on some actions and confuse browsers. (check-in: 73773e45d3 user: ono tags: trunk)
12:01
(#798) Remove trailing spaces from rlog Author/Committer names, drop Commiter info if is the person as Author. (check-in: e811e9226a user: ono tags: trunk)
11:48
(#797) download current folder as tarball feature, structure for all SCM, Subversion implementation trough =svntar=. (check-in: 0538777a0b user: ono tags: trunk)
11:22
(#740) take the SRCDIR path from the platform.mk file placement, a do not hardcode SRCDIR anymore. (check-in: 586b227c9a user: ono tags: trunk)
2009-03-27
23:53
some style cleanups, get rid of unused variables, etc. (check-in: d8dd0972d4 user: cpb tags: trunk)
13:40
add support for incoming {link:http://trac.edgewall.org/wiki/InterTrac InterTrac} links. This allows Trac sites to reference CVSTrac objects most naturally.

Outgoing InterTrac links _from_ a CVSTrac install can be accomplished with custom markup, as in:

{quote:%x}

which would be referenced via something like:

{quote:{<markup>: ticket:451 #451}} {quote:{trac: wiki:InterTrac InterTrac}}
(check-in: ede2546f24 user: cpb tags: trunk)
2009-03-14
02:07
(#791) fine tune the report RSS output. This makes it reasonably functional, although I'm not entirely happy with how dates are(n't) managed. (check-in: 340df5c3bf user: cpb tags: trunk)
2009-03-13
02:22
(#783) direct inspections to the appropriate positions in chngview from both the timeline, RSS, as well as after sumitting them. (check-in: 3b02e5ca7d user: cpb tags: trunk)
02:00
(#783) when we append to a ticket we get bounced back to the ticket view. Might as well get bounced back to the anchor we just added. (check-in: fb194a19a2 user: cpb tags: trunk)
2009-03-10
03:06
(#791) first stab at a generic report RSS feed. Item titles need some fine tuning and there's no way to determine dates, but otherwise it seems sane. (check-in: afb2fee9b7 user: cpb tags: trunk)
01:19
the dashed-forms of the git commands are now not reliably avaiable. (check-in: ec1de0af03 user: cpb tags: trunk)
2009-03-08
00:14
(#791) allow individual pages to have their own RSS feeds

This means we need to allow generic RSS substitutions in the header. To that end, we add %R for the URL and %F for the title (a distinct feed needs a distinct title).

Figuring out whether a page has its own RSS feed is done by looking for an "RSS" entry in the action bar. The title is built from the project name and the current page title.

Then, to override the default (timeline) RSS feed on any given page, it's just a matter of doing something like:

common_add_action_item(mprintf("tkthistory.rss?tn=%d",tn), "RSS");

and the header output logic will just pick it up. (check-in: c72535f17c user: cpb tags: trunk)

2009-03-07
00:42
(#231) ditch the opaque class names like "border2" and "bkgnd1" and replace with more meaningful class names, and related cleanups. (check-in: 64a9390abe user: cpb tags: trunk)
2009-03-06
03:06
(#177) makes HTML entities _work_ in wiki markup and (maybe) other places

In order to allow it to work in both normal web browsing and the encoding needed for RSS (where we _need_ to encode even entities), I modified htmlize (%h) to take an "allow entities" flag, and added a new %R formatting option which disables this flag. %R is used by the RSS formatter to do the final content generation. This means anywhere wiki content is allowed someone can write é and, apparently, it works.

Keep in mind that I don't normally use anything except ASCII in my day-to-day environment, so someone who cares about this stuff should maybe test it out a bit more than myself. (check-in: 14e235cdd5 user: cpb tags: trunk)

2009-03-02
00:07
(#787) append/add remarks should be hidden for users without ticket write permissions (check-in: 10e5c9bba7 user: cpb tags: trunk)
2009-02-25
02:04
(#786) ensure local attachments links from the {quote:{image:}} tags aren't broken in the RSS feed. This requires adding an appropriate page id to the formatting calls. (check-in: 4149691655 user: cpb tags: trunk)
2009-02-19
03:38
(#783) when dealing with remarks in the timeline, break them out separately and (try to) link directly to a new remark in the ticket. This won't work perfectly when dealing with direct edits to the remark field, but for normal use it should be fine. (check-in: 743d4611de user: cpb tags: trunk)
03:23
(#783) generate the link to appended remarks by targetting what should be the anchor. Doing so from the timeline will be a little more complicated. (check-in: 52ecfd6559 user: cpb tags: trunk)
02:59
(#783) when appending a ticket comment, write an HTML anchor based on the change time so we can find it later. (check-in: 7c22978975 user: cpb tags: trunk)
02:33
(#781) don't run the external diff filter if the output is supposed to be _raw_ (check-in: 488fc0db1e user: cpb tags: trunk)
2009-01-17
16:31
(#777) an index on filechng(vers) speeds the update quite a bit for larger projects. (check-in: c6b04561ea user: cpb tags: trunk)
2008-12-28
15:03
(#774) make external tools work in reports (check-in: 976179c75a user: cpb tags: trunk)
2008-11-27
17:49
oops, that's supposed to be a call, not output (check-in: d78282a902 user: cpb tags: trunk)
2008-11-14
15:34
(#768) merge [1018] fix printf argument (Leaf check-in: 05b9a75c31 user: cpb tags: release2_0_1)
15:33
(#768) printf argument needs escaping, and it's the wrong one anyways (check-in: d04d9de48b user: cpb tags: trunk)
2008-10-29
18:46
(#766) merge [1016]: handle missing f parameter (check-in: 30138bdb73 user: cpb tags: release2_0_1)
18:45
(#766) handle missing f parameter (check-in: 4b004e65d5 user: cpb tags: trunk)
2008-10-23
16:24
we need to armour the cookie value. Otherwise, it can contain values which aren't legal in a CGI parameter name. (check-in: 89bfff7fd9 user: cpb tags: trunk)
2008-10-21
02:05
add some CSRF (http://en.wikipedia.org/wiki/Cross-site_request_forgery) prevention. It's a little over-engineered in places, but the patch itself is non-intrusive enough that this isn't a huge problem. (check-in: 8a6641cd16 user: cpb tags: trunk)
2008-10-11
01:03
(#764) admin/setup permissions should also imply wiki. (check-in: 48506efca4 user: cpb tags: release2_0_1)
01:02
(#764) _setup_ permissions should also imply wiki permissions. Simplify the Windows condition slightly. (check-in: e1b44eb962 user: cpb tags: trunk)
2008-10-09
22:59
(#764) merge [1010]: don't use CGI output stuff when we don't have a URL. This may not be needed in HEAD, but it certainly won't hurt. (check-in: d0137d8b19 user: cpb tags: trunk)
19:57
(#764) don't try to use CGI methods when there's no URL. (check-in: 1b03bde87f user: cpb tags: release2_0_1)
2008-09-16
15:12
Carriage returns, line feeds and tabs in the command line may make the Windows command line incomplete. (check-in: 79df195944 user: ono tags: trunk)
15:10
(#118) %c using owner when no contact specified was broken by 1.111 commit. (check-in: 5e407f9cfd user: ono tags: trunk)
14:23
(#762) fix order of month/date in output. (check-in: bf7c25aa02 user: cpb tags: trunk)
2008-09-15
14:40
Update MinGW makefiles so they work fine with latest code. (check-in: c0b4bd2396 user: ono tags: trunk)
14:36
(#761) correct project name to correct case for case-insensitive Windows (check-in: 3fa5c26da1 user: ono tags: trunk)
13:12
In order to actually _apply_ a patchset, you really want to have the relative name in the context section. Some versions of patch don't seem to want to pick it up from Index. This is fine for shallow projects (i.e. all files in one directory) but it doesn't work for deep projects. So change the rcsdiff command line so we get full relative pathnames in the patch. (check-in: 88cdf75093 user: cpb tags: trunk)
2008-06-30
21:31
(#759) when putting the id in the hidden field for deletion, use the right formatting (%h vs %t). (check-in: f6072b91dd user: cpb tags: trunk)
2008-06-08
15:11
(#758) patch from filodej to implement external filters for GIT diffs. Remove the File List interface for GIT since it's not applicable. (check-in: 1a7ca06e2b user: cpb tags: trunk)
2008-04-17
01:43
(#742) allow the report editor to enter a wiki description. An abbreviated version gets shown in the report list. It _doesn't_ get shown in embedded reports. This may or may not be desirable, depending on the context of the embedding. (check-in: ff060f9fec user: cpb tags: trunk)
01:20
(#749) a few formatting tweaks (check-in: 8b996f3a7f user: cpb tags: trunk)
2008-04-16
02:10
#749, #742: database schema changes, related UI changes *: add a "reason" field to the WIKI table to describe a change, add the corresponding text field to the wikiedit page and display the field in various places. Probably could be done in more places. *: add a "comment" field to the INSPECT table to hold wiki markup. Some more work needs to be done in here. *: add a "description" field to the REPORTFMT table to hold a wiki description of a report. No UI element yet, just a placeholder in the database. (check-in: 3a6b72e203 user: cpb tags: trunk)
2008-04-12
01:23
(#231) have a go at eliminating the use of

It was mostly in error output, so added a error class to the CSS and updated all the code. Mind you, error output really should be standardized in a single function somewhere.

Only one left in the table stuff in /cvstrac/view.c (check-in: f18b4a5e70 user: cpb tags: trunk)

00:44
(#751) add a "safe ticket editting mode" similar to Trac's which _should_ prevent users from blindly stomping on each others changes.

Basically, when a user starts editting a ticket (or appending a remark), the last "changetime" is embedded in the form. At submit time, CVSTrac checks to ensure that changetime is still good and refuses to proceed. The user still has all the change visible and can copy them elsewhere, but can't "finish" the change. A "force" checkbox might be useful here?

By default, this is disabled. (check-in: 6e09701d50 user: cpb tags: trunk)

2008-04-11
12:07
using the history entry date works better if we actually do use it. (check-in: 35f37e602d user: cpb tags: trunk)
2008-04-10
00:54
(#750) if we can't map a tag to a previous tag like the history suggests we should, just go with the date of the current history entry rather than dropping the tag entirely. (check-in: b7bf9a9b1b user: cpb tags: trunk)
00:50
(#744) use =strcasecmp()= and =strncasecmp()= (both POSIX standard calls) rather than the now non-public SQLite versions. (check-in: 989410317a user: cpb tags: trunk)
2008-02-18
11:25
Forgot why we did that. Comment it so I remember next time (check-in: 2fae12040f user: cpb tags: trunk)
2008-01-01
00:16
(#738) output the resulting row count at the end of the report (check-in: cdccd40b7a user: cpb tags: trunk)
2007-12-19
22:36
(#734) explicitly check for IIS before trying to work around a bunch of IIS bugs. Note that we expose the g.isIIS even on non-Windows O/S. This won't affect performance, but makes the code clearer in places. (check-in: 4148655620 user: cpb tags: trunk)
02:23
(#733) fix header ordering here, too (check-in: fa9ba6c33a user: cpb tags: trunk)
00:05
(#733) fix header ordering so browse.h is last (check-in: 18d8927ccc user: cpb tags: trunk)
00:04
(#734) SCRIPT_NAME _can_ be undefined in some servers (check-in: c173f68b1f user: cpb tags: trunk)
2007-12-16
22:45
(#732) always display ticket numbers with a 'hash' (check-in: b42dfa7be8 user: cpb tags: trunk)
2007-11-07
12:41
Removing empty #729 (check-in: b64cd9f684 user: ono tags: trunk)
10:37
Allow specifying current document URL (without base) with %D in the template, so we can make links to other project same page using: http://www.tracker.com/cvstrac/OtherProject/%D (check-in: 222d4659c2 user: ono tags: trunk)
10:34
More HTML compatibility fixes #729: * common_add_nad_item, common_add_action_item shall not be escaped with entities (rollback) * some ijected URL parts needs to be formatted with %d * fixed empty for checkings list * fixed </diff> ->
(check-in: 18ca2d3ccc user: ono tags: trunk)
2007-11-06
15:33
Making HTML markup W3C compatible (#729) * removing duplicate timeline ID * escaping ampersands * moving

tags inside forms * changing hspace into margin * changing wrap="type" into class wraptype (this may be problematic) * adding DocType ... still we got Content-Type missing and warning with lists +

at Wiki

(check-in: 91b1f86d45 user: ono tags: trunk)
13:11
Make sure APPNAME has extension where it is needed (Windows). (check-in: 53e774e724 user: ono tags: trunk)
13:10
Ignore local Makefile file. (check-in: 4b81abaa48 user: ono tags: trunk)
11:59
Microsoft IIS REQUEST_URI was adding "?" (question mark) regardless of QUERY_STRING emptiness (check-in: b4e3746bf2 user: ono tags: trunk)
2007-11-05
17:10
Finalizing #624 - Windows support: * CVSTrac is checking now for IIS and applying fixes relatively * on IIS we force absolute redirects to fix cookie and other problems * more commens for Windows dependent code (check-in: a66aacaf70 user: ono tags: trunk)
2007-11-03
02:03
Ignore autogenerated files. (check-in: 9067d5512b user: ono tags: trunk)
02:00
Final Windows MinGW port: * pieces of code that are Windows specific marked with CVSTRAC_WINDOWS defines * variables that are different on UNIX and Windows using OS_VAL(unix,win) macro * added password synchronization option to Windows * moved away "mingw" -> "win32" + "win32-mingw.mk" (check-in: f28ae72ed6 user: ono tags: trunk)
01:32
Turn static functions into macros that are changed into -1 for unsupported functions. (check-in: f6e3aafae1 user: ono tags: trunk)
00:35
More clean CSS + HTML, as in #716 (check-in: 107a2091b9 user: ono tags: trunk)
2007-11-02
18:59
UNIX header wrappers for Windows updated with English comments. (check-in: 34c2ea4b76 user: ono tags: trunk)
2007-10-31
17:08
Defines CVSTRAC_WINDOWS and OS_VAL macro which is used to relatively choose UNIX or Windows value (check-in: 2d113d00c1 user: ono tags: trunk)
17:07
Sed on Windows doesn't like empty line -> thinks it is some invalid command (check-in: 96d2697f8d user: ono tags: trunk)
17:06
MinGW (GCC on Windows) makefiles and UNIX wrappers (check-in: 2c3a25dfac user: ono tags: trunk)
2007-10-21
15:54
(#724) more options for custom markup output handling *: add some documentation about markup output filtering *: add "trusted" options for program markups. No HTML filtering is done on their output. It's assumed that the markups aren't going to allow dangerous constructs through. *: Obviously, only external programs are able to do filtering so we don't have trusted versions of non-program markups. (check-in: 11e1e514fb user: cpb tags: trunk)
15:18
(#725) use =sqlite3_free()= rather than =free()= on SQLite 3 functions returning memory strings. (check-in: 6d28375067 user: cpb tags: trunk)
15:15
fix warning: =zAuthor= cannot be NULL (check-in: 5ee8d689ea user: cpb tags: trunk)
2007-09-24
12:28
(#720) works better without the typo (check-in: 0d0e041f9b user: cpb tags: trunk)
2007-09-22
22:13
(#720) fix ETag

*: entity tag is a =quoted-string=, and hence needs quotes *: Vary:* SHOULD be included when dealing with server-negotiated responses (check-in: 74510a0008 user: cpb tags: trunk)

2007-08-23
12:04
(#715) don't show extra fields with missing/empty descriptions

*: This should catch both "NULL" descriptions and zero-length strings. *: Additionally, tighten up the setup page to always remove the old description before changing anything and check the new description before setting anything. (check-in: 163a463930 user: cpb tags: trunk)

2007-08-22
23:34
(#713) remove stray quote from HTML tag (check-in: 9436a91fe5 user: cpb tags: trunk)
23:33
(#714) ticket titles aren't wiki formatted, but still need HTML armouring (check-in: 62b933f534 user: cpb tags: trunk)
00:40
(#712) tighten up error handling in initial =svnlook youngest= call. (check-in: 66e15036ad user: cpb tags: trunk)
2007-08-15
01:16
(#711) fix missing paren (check-in: 8dc1a58111 user: cpb tags: trunk)
2007-08-09
12:12
(#710) fix unclosed <form>

Break the two separate conditions into separate <form> areas and loosen up the condition which create the setup_user link. (check-in: d25d699321 user: cpb tags: trunk)

2007-06-29
01:01
rather than just selecting a few headers to export as HTTP_ environment variables, automatically pass them all through. This makes them available to scripts and is useful for debugging (via /test). (check-in: f56db0291a user: cpb tags: trunk)
2007-06-28
02:05
(#704) merge [957]: drop dupe (check-in: 11fadfdedc user: cpb tags: release2_0_1)
02:03
(#704) drop duplicate (check-in: b50c1a2805 user: cpb tags: trunk)
01:20
(#703) not the correct format for maxSummaryLength limit hit (check-in: 84f15b24ee user: cpb tags: trunk)
2007-06-27
10:41
(#702) merge [954]: typo fix (check-in: b4c4ed509c user: cpb tags: release2_0_1)
10:37
(#702) fix typo (check-in: 4e214dd311 user: cpb tags: trunk)
02:00
revert color scheme to something closer to CVSTrac original. (check-in: 510cae25fb user: cpb tags: trunk)
02:00
(#231) added a fairly clean alternate CVSTrac stylesheet. (check-in: 9beb81dfdd user: cpb tags: trunk)
01:38
Subdirectory for stylesheets. Add the =cvstrac-plus.css= stylesheet. (check-in: fa506e13d2 user: cpb tags: trunk)
2007-06-24
01:12
In chngview, output a table of related check-ins extracted from the commit message. This is makes merges much more explicit (i.e. [553]). While you can follow a link, following each link in a complex merge to get an overview is rather annoying. (check-in: 2da55ff6be user: cpb tags: trunk)
00:23
(#476) handle GIT merges, kinda

CVSTrac doesn't really have a way to track proper merges (which basically implies multiple CHNG.prevvers entries) but we _can_ reference merge source check-ins in the commit message. It's still not as easy as I'd like to follow GIT development, but this makes it clearer what things are merges and what commits are being pulled into the merge.

*: we need to ingest the whole commit tree as we check refs, and we need to do it such that roots get the lowest CN numbers and are databased before anything which relies on them. This means making =git_ingest_commit_tree()= truly recursive. *: drop the temporary =ci= table, since we now need to do it all in one pass *: add a function to convert multiple parents into a merge list and update the check-in comment with something like "Merged [n1], [n2], ..." *: in order to _display_ merges, we need to use =git-diff= rather than =git-diff-tree=. *: add =pxHistoryReconstructPrep= and =pxHistoryRescanPrep= callbacks to =g.scm= so we can "do things" to SCM-specific tables and whatnot before a history reconstruct or rescan. In the case of GIT, a reconstruct requires removing all the refs milestones. Other SCMs may have similar requirements.

This doesn't break database compatibility, but you _will_ have to do a reconstruct if you want to see merges properly. Unfortunately, a reconstruct may alter check-in numbers and break links in wiki text or manually created ticket cross-references. (check-in: 3219fa7f89 user: cpb tags: trunk)

2007-06-23
17:56
(#476) when diffing trees for output, expand the full commit ids. (check-in: 599c8f5f73 user: cpb tags: trunk)
2007-06-21
01:24
(#696) =git-cvsimport= doesn't deal with some of the cvs import tags all that well. The result is GIT refs which point to _empty_ commits. Well, CVSTrac assumes non-empty commits, so thigs throws things off. The main problem is that we end up trying to process these empty commits _each_ history update, and we create new commits _each_ history update, one for each of these kinds of tags. This slows things down tremendously, as you can imagine, and artificially increments the check-in counter.

The fix is to detect the missing FILECHNG records and ensure we create the refs milestone anyways. Once we've got the refs milestone with an proper object reference, we'll never try to update those refs again. (check-in: 7e9b7e50b0 user: cpb tags: trunk)

2007-06-15
18:27
(#696, #698) where feasible, create an index on =chng(branch,directory)=. This makes the GIT history update run approximately 10x faster. (check-in: 0997ecb8f2 user: cpb tags: trunk)
2007-06-09
03:18
move [Directory] to action menu (check-in: 7ea8580ba8 user: cpb tags: trunk)
03:03
(#698) clean up GIT refs milestone stuff

Basically, we drop the TAGS and HEADS tables entirely and exploit the fact that GIT doesn't make _any_ use of the CHNG.branch and CHNG.directory fields. CHNG.branch is meaningless since branches aren't static and a single commit might belong to any number of branches. CHNG.directory is also meaningless because GIT operates on the entire tree in a single commit. So for GIT milestones, CHNG.branch=refs/* and CHNG.directory=object.

This allows us to completely drop a couple tables (which may break reports) and simplifies a lot of queries and stuff. Because we've got other places to put things, the milestone message can also be shortened.

To upgrade an existing database, something like:

DROP TABLE heads; DROP TABLE tags; DELETE FROM chng WHERE milestone>0 AND message LIKE '%(%, commit %';

before any GIT history update will be fine.

As an added bonus, we're no longer looking directly at files in the GIT repository. We just use command-line tools. So we're probably a lot more resiliant to changes in repository layouts. (check-in: 89dfc6a081 user: cpb tags: trunk)

02:53
(#698) don't make missing directories links (check-in: 38b204cede user: cpb tags: trunk)
2007-06-08
00:37
(#696) more refs/heads/tags fixes *: typo in the =git-for-each-ref= format appended a '2' to everything *: fix some indentation/formatting problems *: _delete_ refs which are no longer in use. Strictly speaking, this isn't necessary since it might be useful historical information. But who knows if the objects are still there, too? Unreacheable objects might get pruned when the refs all disappear. (check-in: 8cf381f2b3 user: cpb tags: trunk)
2007-06-07
00:49
(#697) die with an error if the SQLite3 version switches from 3.3.7 to higher without a rebuild (check-in: f279bd8e70 user: cpb tags: trunk)
2007-06-06
01:35
(#696) the culprit was actually =git_update_refs()=. We ran through the entire refs list rather than just the ones which changed. No big deal, except for each one in the list the REPLACE a milestone _into the chng_ table. At 20000 records without transactions, that's not so quick.

Use another temp table to help prune the list down to the bare minimum. There's room for other improvements, too. (check-in: a00e3770a4 user: cpb tags: trunk)

2007-06-05
23:25
(#696) rewrite the =git_read_refs()= to use =git-for-each-ref=. It's definitely cleaner, and hopefully a bit faster. (check-in: fa022e3e89 user: cpb tags: trunk)
2007-06-04
03:04
Don't include a separate "Committer:" line in the message if the committer is the same as the author. It just clutters things up without adding useful information. (check-in: b6de7ac1bf user: cpb tags: trunk)
2007-06-03
19:41
just use the leading 8 chars for a printable version (check-in: 61ec7231db user: cpb tags: trunk)
2007-05-26
00:41
(#694) check for NULL username (CLI only) (check-in: fe3f704fab user: cpb tags: release2_0_1)
2007-05-16
00:58
(#200) add a (untested) Solaris/GCC Makefile (check-in: 5dc0637a72 user: cpb tags: trunk)
2007-05-08
17:47
Do a unified diff rather that a context diff when showing differences. (check-in: 3aaf997162 user: root tags: trunk)
2007-04-23
10:31
(#689) allow titles to be greater than 70 chars via (undocumented) max_ticket_summary config option (check-in: 02100e90c3 user: cpb tags: trunk)
2007-02-12
19:38
(#637) =chng= and =inspect= records are viewable by people with wiki read permissions, not checkout. Missed that in the report authorizer. (check-in: 964cc7c3cb user: cpb tags: trunk)
2007-02-11
10:22
Add the "attachdump.c" utility program used to upgrade a database from version 1.2.1 to 2.0.x. See http://www.sqlite.org/cvstrac/tktview?tn=2208 (check-in: 31f4ba3575 user: drh tags: trunk)
2007-01-31
23:46
(#575) merge [929] (check-in: 2127ee2006 user: cpb tags: release2_0_1)
23:39
(#575) sqlite3_value_text() _may_ be doing an encoding conversion (check-in: 63baec75b8 user: cpb tags: trunk)
18:18
merge [927] (check-in: 8f0d9c687f user: chorlya tags: release2_0_1)
18:15
[795] needlessly changed query string parameter name from =nxp= to =cnxp= and broken captcha redirection after successful test. Ticket #617 (check-in: a8c87cb5e6 user: chorlya tags: trunk)
2007-01-30
12:15
(#684) finish up the transaction if no repository (check-in: 15b5925f1a user: cpb tags: trunk)
2007-01-29
21:58
Fix "uninitialized variable" issue as in "if( zTime==0 || (tm = parse_time(zTime))==0 )" the variable "tm" could be never initialized due to (fully valid and ISO C conforming) short-circuiting behaviour in the evaluation of a boolean expression -- i.e. in case zTime==0 (true) the second part of the expression never has to be evaluated as the expression as a whole already is true. (check-in: 377b5272d5 user: rse tags: trunk)
21:48
remove dead code (check-in: 85f584dc9b user: rse tags: trunk)
19:42
bump version in HEAD (check-in: c09eb55627 user: cpb tags: trunk)
2007-01-28
22:50
merge [912] (check-in: 3300d3a592 user: cpb tags: release2_0_1)
22:50
merge [911] (check-in: 2a912ca88a user: cpb tags: release2_0_1)
22:22
fix typo (check-in: 3778709b33 user: rse tags: trunk)
21:56
use strict ISO C prototyping (check-in: 7a5bff40b3 user: rse tags: trunk)
21:54
plug three memory leaks (check-in: 73cbc90531 user: rse tags: trunk)
21:37
FlexeLint correctly complained "format_.c 1338 Warning 673: Possibly inappropriate deallocation (free) for 'modified' data" as the whitespace skipping on zCaption following by a free(zCaption) would lead to a crash.

The obvious and 100% compatible fix would be something like this:

--- format.c 30 Sep 2006 11:01:30 -0000 1.91 +++ format.c 28 Jan 2007 21:33:13 -0000 @@ -1323,8 +1323,9 @@ || (sMarkup.lenType==11 && strncmp(sMarkup.zType,"rightreport",11)==0) || (sMarkup.lenType==10 && strncmp(sMarkup.zType,"leftreport",10)==0) ){ - char *zCaption = mprintf("%.*s", sMarkup.lenArgs, sMarkup.zArgs); + char *zCaption, *zCaptionOrig; char *zAlign = 0; + zCaptionOrig = zCaption = mprintf("%.*s", sMarkup.lenArgs, sMarkup.zArgs); if( sMarkup.lenType==11 ){ zAlign = "align=\"right\""; }else if( sMarkup.lenType==10 ){ @@ -1335,7 +1336,7 @@ embed_view( atoi(sMarkup.zKey), (sMarkup.zArgs==sMarkup.zKey) ? "" : zCaption, zAlign ); - free(zCaption); + free(zCaptionOrig); zText += sMarkup.lenTotal; i = 0; wordStart = lineStart = paraStart = 0;

But the whitespace skipping never can happen as the is_markup() call around the parsing code already skipped all leading whitespaces. Hence we fix the deallocation problem by just removing the unnecessary second whitespace skipping attempt. (check-in: 72db38160a user: rse tags: trunk)

20:45
Fix a deallocation problem by using an allocated string instead of a constant string in the special case. This fixes the FlexeLint error: "inappropriate deallocation (free) for 'constant' data". (check-in: 588dda9ac0 user: rse tags: trunk)
20:41
cleanup code: '-0' is just '0' (detected via FlexeLint) (check-in: 19a97d71ed user: rse tags: trunk)
20:15
Use a more explicit "1+(c!=0?1:0)" instead of the "1+(c!=0)" as arithmetic with embedded boolean expressions is both confusing and partially unportable (AFAIK only "false" is guaranteed to be "0", but "true" is just "not 0" and not exactly "1"). (check-in: dfd27bbe4f user: rse tags: trunk)
18:43
remove useless ('always true') sub-expression as variable 'zName' is ensured to be *not NULL a few lines above (detected by FlexeLint) (check-in: d2651d6f5a user: rse tags: trunk)
18:40
merge [906] (check-in: 9ecc82795e user: cpb tags: release2_0_1)
18:29
Fix compile-time warning: sqlite3_set_authorizer() expects a "void *" pointer and hence under strict compilation the "int" nAuthStack has to be casted from an integer to a pointer type. (check-in: fcd4aa355f user: rse tags: trunk)
2007-01-27
23:30
merge [892] (check-in: e93bdda86d user: cpb tags: release2_0_1)
23:29
merge [896] (check-in: d1886bbe1b user: cpb tags: release2_0_1)
2007-01-22
00:44
use %T, not %h, in URL (check-in: 3d59620c1f user: cpb tags: trunk)
2007-01-21
02:32
merge [901] (check-in: 1b193d05b8 user: cpb tags: release2_0_1)
02:31
we don't really know if the memory for *cgi()* second parameter is static, so we probably shouldn't flag it as static. (check-in: 6d948e7544 user: cpb tags: trunk)
01:24
merge [899] (check-in: e812557377 user: cpb tags: release2_0_1)
01:23
tighten up checks for attachment file args (check-in: 9109b31850 user: cpb tags: trunk)
01:12
merge [897] (check-in: ee022f3ac0 user: cpb tags: release2_0_1)
01:10
only the user and admin can manipulate attachments on a home page. This snuck past me in testing because none of my user names are CamelCase. (check-in: ab5ae5706d user: cpb tags: trunk)
2007-01-20
21:21
Make more/better use of the SQLite authorizer.

Currently, we're using the authorizer to enforce restrictions on report statements. Since, internally, CVSTrac distinguishes between query and execute styles of commands, it makes some sense to add similar authorizer facilities to some of these functions as well.

This patch introduces the concept of an authorizer stack to which we can push and pop from (otherwise, interactions between query and the existing report authorizer are impossible to manage) and uses it in all the query-style functions. As a side-effect we also need to create a separate =db_execute_callback()= function. A define, USE_STRICT_AUTHORIZER, is created to "help" CVSTrac developers avoid using the from query/execute call.

The goals are multiple: to defang potential SQL injections, inadvertant data leaks, and (eventually) privledge escalations such as are currently blocked in reports. Eventually, it may also get used to help enforce protections should we implement embedded scripting. It also introduces a framework for preventing silly mistakes (i.e. CREATE/DROP table outside of schema and history updates, deleting rather than updating things, etc). (check-in: 41fc1c9f55 user: cpb tags: trunk)

2007-01-17
09:34
fix compilation by returning error code for non-void function (check-in: feaa2fc337 user: rse tags: trunk)
2007-01-01
00:51
(#283) add support for multiple modules (or just more complicated repository filters) by allowing regular expressions in the CVS module filters. Note that this is CVS-only. Trying it with Subversion would leave holes in the check-in numbers, and I don't even want to think about what would happen with GIT revision chains... (check-in: c21dbe23fb user: cpb tags: trunk)
2006-12-31
03:23
(#545) At high detail levels, include a list of changed files in check-ins. This is extremely helpful when dealing with larger projects. (check-in: 23b7dc6c45 user: cpb tags: trunk)
2006-12-30
15:22
(#676) add an OpenBSD makefile template, and fix the vanilla BSD makefile. (check-in: a37e5b21ac user: cpb tags: trunk)
2006-12-23
15:38
(#637) when [841] made check-ins viewable to more users, forgot to push that logic to the RSS feed. Fix it so <link> tags are now available for users with *read* rather than *checkin* permissions. (check-in: 675b70e2a9 user: cpb tags: trunk)
2006-12-14
03:38
(#231) make the timeline options fieldsets just a little tighter. (check-in: eccc7cc835 user: cpb tags: trunk)
00:57
a version bump might be helpful (check-in: 31c47f45fb user: cpb tags: release2_0_1)
00:47
merge [874] to 2.0.1 (check-in: a0ef6c9604 user: cpb tags: release2_0_1)
00:45
merge [873] to 2.0.1 (check-in: e992269bdc user: cpb tags: release2_0_1)
00:35
merge [869] to 2.0.1 (check-in: bac1162632 user: cpb tags: release2_0_1)
00:34
merge [868] to 2.0.1 (check-in: d6b1082db7 user: cpb tags: release2_0_1)
00:33
merge [867] to 2.0.1 (check-in: fac18a2afe user: cpb tags: release2_0_1)
00:30
merge [866] to 2.0.1 (check-in: 9f7cd39715 user: cpb tags: release2_0_1)
00:29
merge [865] to 2.0.1 (check-in: bd5adc809b user: cpb tags: release2_0_1)
00:27
merge [864] to 2.0.1 (check-in: e9d8bb1302 user: cpb tags: release2_0_1)
00:24
merge [863] to 2.0.1 (check-in: f0b712f45e user: cpb tags: release2_0_1)
00:24
merge [862] to 2.0.1 (check-in: 31d53a0aca user: cpb tags: release2_0_1)
00:23
merge [861] to 2.0.1 (check-in: a45c117d02 user: cpb tags: release2_0_1)
00:19
merge [858] to 2.0.1 (check-in: 3fe4680f32 user: cpb tags: release2_0_1)
2006-12-03
01:47
(#231) tweak the timeline options. Still getting some glitches, but better. (check-in: 9c16735281 user: cpb tags: trunk)
01:38
tighten up the prefix text field layout (check-in: 4835317c1d user: cpb tags: trunk)
01:33
an empty value string is a legitimate value for most controls (check-in: 37ff227819 user: cpb tags: trunk)
01:29
(#231) fix timeline layout when dt=0. It's not quite as nice as I'd like, but everything fits okay at reasonable font sizes. Also fixes a problem with milestone dividers being blank at dm=1. (check-in: 9f1deea8b3 user: cpb tags: trunk)
2006-11-30
01:13
(#231) drop the =overflow= directives. They were basically doing weird things which would have called for one of those "clearfix" hacks. They were also creating scrollbars where not needed. (check-in: 619f1c82b8 user: cpb tags: trunk)
2006-11-09
02:10
(#670) fix some URL manipulations *: base URL calculations were still kinda broken. We really need to move it into the main area so we have some idea if the project name is in there somewhere. Also, it's a lot easier to just concatenate environment variables like =SCRIPT_NAME= than rip apart the =REQUEST_URI=. This probably needs testing with more web servers. *: fix problem with not having a trailing / after the project name. Basically, because we output relative links, this meant that the browser was sending users to places like http://host/tktview?tn=9 rather than http://host/project/tktview?tn=9. (check-in: cc9d0dd6ff user: cpb tags: trunk)
2006-10-30
21:34
<string.h> is not used required under WIN32. It is also required under Unix to get the prototypes for strlen(3) and others. So, include it unconditionally (it is a standard header anyway) (check-in: 6354360175 user: rse tags: trunk)
21:33
CVSTrac uses crypt(3) and this requires the inclusion of the non-standard header <crypt.h> on at least Linux and Sun Solaris platforms to get the correct prototype (else an implicit prototype is assumed by the compiler). As CVSTrac does not have any Autoconf build environment, we have to use some hard-coded feature tests as a workaround. (check-in: 7a404a1916 user: rse tags: trunk)
21:31
Fix segfaults under 64-bit platforms where sizeof(int) != sizeof(void *), because the variable argument function cgi_optionmenu() expects a null-terminating _pointer_ and passing "0" to such a variable argument function passes an integer (which is usually a smaller integral type than a pointer on 64-bit platforms) and not a pointer on the stack. As a result, the function grabs garbage from the stack and segfaults. (check-in: e52840b8ca user: rse tags: trunk)
00:50
(#668) handle the =SQLITE_FUNCTION= authorizer option. At the moment, there's really no reason to restrict function calls. Tested against SQLite HEAD as of about 15 minutes ago. (check-in: 2d79b6219a user: cpb tags: trunk)
2006-09-30
11:12
GCC 4.2.0 20060923 is correct in stating...
common_.c:399: warning: the address of 'azLink' will always evaluate as 'true' common_.c:415: warning: the address of 'azAction' will always evaluate as 'true'

..for the following code lines...

[...] if( nLink && azLink ){ [...] if( nAction && azAction ){ [...]

...as we have...

static const char *azLink[50]; static const char *azAction[50];

...and ISO-C always implicitly makes the name of the array variable to be a pointer to the array and as the array is a static array it _always_ is a valid pointer and hence always "true" in boolean context.

OTOH we don't need the comparison here at all as the nLink and nAction check is really sufficient to know whether the array contain content. So, remove the warning by removing the useless parts from the boolean expression. (check-in: ad7cff7f48 user: rse tags: trunk)

11:01
Cleanup the CVSTrac sources so they again pass GCC 4.1.1 (and 4.2.0 20060923 except for one special issue) under option set "-O2 -Wall -Wno-long-long -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs" without any warnings. For the sign and "const" related issues (where usually multiple solutions exists to resolve), I've resolved them by using as less as possible evil "casts". (check-in: 49638d721f user: rse tags: trunk)
2006-09-29
21:02
The logout procedure luckily works, but not really as intended. It has two defects: first the cookie row from the "cookies" table is incorrectly deleted via the name of the cookie instead of the value of the cookie. Second, the usual way to perform a clean logout is not to just re-set the cookie to an invalid value, but to set it to this value with an expiry time in the past. This way the browser really immediately kicks out the cookie from its own database (so people really see that the logout cookie is gone) more or less at the same time CVSTrac removes the cookie from its database. Keep in mind that passing 0 to cgi_set_cookie as the time is NOT the right thing to do here. (check-in: e33c8f18c0 user: rse tags: trunk)
2006-09-28
16:13
(#664) remove extra comment from query (check-in: 901ffeb880 user: cpb tags: trunk)
2006-09-14
22:36
(#643) tickets in reports (outside of wiki text) now rn as second argument (again) (check-in: 53b9f8d85f user: cpb tags: trunk)
2006-09-12
00:51
(#497) oops... get the build rules for =css.c= right. We need to be able to build from another directory, for one thing, and we want to rebuilt when =cvstrac.css= changes. (check-in: 522d37f884 user: cpb tags: trunk)
2006-09-11
01:01
(#655) make wiki entry area size/wrap mode configurable.

*: Loosely based on {link:http://www.cvstrac.org/cvstrac/attach_get/195/setup_diffs.tar.gz setup_diffs.tar.gz}, *: create =cgi_wikitext= and =cgi_textarea= function to control output *: =cgi_wikitext= allows the caller to determine _relative_ height compared to the configured _maximum_. For example, a short wiki text area might be 20% of the maxmimum height. *: /setup_interface allows the wiki area width and maximum height to be specified. (check-in: 4d30fc6114 user: cpb tags: trunk)

2006-09-04
03:10
(#652) requests which result in server-side changes really should use POST, not GET. (check-in: 07a3799716 user: cpb tags: trunk)
03:03
(#231) merge =css-patches= to HEAD.

The conversion to CSS isn't complete, but it's functional and I'm having some trouble getting much further with it at the moment.

So rather than try to develop two trees in parallel it's easier (for me) to merge it back to HEAD, fix some other functional problems that are _really_ bothering me, and finish the CSS migration at a more leisurely pace. Not the most ideal situation, but we'll just have to work with it... (check-in: 1727797fd7 user: cpb tags: trunk)

2006-09-03
20:15
(#497) include default =cvstrac.css= in binary

For distribution, it's not reasonable to expect a separate stylesheet file to ship with the binary. It's also necessary for the original version to be available to admins who want to revert or study the original.

*: create a =makecss.c= program to turn /cvstrac/cvstrac.css into =css.c= *: =css.c= implements two web pages: /cvstrac.css and /cvstrac_default.css *: /cvstrac.css returns the latest /cvstrac.css attached to /setup_style. Failing that (i.e. doesn't exist), it falls back to /cvstrac_default.css *: /cvstrac_default.css always outputs the original build-time stylesheet. *: /setup_style mentions this *: default header now references =cvstrac.css= and (why not) =cvstrac_default.css= as an alternate. (Leaf check-in: f98c06e463 user: cpb tags: css-patches)

2006-08-24
12:42
(#650) merge [853] to HEAD (check-in: 1332f5c145 user: cpb tags: trunk)
12:40
(#650) =bout()= always NUL terminates; _if_ it's called, and _if_ there's enough space. However, it's only called when there's something to write. Make sure the buffer _starts_ NUL terminated. (check-in: 394c1229a4 user: cpb tags: css-patches)
2006-08-16
23:02
(#645) merge [850] and [851] into HEAD. (check-in: 2ab818a185 user: cpb tags: trunk)
23:00
(#645) clarify the comment describing how =is_eow()= actually works. (check-in: cc975ae8b2 user: cpb tags: css-patches)
13:48
(#645) tighten up the check in =is_repository_file()= so it actually uses the %q formatter rather than relying on %s. (check-in: 4f7cceba0b user: cpb tags: css-patches)
2006-08-10
21:33
merge [848] to css-patches (check-in: 81851a8f2d user: cpb tags: css-patches)
21:33
should probably mention the other SCMs (check-in: 71120fef18 user: cpb tags: trunk)
2006-07-14
13:08
(#231) don't wrap navigation/action text (check-in: 78e1c3b737 user: cpb tags: css-patches)
2006-07-13
01:34
(#231) wrap more diffs with 'diff' class (check-in: 6bc527e755 user: cpb tags: css-patches)
01:15
(#231) fix timeline indentation (check-in: bac6f3ad1f user: cpb tags: css-patches)
2006-07-05
01:17
merge [843] from HEAD (check-in: ae9d2f8ef3 user: cpb tags: css-patches)
01:16
(#636) differentiate between file and directories in search results by adding an extra case. (check-in: 40c67b2336 user: cpb tags: trunk)
01:08
merge [841] from HEAD (check-in: 490cca0bbe user: cpb tags: css-patches)
01:06
(#637) make links to /chngview if the user has "read" permissions, not "checkout". Note that this _doesn't_ introduce any security issue that wasn't already there; users have always been able to manually enter /chngview?cn=<cn> since /chngview itself only checks for =g.okRead=. (check-in: 3579b529b0 user: cpb tags: trunk)
2006-06-30
23:41
(#231) drop the
between the timeline and its options. We can use a =border-top= styling to get the same effect and it lets us do other interesting things...
(check-in: 325577ef58 user: cpb tags: css-patches)
02:09
merge [838] from HEAD (check-in: eb3cc9765a user: cpb tags: css-patches)
02:07
don't do extra wiki markup when outputting raw report data. (check-in: 6ce8f68aec user: cpb tags: trunk)
01:49
(#231) CSS-ify the index and remove the hardcoded  's from the setup index. That's what =white-space: nowrap= is supposed to take care of. (check-in: 56c74959d5 user: cpb tags: css-patches)
00:54
(#633) merge [829] from HEAD (check-in: 562f41fb8d user: cpb tags: css-patches)
00:53
(#635) merge [834] from HEAD. (check-in: af62a10d54 user: cpb tags: css-patches)
00:52
(#635) URI handling fixes *: handle initial project name in URL's better *: handle leading/multiple/trailing slashes better *: map index.html to index so URL's of the form =project/= will get the index when the browser/web server automagically tacks on =index.html=.

Tested with as many configs as possible, but this could break configurations which do substantial URL aliasing/rewriting. (check-in: 73fd5657bc user: cpb tags: trunk)

2006-06-29
02:58
(#231) try the timeline layout with definition lists. It still needs floats, but it drops the nested list nastiness and the non-CSS output is a little more intuitive. (check-in: 619deacfe0 user: cpb tags: css-patches)
02:24
(#231) slightly better timeline layout. I don't particularly like overusing floats like this, but I don't want to spend my life fighting with browser bugs and whatnot... (check-in: a77a9bdbdd user: cpb tags: css-patches)
2006-06-28
01:53
(#231) oops, those widths are a bit short (check-in: db774482a0 user: cpb tags: css-patches)
01:46
(#231) a bunch more CSS work *: not sure how I didn't get it working before, but managed to get the standard header to look sane _without_ having to add gratuitous
sections or fall back to tables. Which means it _should_ lay out okay with junky browsers like IE. Also didn't have to resort to nonsense like clearfix, yet. *: attempt at the timeline layout. It's _mostly_ there, except for some differences in how long timeline entries wrap (Konqueror indents nicely, Firefox doesn't). *: /setup done. Less critical since only admins see it.
(check-in: 4a5c3ff081 user: cpb tags: css-patches)
2006-06-27
12:40
(#633) fix C++ism (check-in: 65019db33f user: cpb tags: trunk)
2006-06-15
18:01
(#630) another merge from HEAD (check-in: e292b1f798 user: cpb tags: css-patches)
17:50
We don't need assert.h here anymore. (check-in: cb172d9507 user: chorlya tags: trunk)
17:43
Check for SQLite version at build-time, rather then at runtime. (check-in: 941e6c3ccf user: chorlya tags: trunk)
17:20
(#630) merge from HEAD (check-in: 6dfb65f05e user: cpb tags: css-patches)
17:03
*: ( #630 ) Pick-up copies of repository root directory *: Replace a JOIN in svn.c with correlated subquery to enhance performance. This bumps the requirement for SQLite to version 3.1 or newer. *: Make sure we have SQLite 3.1 or newer (check-in: fed62df05e user: chorlya tags: trunk)
02:34
(#231) oops, can't use =printable_vers()= there anymore. (check-in: d988703353 user: cpb tags: css-patches)
02:20
(#231) more CSS *: icons. require =:before= content syntax, so won't work with IE, but icons are largely cosmetic. Changed how icons work so that we specify the _meaning_ instead of the look. I.e. we can set a "ticket status fixed" icon. *: diff gets a class *: did a bit of timeline markup *: =printable_vers()= returns HTML, with a =vers= class. This allows us to create a span title which pops up, useful for things like GitTrac where we actually _do_ prune the version back. *: wiki history box CSS-ified. *: timeline options CSS-ified, although the positioning needs more work. (check-in: 34e33c78bc user: cpb tags: css-patches)
2006-06-13
23:48
(#231) more CSS *: differentiate between events and releases for milestones *: "convert" rlog. Still using table markup, however. (check-in: a4a70a1122 user: cpb tags: css-patches)
14:45
(#231, #391) put directory breadcrumbs back, but leave off in the default stylesheet. (check-in: 8c018e04a0 user: cpb tags: css-patches)
02:12
(#231) first cut at bringing CSS compliancy to CVSTrac.

*: two things are covered: wiki markup and the page header *: wiki markup is fairly straightforward. Mostly the addition of class or id tags plus a bit of code cleanup to facilitate it. The *bold* markup got the biggest beating, I'd say. *: the page header... The main problem there is faithfully reproducing the table-driven layout, which basically turned into adding a couple extra wrapper

's and using =display: table-row= in places. The end result looks about the same, except where it may actually eliminate some minor display glitches. *: added a =cvstrac.css=, which contains these defaults. Eventually they might get placed verbatim into config.h, but right now it's a handy place to work.
(check-in: fd43c73351 user: cpb tags: css-patches)
2006-06-03
19:09
(#625) clean up the check-in/milestone handling even more. Rather than integer lists, use string lists (what we normally get from database queries), tokenize in a separate function, and let the database sort out which are milestones and which aren't. We can also drop the hidden =cl= and =ml= stuff. (check-in: df22b1b61f user: cpb tags: trunk)
02:47
(#545) more RSS fixes *: at highest detail level, don't truncate messages. Ever. Not sure if this is entirely sane, but it looks gorgeous in a good RSS reader. *: allow the user to _decrease_ the detail level from the admin default using a =rss=<n>= option. The user isn't allowed to increase the level beyond the default. See previous list item for reasoning. *: minor date fix (check-in: 815d9b9e5f user: cpb tags: trunk)
02:27
(#545) /timeline.rss only accepts =d=, =px= and =e= as CGI params, and I'd rather pass on =e= as part of the defaults. The rest of the parameters are ignored, so let's not include them in the RSS link. (check-in: 02f7be83da user: cpb tags: trunk)
02:12
(#625) don't allow users without at least checkout permissions to be able to change the milestone/check-in associations of a ticket. Some care is taken to ensure that users who login with the form open don't lose the xref's. (check-in: b875e773b7 user: cpb tags: trunk)
01:49
(#623) allow for quoting of the | character in a table by using the =is_markup()= function to detect markups like {quote:{quote}} and count the entire markup length as part of the cell. It also makes the table parsing code a lot more readable. (check-in: d8c85f94db user: cpb tags: trunk)
2006-06-02
23:07
(#564) oops, remove that #ifdef. The problem with using too many #ifdef's around code is that you need to build with all the #ifdef's enabled at some point or another or you miss trivial compile errors. Which is why, for example, we don't have big =#ifdef SVNTRAC= statements everywhere. (check-in: 493c713cdd user: cpb tags: trunk)
22:58
add some locale-specific versions of =length()= and =substr()= when =CVSTRAC_I18N= is set and we're not using UTF-8. From {link: attach_get/176/cvstrac-stringfunc.patch}. (check-in: 30dafdd775 user: cpb tags: trunk)
22:53
Avoid splitting {link: attach_get/176/cvstrac-stringfunc.patch UTF-8 characters} by scanning past high bits. (check-in: d9de9da910 user: cpb tags: trunk)
22:49
add a global =useUTF8= flag. It's only set when running in a UTF-8 codeset (although one could argue that it should be default with SvnTrac), but it should eliminate some =#ifdef= stuff (check-in: 7e8dbb18a6 user: cpb tags: trunk)
22:31
Add support for a {link: attach_get/174/cvstrac-customrlog.patch custom rlog} command useful for LocalizationOfCvstrac (check-in: a870ec0b70 user: cpb tags: trunk)
11:26
(#627) when in preview, put the formatting hints on a separate page. We really don't want them on the same page because it becomes too difficult to pick out the previewed content. (check-in: 822a75d318 user: cpb tags: trunk)
11:18
( #626 ) Fix a premature list termination for parameters to CVS filelist command. (check-in: ef8f6559dc user: chorlya tags: trunk)
2006-06-01
21:51
( #620 ) Preserve manually added ticket-chng associations when editing chng/milestone. (check-in: 1ffaf055f2 user: chorlya tags: trunk)
21:43
(#599) implement report column sorting. Works/looks about the same as the dirview column sorting. (check-in: cbdf8c2862 user: cpb tags: trunk)
20:06
( #569 ) Don't collapse ticket/wiki edits that cross the day boundary. (check-in: 518b3afd89 user: chorlya tags: trunk)
02:55
(#556) don't notify on missing tickets and fix a NULL dereference (check-in: dcfd6eb66e user: cpb tags: trunk)
02:51
(#556) don't call =ticket_notify()= if we're not attaching to a ticket (check-in: e98540cbab user: cpb tags: trunk)
02:29
(#611) make search output a bit nicer *: format tickets and check-ins using the =format_(ticket|chng)= function so we get things like link titles and strike font (and, eventually, CSS support) *: don't search attachments to ticket #0 *: when outputting attachments, also output a link to the ticket/page they're on. (check-in: 8596a683c1 user: cpb tags: trunk)
02:27
(#611) make =is_integer= public (check-in: 8a81c6f78c user: cpb tags: trunk)
2006-05-30
00:15
(#608) make the various file access functions in /cvstrac/history.c actually check the =g.okCheckout= access control before outputting any files. This ensures that source code is protected if someone screws up permission management elsewhere. (check-in: 55091aaaab user: cpb tags: trunk)
2006-05-26
14:19
Bug fix in cgi_redirect() logic. (check-in: 89ea7ac764 user: drh tags: trunk)
13:34
(#618) add a *Content-disposition* for /getfile, attachment downloads, and patchsets. (check-in: f067b96934 user: cpb tags: trunk)
2006-05-25
08:20
( #617 ) Instead of redirecting back to =/captcha= after login, redirect back to page that redireted us to =/captcha= in the first place. (check-in: 8295b798ed user: chorlya tags: trunk)
2006-05-24
22:34
( #613 ) Preserve sorting in =/dirview= for as long as you keep drilling up and down the tree. (check-in: 9b3a4a5d06 user: chorlya tags: trunk)
13:03
(#615) Ticket counts report needs column names on the _first_ SELECT now. (check-in: 58aa2b6e2c user: cpb tags: trunk)
2006-05-23
22:49
can't free a static string (check-in: 3194e20e93 user: cpb tags: trunk)
00:34
*setup* doesn't get a home page, so don't create a login link to one. (check-in: c7434c7029 user: cpb tags: trunk)
00:29
bump the version to 2.0.0 (check-in: 0b56d3f2a9 user: cpb tags: trunk)
00:28
update COMPILING docs to reflect SQLite 3. (check-in: da637462e7 user: cpb tags: trunk)
2006-05-22
23:42
(#509) remove more dangling links (check-in: 8e988ff020 user: cpb tags: trunk)
23:38
(#509) remove a couple sangling links (check-in: 5b85f45ef1 user: cpb tags: trunk)
23:16
(#509) strip down the admin documentation to the minimum. Most of the /setup_* pages are reasonably self-explanatory so there's really no point trying to duplicate those. We really only _need_ to include things like the HomePage which are really not obvious. (check-in: ec81fcd347 user: cpb tags: trunk)
23:13
(#226) setup should always be able to delete user pages (check-in: 53442cb833 user: cpb tags: trunk)
21:27
(#551) Avoid the use of "%.*q". We can safely get away with it here because we already filter the strings in other places (=is_wiki_name()=, =isalpha()=, =is_eow()=). (check-in: d43b73b439 user: cpb tags: trunk)
16:14
admins _should_ be able to lock a home page, if necessary (check-in: f86cd5ded3 user: cpb tags: trunk)
15:31
for some comments, formatting (check-in: 9bbffa3dfa user: cpb tags: trunk)
2006-05-21
15:01
add a max filename length parameter to =write_to_temp()= instead of hardcoding it to 200 bytes. (check-in: e6e7c5503b user: cpb tags: trunk)
14:49
=zTail= should be =const= (check-in: 6247c6516d user: cpb tags: trunk)
14:47
should be returning an int (check-in: a49919fdbb user: cpb tags: trunk)
2006-05-19
23:56
(#174) when a user is deleted, remove the default assignment if it was that user. Some way to warn the admin about this might be a good idea, or maybe just redirecting to /setup_newtkt would be enough of a hint? (check-in: 74b24f9b8b user: cpb tags: trunk)
2006-05-17
17:40
make sure both "/" characters in http:// are preserved. Do this by simply bypassing the protocol entirely rather than keying on ":" characters within the URL. (check-in: 6f70ff5a04 user: cpb tags: trunk)
02:29
wrong header file (check-in: d538583e21 user: cpb tags: trunk)
01:49
=z= is already declared (check-in: 90c4643869 user: cpb tags: trunk)
01:11
remove unused/redeclared variables (check-in: 7feeaae6a3 user: cpb tags: trunk)
01:01
clean up some indices and make a bunch of =db_open()= calls look like the others (i.e. without the transient =pDb= instances). (check-in: 8072497c0f user: cpb tags: trunk)
00:51
cleanup some suspect memory use (check-in: 15dd835f91 user: cpb tags: trunk)
2006-05-15
23:00
(#609) actually, it's better to do this _after_ the schema upgrade check. (check-in: d161b178b3 user: cpb tags: trunk)
22:49
(#609) put a five minute alarm on all HTTP and CGI requests to avoid lingering CVSTrac instances for whatever reason. 30 or 60 seconds would, probably, be a bit short for those (ahem) with slower connections. An actual SIG_ALRM handler isn't really necessary since the default behaviour is to halt the application. (check-in: b45f712e80 user: cpb tags: trunk)
22:31
(#610) Remove double 'your'. Insert chewing gum pun here. (check-in: 4f1ca7f66a user: cpb tags: trunk)
22:29
minor fixes to some function definitions and a couple of extra =malloc()= result checks (check-in: 73dc4e8501 user: cpb tags: trunk)
22:27
eliminate a potential (i.e. someone makes sloppy code changes) NULL derefence (check-in: 96ac156ea7 user: cpb tags: trunk)
2006-05-13
15:10
fix a C++ism (check-in: a70b1b7774 user: cpb tags: trunk)
2006-05-10
22:43
Fix a bug in cgi_redirect: make sure both "/" characters in http:// are preserved. (check-in: 4073676527 user: drh tags: trunk)
2006-05-05
23:51
(#545) fix the hr's in setup_timeline (check-in: 1a230687b0 user: cpb tags: trunk)
15:20
(#606) drop the uid==0 check before the =chroot()= and assume that the operating system will be smart about it. (check-in: 1636db262e user: cpb tags: trunk)
13:08
(#562) don't need to =free()= a static string. (check-in: f1414cdafe user: cpb tags: trunk)
2006-04-27
23:30
(#545) more RSS fixing *: allow both =zMsg= and =zWiki= to be allowed in the description. This allows us to combine something like a ticket header with the ticket contents nicely. *: drop =zTktTitle=. =zMsg= can now be used in its place *: use the RSS detail level. At the lowest level, we basically only generate empty descriptions. At mid level, we add check-in comments and ticket titles. At the highest level, we include any applicable wiki content. We can also put things like Wiki diffs at that level, maybe? (check-in: ac30886f9d user: cpb tags: trunk)
23:27
(#545) enable the RSS detail level toggles. Default it to 5, and we'll ensure that 5 is something in the neighbourhood of the current values. (check-in: 539f3a7ff5 user: cpb tags: trunk)
10:55
(#545) we don't _really_ need the userid in there. (check-in: fbc761910c user: cpb tags: trunk)
03:43
(#545) put the initial ticket description into the RSS item, too. (check-in: 821a285a71 user: cpb tags: trunk)
03:29
(#545) add the contents of an added/appended remark to the RSS output. (check-in: c79e5ebc73 user: cpb tags: trunk)
01:39
(#605) you can't use NULL to end a list of varargs _and_ allow zero as a valie leading value. So switch the accesskey (char) with the value (char*) since the value should never be NULL. Change both fieldset convenience functions for consistency. We also don't really need the extra checks before processing... This is an internal API call and if the caller passes empty lists, they'd better be doing testing. (check-in: bcd48989dc user: cpb tags: trunk)
2006-04-24
02:18
hey, we have a valid =tn= there... (check-in: d5494aa902 user: cpb tags: trunk)
02:16
a bunch of minor fixes/cleanups. Style fixes, a bit tighter permission controls on attachment viewing, removing %s and other bad formatting, etc. (check-in: 35a9698635 user: cpb tags: trunk)
01:04
(#278) try to abstract the ScmTrac stuff a bit more.

Basically, we create a structure under =struct Global= which contains SCM "capabilities", callbacks, etc. The inidividual SCM's export a single =init_<scm>= function to fill the structure. Then everything interacts solely with that structure rather than having "if this, else that" behaviour all over the place.

At least, that's the idea. There's still a lot of CVS-isms... (check-in: 2ab24f0240 user: cpb tags: trunk)

00:11
clean up some queries. Use =db_exists()= in more places. It's usually faster and we don't have to play memory games. (check-in: c24baaeca0 user: cpb tags: trunk)
00:10
we don't actually _use_ =zAnonCap= anywhere, so why the query? (check-in: 5e37d36efa user: cpb tags: trunk)
2006-04-22
18:07
(#577) add keyword-based WikiSpam filtering *: change the calling conventions of =is_edit_allowed()= to return the error message (reason). *: add a keyword list and max score to the abuse setup page *: using the handy *search()* function from #514 (two birds, one stone), check the keyword list and text and forbid any edits that exceed the limit. Tweak the throttler levels when it happens. (check-in: 153c737c79 user: cpb tags: trunk)
17:55
(#514) oops, got the parameter order wrong in the documentation. Add a scoring table to the help page, too. (check-in: edecb1dbc5 user: cpb tags: trunk)
17:16
(#514) make the *search()* function a global SQL function. This allows for arbitrary search techniques in reports. (check-in: 27c0f64ffb user: cpb tags: trunk)
16:56
(#603) include the ticket title in the deletion message and make the ticket number a /tktview link (check-in: 5f455a9c5e user: cpb tags: trunk)
16:52
(#603) more (some) information about what user/report is being deleted. (check-in: 0a4e96acbc user: cpb tags: trunk)
16:40
(#183) merge external tools into HEAD. (check-in: 48b732f8d8 user: cpb tags: trunk)
16:20
(#183) merge HEAD to external-tools-branch (Leaf check-in: 69665da4e1 user: cpb tags: external-tools-branch)
2006-04-12
19:15
( #600, #265 ) Add =cgi_href()= to handle tags. Not all attributes of are supported, but everything we use should be there. (check-in: 6fe631b54f user: chorlya tags: trunk)
16:37
( #584 ) Make ticket title on /tktappend stand out a bit more by turning it into a link to /tktview. (check-in: 5352e9cd8c user: chorlya tags: trunk)
15:01
*: ( #569 ) Count consecutive ticket changes with same timestamp as a single edit. *: Remove unused variables. (check-in: 43b1b4b42a user: chorlya tags: trunk)
14:39
( #584 ) Display ticket title, unobtrusively, on /tktappend. (check-in: e71f20419b user: chorlya tags: trunk)
07:41
( #569 ) Collapse consecutive ticket edits in one timeline/rss item. (check-in: e45842a6cc user: chorlya tags: trunk)
2006-04-11
14:39
Fix some obscure errors in /timeline that are probably a consucen of some copy & paste action in the past. (check-in: 281b7c263a user: chorlya tags: trunk)
14:12
Continuing work on #600:

*: Introduced =cgi_input_elem()= to handel all <input> elements we use. *: Wrapper functions around =cgi_input_elem()= for each element type. *: Changed =*_fieldset()= so it wraps all elements in <fieldset> only if title is present. *: Replaced all <input> elements with calls to new functions in /timeline. (check-in: 97d1f3508a user: chorlya tags: trunk)

09:22
*: (#600) Apply class to =<fieldset>= *: Dummy up an id if one is not passed, because <label> won't work without id in IE. *: Add accesskey to =cgi_radio_fieldset()= (check-in: f3ea5d1838 user: chorlya tags: trunk)
01:24
add some meta navigation links. This probably doesn't do anything in many browsers, but where it works it's a handy set of shortcuts. (check-in: 238d8cd693 user: cpb tags: trunk)
00:46
(#572) make sure table row is always terminated, even when =!okRead=. (check-in: a3a29e9348 user: cpb tags: trunk)
2006-04-10
13:50
*: (#265, #572) Add =cgi_radio()= and =cgi_radio_fieldset()= to deal with radio buttons in HTML forms *: (#562) Add \ line continuation to =translate= (check-in: 870f7e8d74 user: chorlya tags: trunk)
13:20
(#265) remove the <MAP> from the nav/action bars for now. While it obviously works in some browsers, it doesn't work in all. Looks like the problem is that the HTML 4.0 <MAP> takes _block_ elements. and a list of tags don't count as block elements. Eventually, with better CSS support, we'll use
    and
  • elements which _does_ qualify as a block element.
(check-in: 7c0578fdda user: cpb tags: trunk)
2006-04-09
13:49
Some initial work on #265:

*: Wrap navigation bar and action bar in <map> *: Group timeline options in <fieldset> (check-in: ee4125fbc9 user: chorlya tags: trunk)

2006-04-07
15:40
*: (#545) Add option to set detail level for RSS feed. _Not used right now_ *: (#572) Wrap checkboxes and radio buttons in =<label>= (check-in: dcfa2fd042 user: chorlya tags: trunk)
09:13
Remove =isdir()= SQL function and document =path()/dirname()/basename()= functions (#595). (check-in: 0a813f2c80 user: chorlya tags: trunk)
2006-04-06
01:23
(#537) can't call =free()= on a static string. (check-in: 9f9752714a user: cpb tags: trunk)
2006-04-05
01:34
after a ticket undo, should go to /tkthistory rather than /tktview. (check-in: a999314c68 user: cpb tags: trunk)
2006-04-04
22:05
(#597) works even better without the free. (check-in: e1dbc2e97c user: cpb tags: trunk)
22:04
(#597) dunno why I made it so complicated. Just =REQUEST_URI= works fine. (check-in: b8a935339d user: cpb tags: trunk)
02:23
(#535) make =output_trim_message()= change list elements to just "+" and spaces. Otherwise, with the newline gone, the {quote: *:} markup turns into boldface and makes things a bit nasty looking. I'd rather use {quote:{quote:*:}}, but adding extra characters isn't feasible without moving the whole buffer around. (check-in: 154fe7402b user: cpb tags: trunk)
01:59
(#499) user deletion fixes *: confirm user deletion. This could maybe be done better, but it fits the existing code. *: add "Cancel" and "Delete" options to the action menu. (check-in: 34193b14de user: cpb tags: trunk)
01:12
(#452) only do a ticket notification if a tktchng record would have been created (i.e. not for just xref changes). (check-in: 02be2305b5 user: cpb tags: trunk)
00:45
(#284) support showC==3 in the RSS feed, too. (check-in: 8e168edd16 user: cpb tags: trunk)
00:42
(#284) add a toggle to only show trunk checkins. Note that I kept showC==2 as the "show all" value so as to not break existing bookmarks and links. (check-in: d820b2cba1 user: cpb tags: trunk)
2006-04-03
02:16
(#594) add a _very_ simple table markup. (check-in: 24f4df7b5a user: cpb tags: trunk)
01:24
(#419) actually, it wasn't an off-by-one. We just weren't using =is_eow()= correctly (check-in: bce9a42fcd user: cpb tags: trunk)
01:17
(#419) Fix off-by-one in calculating repository filename length, which meant that filenames followed by punctuation weren't working correctly. (check-in: 343f98e99c user: cpb tags: trunk)
2006-04-02
05:09
(#183) and another merge back from HEAD... (check-in: b15a161738 user: cpb tags: external-tools-branch)
04:57
(#509) merge the current manual support back into HEAD. This includes:

*: having a [Help] button on pages with a corresponsing wiki page *: a link to CvstracDocumentation on the /index *: a beefed up wikiinit.c (run =cvstrac wikiinit ?dir? ?project?= to pick this up).

Admin documentation is still woefully incomplete. (check-in: 57a6cbfdb4 user: cpb tags: trunk)

04:43
(#509) more manual stuff.

*: user documentation largely complete, if a bit terse in places. Admin docs are mostly incomplete. *: Fixed most of the documentation to correspond to the current state of HEAD. I hope. *: [Help] link no longer shown if target wiki page is missing (Leaf check-in: 8acd235c71 user: cpb tags: manual-patches)

04:40
(#509) merge HEAD back into the manual-patches branch. (check-in: d7171d11d5 user: cpb tags: manual-patches)
04:19
render links to missing wiki pages slightly differently (with , in this case... yes, it should be in ). (check-in: f054f61f28 user: cpb tags: trunk)
00:27
(#593) provide some kind of hint as to why the engine things there may be multiple SQL statements. (check-in: 756deef629 user: cpb tags: trunk)
00:16
(#183) merge 2.1 schema stuff from HEAD. Move some tool functions to tools.c. Note that if you've been running stuff from this branch, [706] is going to be a problem. You'll need something like the following to not lose tool configuration:
sqlite3 <project.db> create table old_tool AS select * from tool; drop table tool; UPDATE config SET value='2.0' WHERE name='schema'; cvstrac update <?dir?> <?project?> sqlite3 <project.db> REPLACE INTO tool SELECT * FROM old_tool; drop table old_tool;
(check-in: 99962a12d0 user: cpb tags: external-tools-branch)
2006-04-01
15:31
(#537) make /dirview faster

*: do a schema upgrade which adds a _lastfn_ field to FILE. *: update repository modules to ensure that _lastcn_ is up-to-date *: simplify the living daylights out of the /dirview query (check-in: 252362e49b user: cpb tags: trunk)

15:29
clean up some of the SQL functions. Keep sqlite_value_*() results in variables, check for NULL results in more places, make sure everything fits in 80 columns, etc. (check-in: 72d1fdb78f user: cpb tags: trunk)
11:15
Add ticket title to RSS items (#545). (check-in: 0177e151d1 user: chorlya tags: trunk)
2006-03-30
18:00
*: Remove annoying new line in /tktappend *: Change text on report delete button (check-in: ab68a338f8 user: chorlya tags: trunk)
2006-03-28
01:38
(#495) test database tweaks

*: don't generate nearly as many directories. More like 500 rather than 3000. This tightens up the tree and increases the number of revisions per given file, which is really what we want for testing. *: fix a bug which created checkins with no files. *: setup password should be initialized to "setup", since we're supposed to start as a 1.0 schema (i.e. plain text passwords). (check-in: a1b353b298 user: cpb tags: trunk)

00:43
(#590) remove an extraneous and add a missing </form> in the /login page. (check-in: 92e322ccac user: cpb tags: trunk)
2006-03-27
22:15
(#183) fix NULL dereference (check-in: ca62ee1d7a user: cpb tags: external-tools-branch)
2006-03-25
19:07
Append .db to filename when making test databases to be compatible with cvstrac commands (check-in: 32e44eadd5 user: chorlya tags: trunk)
04:56
(#495) wrote a simple program to populate a fairly complex CVSTrac database with dummy entries. Using is as simple as:
make maketestdb ./maketestdb project ./cvstrac update `pwd` project ./cvstrac server 8008 `pwd` project

Obviously, there's no content for the repository. The DummyTrac approach would still be best for that... (check-in: e7fe0a4149 user: cpb tags: trunk)

2006-03-23
22:36
(#577) oops, that external link logic was a bit messed up. (check-in: ab306030d1 user: cpb tags: trunk)
2006-03-17
23:37
(#588) when the thing being tagged is another revision, the tag name is in the fourth field. So do a query on it to discover a date. (check-in: a774ed7619 user: cpb tags: trunk)
2006-03-12
02:00
(#573) put rel="nofollow" into the report links in the report list and the embedded reports. There's unlikely to be any sane situation where you'd want _all_ the reports on your site indexed. If there _are_ reports that should be indexed, explicitly link to them from a wiki page. Embedded reports, of course, have their contents embedded in whatever page gets indexed... (check-in: 82f37d0dd0 user: cpb tags: trunk)
2006-03-11
14:34
(#587) add more useful output when 'svnlook youngest' fails. This is the first command used when updating the SvnTrac history so if there's any problems with paths or repositories or whatnot, this'll be the place. (check-in: 69cc901866 user: cpb tags: trunk)
14:08
(#183) =external_tools_3.patch=: Handle issues of wiki timestamps. We basically only want to track them in URLs when the user has explicitly selected a version, not just the latest. Otherwise things get... confusing. (check-in: 98a3c9d0af user: cpb tags: external-tools-branch)
14:06
(#183) commit external_tools_2.patch: Further refinements. Now all the various CVSTrac objects (except inspections) have external tool options. If there's no output from a tool, we just redirect back to the appropriate "View" page. (check-in: 30953b80e8 user: cpb tags: external-tools-branch)
14:04
(#183) commit external_tools.patch as a separate branch: Add ability to run external programs on most CVSTrac objects in a content-sensitive fashion. (check-in: 0018da0dad user: cpb tags: external-tools-branch)
2006-03-08
01:34
(#569) display a count of wiki edits, collapsing multiples into a single RSS/timeline item. (check-in: 109c5e68df user: cpb tags: trunk)
2006-03-04
02:55
(#226) oops, can't %h =format_user()= output. (check-in: 988af29895 user: cpb tags: trunk)
2006-03-03
23:14
(#586) actually, the real problem was that the %b substitution was leaving the %b when there was no markup content. This led to some confusion... (check-in: 2b0c76ccd4 user: cpb tags: trunk)
23:06
(#585) *cgi()* now takes a second argument, used as the default value if the CGI parameter is missing from the query (check-in: 525d68b17a user: cpb tags: trunk)
02:18
(#226) add user home pages. These are just wiki pages, but they're generally only edittable by the owner. User names is various places will be turned into links to these pages if they exist. This is intended to be combined with embedded reports to create a kind of home page/bio page/scratchpad page. How they work in practice... (check-in: ed7e49dc5a user: cpb tags: trunk)
02:10
(#582) when showing wiki edits in the timeline, include a (diff) link. (check-in: f14e0157b3 user: cpb tags: trunk)
01:06
(#583) use =getpwuid= rather than trying to use the defunct =COPY= operator on =/etc/passwd=. (check-in: 04586b18c2 user: cpb tags: trunk)
00:31
(#515) distinguish between wiki and non-wiki content in timeline. We take an approach similar to the RSS feed where wiki messages go in =zWiki= and non-wiki messages in =zMsg=. This ensures that ticket titles aren't treated as wiki format. Also, explicitly wrap wiki page names with {quote:{wiki:}}. This is necessary for #226, but may be handy for other reasons. (check-in: 2cb36ca49f user: cpb tags: trunk)
2006-03-02
02:08
(#581) add SQL function to control display format of report columns.

In a nutshell, we create the *wiki()*, *tkt()* and *chng()* functions. Each causes whatever it wraps to be displayed as the given type. So a checkin could be displayed as a link using something like:

chng(cn) AS 'Checkin'

While you could show a checkin comment, without the underscore formatting, using something like:

wiki(substr(message,0,140)) AS 'Comment'

This, obviously, is all backwards compatible with existing report formats.

Also, prevent recursion caused by embedded reports being triggered from wiki markup and, of course, document this stuff. (check-in: 005083d288 user: cpb tags: trunk)

00:19
(#580) replace =sqlite3OsTempFileName()= with =mkstemp()=. Catch =diff= errors. (check-in: d9991c329b user: cpb tags: trunk)
2006-03-01
03:54
(#476) I could swear the the status character for added files was 'N'. Seems to have changed to 'A' at some point. (check-in: ac94f6a187 user: cpb tags: trunk)
03:36
(#476) some cosmetic cleanups *: use =db_exists()= where is simplifies things (i.e. gets rid of otherwise unused variables). *: when I wrote =git.c=, I think my terminal window was too wide. Reformat to fit 80 columns. (check-in: b96e1b6a81 user: cpb tags: trunk)
02:22
(#476) some GitTrac cleanups/changes

*: support both local and bare GIT repositories. The repository root is now defined as wherever the git files exist, either =/path/to/project/.git= for local repositories or =/path/to/project.git= for bare repos. *: make =insert_file()= use the =db_exists()= call. Less ambiguity there... *: fix the recursive =git_ingest_commit_tree()= to only do recursive when we actually encounter multi-parent commits. Most of the time, we just loop. Otherwise, importing extremely active projects will just blow the stack (when the commit chain hits around 600 items on my memory-starved system). *: ensure there's a "HEAD" file in the configured repository. Just a sanity check. We don't actually use it for anything, but gitweb does it too. (check-in: 748ec80be1 user: cpb tags: trunk)

01:32
(#465 and #542) make the file revisions in the /chngview links to the fileview pages for each version. Additionally, make the little -> in between a link to the _diff_. Not exactly what #542 was asking for (i.e. it links to another page, not to a section of the current page) but it should be just as effective. (check-in: 8a752ae1fd user: cpb tags: trunk)
2006-02-28
20:50
(#441) forgot to remove an =abort()= after I got the SQLite 3 stuff working. #579 would have been a lot more obvious otherwise... (check-in: 25381abafa user: cpb tags: trunk)
20:22
(#579) *now()* function is an internal SQL function. Use a cutoff variable instead. (check-in: 781e1c76ec user: cpb tags: trunk)
01:51
make the cvs_ user command bail if it's not CVS (check-in: 0be854616b user: cpb tags: trunk)
2006-02-26
01:46
(#569) don't hide subsequent wiki edits when the editor is anonymous and the throttler is enabled. (check-in: bd41a55ebb user: cpb tags: trunk)
2006-02-24
00:54
(#401) while we're tweaking the WikiSpam controls, make the captcha functionality optional. (check-in: 98ccb39aee user: cpb tags: trunk)
2006-02-23
23:54
(#577) when a user exceeds the maximum number of links in a single edit, we do two things:

1: adjust the throttler counter up. Currently, we adjust up by half the limit. This means the second attempt will exceed limits if the attempt is made too quickly.

2: clear the captcha cookie. This forces the user to go through a second captcha test. (check-in: 9ce181118c user: cpb tags: trunk)

02:49
(#577) add option to limit the maximum number of external links which may be inserted into a single Wiki edit. This limit only applies to anonymous users. If the limit is exceeded, a nastygram is printed. Some tweaking to throttle limits might also be a handy idea, just to prevent "trial and error" attacks. (check-in: 3ad205cb29 user: cpb tags: trunk)
01:53
(#573) make the nofollow stuff optional. Change the /setup_throttle to a generic "abuse control" setup page. More to come on this topic. (check-in: 9ca0884930 user: cpb tags: trunk)
2006-02-22
14:47
(#575) hopefully this is just my attachment table... Looks like more than a few attachments are being decoded a bit short. Several k, in some cases. This may just be truncated uploads that aren't properly caught or some property of =blob_encode()= which I haven't caught onto. Or maybe something to do with the SQLite 2 to 3 database dump? In any case, just ensure that the extra bytes are zeroed and continue on. It's not like we can recover bytes that aren't there in the first place... (check-in: f5b08b5cb8 user: cpb tags: trunk)
01:57
(#573) put rel="nofollow" in some more places, including the action bar. (check-in: ecb8e6e046 user: cpb tags: trunk)
01:50
(#573) put rel="nofollow" into external links. This, basically, trashes any benefit from spamming a wiki since it causes search engines to ignore the external reference. (check-in: c3eabf6252 user: cpb tags: trunk)
00:25
(#575) convert all attachments to SQLite 3 blobs

*: remove blob.c... the =blob_decode()= function is the only part of that we'll need anymore and that can be a static function in /cvstrac/db.c *: introduce a schema 2.0 change which decodes all attachments and saves them as blobs. *: change the attachment retrieval to use a callback query in order to extract the blob. The regular =db_query()= call can't handle embedded NUL's. (check-in: 2c3987e9d3 user: cpb tags: trunk)

2006-02-21
23:28
(#576) we were missing a parameter for the =db_execute()= call, which meant we weren't deleting attachments associated with a ticket. Which attachments we _were_ deleting, I have no idea. (check-in: be4a55a41c user: cpb tags: trunk)
02:06
(#441) no longer any database imposed size limits on attachment sizes. (check-in: 60c86b0046 user: cpb tags: trunk)
01:48
(#441) switch to SQLite 3 API

This is going to break compatibility, so I definitely need to write some sort of CvstracUpgrading page.

What we've got here is a straight conversion from the SQLite 2 API to the SQLite 3 equivalent. No other fancy stuff is attempted such as handling UTF-8 and such. We're also not doing any changes to schemas or queries. (check-in: a510997d4c user: cpb tags: trunk)

2006-02-20
15:12
(#571) forgot to change the type to 8 on one of the inspection queries. (check-in: 49b25e0709 user: cpb tags: trunk)
2006-02-16
03:10
(#571) include attachments in RSS output (check-in: 13f321b425 user: cpb tags: trunk)
02:48
(#533) add an option to not show any ticket information in the timeline (check-in: dd5dbadefa user: cpb tags: trunk)
2006-02-15
01:10
(#570) generate a useful message when search doesn't find anything (check-in: 531f84752d user: cpb tags: trunk)
01:02
(#568) update =ticket.changetime= when appending remarks. (check-in: 2d575697a7 user: cpb tags: trunk)
2006-02-14
14:13
(#566) oops... that's not how to use precision with %h and %T. (check-in: cfae29bf47 user: cpb tags: trunk)
2006-02-13
22:14
(#566) properly escape repository pathnames/rlog urls using %T and %h. (check-in: db335d7573 user: cpb tags: trunk)
2006-02-07
15:44
(#565) add a {quote: {wiki: PAGENAME TITLE}} markup for linking to wiki pages. (check-in: 9dc77b66c4 user: cpb tags: trunk)
2006-01-31
02:31
(#537) avoid the "ugly and slow hack" path when we're not doing any sorting. Clean things up a touch by moving the row output code into a common function. (check-in: 84d265177c user: cpb tags: trunk)
2006-01-30
02:55
(#537) that column header should have a class, not just a color (check-in: c05b4413ad user: cpb tags: trunk)
02:01
use =cgi_printf()= to avoid adding whitespace when we generate a ticket or checkin formatting. Purely an annoyance, but since my normal convention is commits with "(#tn)" it's a frequent annoyance. (check-in: 650b4dc327 user: cpb tags: trunk)
01:39
(#537) add column sorting to /dirview. (check-in: 56534538aa user: cpb tags: trunk)
2006-01-28
15:38
(#546) put the snippet for RSS feed auto-discovery into the default header. (check-in: 55ffcf3f8f user: cpb tags: trunk)
02:45
(#231) don't need to escape these (check-in: 0bd3683636 user: cpb tags: trunk)
02:42
Contents should go in the action bar (check-in: fd84e16475 user: cpb tags: trunk)
02:39
(#231) sorry, I meant id= (check-in: 3865f62463 user: cpb tags: trunk)
02:37
(#231) put the main body and default footer into
sections.
(check-in: c684f1a21f user: cpb tags: trunk)
02:23
(#481) add the %D and %R substitutions to the ticket notify so that users can get the description and remarks field as HTML rather than Wiki markup. (check-in: c8c13b71b8 user: cpb tags: trunk)
02:14
(#481, #545) try to output absolute rather than relative links in things like RSS.

*: define a =g.zLinkURL= which prefixes all relative links output from the wiki formatter. Normally, this would be =NULL=. *: create a =format_link()= function in /cvstrac/format.c to turn handle formatting of links and prefixing with =g.zLinkURL=. So far, only links generated from wiki formatting need this treatment. *: change /cvstrac/rss.c to actually set the link URL (to =g.zBaseURL=, obviously). (check-in: ab144ece6e user: cpb tags: trunk)

2006-01-27
03:33
(#507) try to make the wikiinit update not update pages that haven't changed. Not sure how well this will work the first time because of how newlines are/were handled. (check-in: 271b3ea641 user: cpb tags: trunk)
03:04
(#6) make some nicer navigation... add a little history, some idea of where we are. I'm not showing, however, all the possible set of results. That's usually not necessary as long as the user can tell that there's more available on the next page. (check-in: 0efb971ebe user: cpb tags: trunk)
2006-01-26
22:31
(#561) oops, code from another patch snuck through. (check-in: 3109b81983 user: cpb tags: trunk)
22:00
(#561) add a *cgi* SQL function for getting a given CGI parameter. This allows for nifty things like:
SELECT sdate(-invtime) AS 'When', who AS 'By', ipaddr AS 'At' FROM wiki WHERE name=cgi('p') ORDER BY invtime
(check-in: ecdbb65200 user: cpb tags: trunk)
21:37
(#6) add paging to the search. Nothing fancy, just a "More..." link down at the bottom of the page which takes you to the next batch of results. (check-in: c4687e998c user: cpb tags: trunk)
01:01
(#560) update FormattingWikiPages with the {quote:{report: rn}} markup. And not, I don't particularly enjoy the explanation about how to get the report number... (check-in: d47521d740 user: cpb tags: trunk)
00:52
(#560) add a {quote:{report: rn <caption>}} markup, allowing a full report to be embedded in a wiki page. As with {quote:{image:}}, {quote:{leftreport: rn}} and {quote:{rightreport: rn}} are also available for layout purposes. (check-in: f19f2b2a77 user: cpb tags: trunk)
00:46
(#560) have =db_restrict_access()= track and return the last state of the authorizer so we can safely use it recursively. (check-in: 62345be59f user: cpb tags: trunk)
2006-01-24
22:36
(#548 and #554) update *option()* documentation (check-in: 0350ac5387 user: cpb tags: trunk)
22:34
(#548 and #554) enhancements to the *option* function

*: expanded the results structure for the standard query callback to count the number of columns in the results. *: created a common =db_err()= function *: =f_option()= now includes the column counts in the output *: the first column of the first row is always the default value. Users can adjust the default by changing the ordering of the query results *: if two columns are returned, the second column is considered the "description" while the first is the value. This allows for things like:

WHERE assignedto=option('User',"select id,name from user")
(check-in: 93c01c5861 user: cpb tags: trunk)
00:56
(#553) when generating the login url, do a better job of grabbing the query parameters. (check-in: 89109f44ff user: cpb tags: trunk)
2006-01-18
15:15
the list of things in the navigation bar and the list of things on the /index page should be a bit more in sync. (check-in: 8d944de5da user: cpb tags: trunk)
15:13
hide wiki and attachment checkboxes if the user doesn't have permissions for either of them. (check-in: a696b5105e user: cpb tags: trunk)
2006-01-17
01:23
(#556) ticket notify patch

*: call notify when attachments are added (%h substitution) *: provide substibutions for ticket change row ids to prevent races *: update /setup_chng page (check-in: 5fce617094 user: cpb tags: trunk)

2006-01-11
16:38
(#418) *CELLSPACING* wasn't on the list of allowed attributes (check-in: 05124b22aa user: cpb tags: trunk)
2006-01-10
20:21
(#547) That seems to run a little faster than my approach. (check-in: 4e03d4e010 user: cpb tags: trunk)
19:02
(#547) handle empty log messages (check-in: 19e5b55d1c user: cpb tags: trunk)
01:23
Fix minor compiler warnings. (check-in: 500f399632 user: drh tags: trunk)
2006-01-08
15:48
(#522) specific versions of wiki text rarely change _and_ have usable timestamps. (check-in: 649ba37240 user: cpb tags: trunk)
15:03
(#492) fix up some comments/formatting (check-in: 01f3c54fb0 user: cpb tags: trunk)
04:27
(#522) patchsets have datestamps, too (check-in: 3252298d79 user: cpb tags: trunk)
03:27
(#534) add support for the HTTP/1.0 *If-Modified-Since* conditional request.

This is useful for a bunch of reasons:

*: being an HTTP/1.0 construct it's more widely support than entity tags. *: it allows us to check for a cache hit _before_ we actually generate any content. In the case of /getfile, _before_ we do an expensive =popen()= to snarf the contents from the repository. *: one of the side-effects of [613] is to add a constantly changing timestamp to the RSS output; this defeats the content-based hashing ETag scheme that we're using. (check-in: c5a5a1d61d user: cpb tags: trunk)

2006-01-07
22:19
update copyright year (check-in: de2d04144e user: cpb tags: trunk)
22:15
do the link/checkin ok checks in the same place all that other stuff is done rather than when we're outputting the header. (check-in: 2adb4ed263 user: cpb tags: trunk)
22:02
use a dynamic buffer in =check_cache_control=... (check-in: c5160eb535 user: cpb tags: trunk)
21:44
(#544) another =zGetFile= rewrite (check-in: c304d9ccee user: cpb tags: trunk)
21:05
handle a missing description a little more gracefully. (check-in: 60ccc8a24c user: cpb tags: trunk)
15:50
(#492) upgrade RSS feed to 2.0

*: include a <pubDate> tag with every item *: include <pubData> and, optionally, <lastBuildData> tags in the header *: output a *Lat-Modified* HTTP header if we've got a build date *: variable RSS TTL now available (check-in: b7ccc28072 user: cpb tags: trunk)

15:32
(#543) remove some excess whitespace (check-in: c97a6e1c14 user: cpb tags: trunk)
2006-01-06
19:03
(#544) =zGetFile= has already been urlized. (check-in: 6105b75226 user: cpb tags: trunk)
2006-01-05
01:29
(#418) add some attribute filtering to HTML restrictions. This should help reduce various types of HTML hacking (JavaScript injections, style manipulations), although it creates trouble with custom markups which use restricted HTML elements... Might need to add a "trusted" flag to markups or something similar. (check-in: 703905b7ef user: cpb tags: trunk)
2006-01-04
23:11
(#541) forgot a '%' (check-in: 8c05a1a9f0 user: cpb tags: trunk)
2006-01-02
18:29
(#540) make the ETag digest copy a little clearer (check-in: f2bb1c8fd8 user: cpb tags: trunk)
2006-01-01
16:25
(#540) use =appendf()= to build up the search query (check-in: 3253a9cc19 user: cpb tags: trunk)
15:02
(#540) =bprintf()=, on the other hand, _does_ support %h. (check-in: 7e813e5b78 user: cpb tags: trunk)
05:22
(#540) allowing =appendf()= take a NULL for the length counter makes it a bit more versatile in that we can use it like a safe formatting =strcat()=. (check-in: 8bcc748a7d user: cpb tags: trunk)
05:15
(#540) implement a =appendf()= function to cleanly handle the situation where we're appending formatted strings onto a growing buffer. Besides being safer, we're also not continuously having to do =strlen()= calls and keeping track of length ourselves. (check-in: b6b896cf0c user: cpb tags: trunk)
05:00
(#540) more s/sprintf/bprintf/. Again, we're not quite done timeline.c. (check-in: 38a704b57c user: cpb tags: trunk)
04:35
(#540) s/sprintf/bprintf/. rss.c doesn't have all the sprintf()s converted... Got a better plan for that. (check-in: f1e252ba68 user: cpb tags: trunk)
04:09
(#540) s/sprintf/bprintf/. (check-in: fae51325d8 user: cpb tags: trunk)
03:53
Bug fixes in the new wiki delete logic. (check-in: febe2108f8 user: drh tags: trunk)
03:50
(#540) add a =bprintf()= function. Basically works like =snprintf()= (which we should be using instead of =sprintf()=) but uses the more advanced formatting abilities of =vxprintf()= (which in turn is the core of =mprintf()=). (check-in: 9927355fff user: cpb tags: trunk)
03:07
don't show the "New report" action item if the user doesn't have query permissions. (check-in: ec3e125487 user: cpb tags: trunk)
02:41
oops, %h doesn't work in =sprintf()= (check-in: 33a6671375 user: cpb tags: trunk)
02:36
(#540) replace a whole bunch of %s with %h/%t/%t or, better yet, %d. (check-in: a976e36404 user: cpb tags: trunk)
02:14
More pedantic %s to %h/%t/%q changes. Asserts added to verify that fixed sized buffers never get close to overflowing. (check-in: 5faf22cfb6 user: drh tags: trunk)
01:24
Add new privileges Delete and Query. Users with Delete privilege can erase content added by anonymous within the past 24 hours. User with Query privilege can create and edit report formats. (check-in: 86afdb8ee7 user: drh tags: trunk)
2005-12-31
22:12
(#540) don't use '%s' where just a %d is more appropriate. (check-in: 3aaa286156 user: cpb tags: trunk)
21:58
(#540) some more format string changes. For the most part, problems here would imply something broken in the history file... Or someone using the history file to try to crack CVSTrac... (check-in: bb6341ba89 user: cpb tags: trunk)
20:21
(#540) more format string changes, mostly related to =zPage=. We normally verify that =zPage= is either a ticket number (numeric) or a wiki page (CamelCase), but there's no guarantee that won't change in the future. (check-in: 39109c5fdd user: cpb tags: trunk)
19:44
Bump version to 1.2.1 (check-in: 936c909a21 user: cpb tags: trunk)
18:05
(#469) /dirview needs =printable_vers()= calls on those revisions or things get pretty crowded in GitTrac. (check-in: afaec617f3 user: cpb tags: trunk)
17:18
More changes of %s to %h and friends - all for an extra layer of safety. No holes found. (check-in: bc8a2a3b7b user: drh tags: trunk)
16:41
(#520) run the *option()* query through the report SQL statement verifier. (check-in: bda45d8e09 user: cpb tags: trunk)
16:35
Use %h instead of %s even when not necessary. Just to be paranoid. (check-in: e071c1bf8e user: drh tags: trunk)
16:25
For some reason, /rlog has never had a common_footer() call. (check-in: 47b51f3e68 user: cpb tags: trunk)
15:52
Correct some overzealousness in the previous checking. (check-in: e9d2cbf13c user: drh tags: trunk)
15:32
Fix a problem in database initialization with schema version 1.9. Change some %s formatting to %h or %T or %t just to be paranoid. (check-in: 983af97e13 user: drh tags: trunk)
2005-12-28
22:42
(#270) add link titles (check-in: bfb6ad0b4a user: cpb tags: trunk)
12:32
(#539) need to restrict what sorts of queries we'll check... (check-in: 52c8df3830 user: cpb tags: trunk)
12:29
(#539) validate report queries _before_ saving the report. This just extends the normal "not too many SELECTs" test to include a full query check. (check-in: 5e8d6026f5 user: cpb tags: trunk)
02:40
(#197) add OS X make rules (check-in: 0838dfc86b user: cpb tags: trunk)
01:51
(#270) make the "Logged in" message a link to /logout, too. This is probably nowhere near as useful as a login link for anonymous users, but consistency is always good. (check-in: 88f2b90bfc user: cpb tags: trunk)
2005-12-27
23:47
(#276) add support for user-defined fields in ticket notification (using %1 through %5). (check-in: 661aa8d740 user: cpb tags: trunk)
23:41
(#270) make the "Not logged in" text in the menubar a link to a login page. This ensures that a login link is available one every CVSTrac page for anonymous users. (check-in: 5d667cac1d user: cpb tags: trunk)
22:50
(#229) separate the displayed *aux* and *option* names from the CGI parameters. For one thing, we need to restrict the character set used by the CGI parameter (no spaces or other magic characters). (check-in: 31fc48b095 user: cpb tags: trunk)
03:21
(#298) be a bit more aggressive about newlines in enum descriptions (check-in: 0153254720 user: cpb tags: trunk)
03:02
(#204) force the revision comparison to be string based. Most other places don't have this problem so it seems like it's probably a side-effect of the temporary table. (check-in: 7bafd92814 user: cpb tags: trunk)
01:58
(#174) when a current default status or type is removed from the enumeration list, update the default to be something actually from the new list. (check-in: eccda24746 user: cpb tags: trunk)
2005-12-26
19:28
(#538) add a /wiki.txt page to get a plain-text dump of the raw Wiki markup. (check-in: 3a62490b8e user: cpb tags: trunk)
15:31
(#469) some slight adjustments to column layout and free up query memory. (check-in: b263ce7cc4 user: cpb tags: trunk)
2005-12-24
14:29
(#469) add a "long view" option to browse mode.

*: create a /dirview option which does a long/detail view of a directory. This shows age, user, revision and the last commit message for each file with links to all the appropriate CVSTrac pages. *: add an option for the admin to specify the default browse style (long or short). Defaults to short. *: add a cookie so the users last browse style is retained during navigation. *: add a _default_browse_url()_ function to figure out what's best and uses it anywhere a "dir" browse link is used. This gives the user a consistent browse experience. *: tighten up the /setup_interface layout a bit (check-in: 0c985d8d79 user: cpb tags: trunk)

14:17
(#531) oops, milestone logic not quite right (check-in: 679a283c13 user: cpb tags: trunk)
2005-12-20
14:02
(#534) some HTTP header fixes *: only output a *Date* header when we're acting as a standalone HTTP server *: don't generate a *Content-Length* for a 304... we're not sending content. (check-in: 0fba02f5c0 user: cpb tags: trunk)
00:36
(#531) don't retrieve event milestones when milestones disabled. We _do_ need release milestones, however, in order to divide up the timeline when requested. (check-in: 0eb170940c user: cpb tags: trunk)
2005-12-14
13:15
(#520) add a single param variant of *option*. This (like the single param version of *aux*) allows the user to re-use an option field in an expression, such as:
SELECT * FROM ticket WHERE owner=option('User','SELECT id FROM user') OR assignedto=option('User')
(check-in: ac01e4faee user: cpb tags: trunk)
02:42
(#520) implement a SQL *option* function to provide a dropdown menu similar to how the *aux* function generates a textfield form. This allows reports using expressions like:
SELECT tn FROM ticket WHERE owner=option('User','SELECT id FROM user')

Which pretty much works as expected.

Also added *aux* and *option* documentation to /rptedit and /rptnew pages. (check-in: dc9694754b user: cpb tags: trunk)

2005-12-12
00:34
(#497) clarify attachments a bit more. (check-in: a36c3f0077 user: cpb tags: trunk)
00:30
(#497) add better support for "style" objects

*: /setup_header page now more general /setup_style *: added option to restore the style from the default *: add a %B (base URL) substitution, so we can generate URL's like "%B/cvstrac.css". *: adds the ability to attach files to the setup_style page by basically saying that ticket zero (which isn't a valid ticket number) is that page. This is a little hackish, but it means that the administrator has a "private" attachment playground for all the various files that need to be uploaded. *: maps URLs of the form http://<cvstrac path>/<filename> to ticket zero attachments, by name, meaning that stylesheet elements don't need to guess at things like attachment numbers and stuff. To add a logo, for example, you can just use . If the same filename exists multiple times, the most recent attachment is chosen. *: handles/hacks around the constant/expiry/caching issues for #522. (check-in: 19b0579463 user: cpb tags: trunk)

2005-12-11
23:53
(#464) add timeline cookies

*: minor fix to cookie lifetime handling *: clicking "Show Timeline" will save settings to a cookie and viewing the timeline will extract the settings and apply them. This can always be overridden. *: add a /setup_timeline to handle this and, eventually, some RSS 2.0 options. (check-in: 3816c38267 user: cpb tags: trunk)

15:16
(#522) fix some comments (check-in: d19e54aa0d user: cpb tags: trunk)
02:22
(#522) patchsets are constant, too. (check-in: 74b02a37b6 user: cpb tags: trunk)
01:33
(#522) for constant output, send an *Expires* header. By default, we're going with 7 days. We're assuming that when something sets the *g.isConst* flag, it's serious about it... (check-in: 71131acf01 user: cpb tags: trunk)
01:17
(#522) do a bit of work on HTTP response cacheability

*: output from /attach_get always includes a *Last-Modified* header. We should modify this to handle the *If-Modified-Since* condition, too. *: Output of specific versions of /getfile (which generates the raw file contents) is flagged as being "constant" since it'll never change. We don't really do anything with the constant flag at the moment, but we should look at using expiry. Unfortunately, the stuff that's often flagged as constant really isn't that constant. *: when generating CGI replies, calculate an entity tag using the MD5 hash on the buffer. This is included in all responses as the *ETag* header. *: additionally, when we generate the *ETag* we also check it against the *If-None-Matches* request header and, if it's there, we're about to return a 304 response without sending the contents. Even though we still have to _generate_ the page content, sending a 300 byte rather than 100k /timeline is still a rather large bandwidth savings. This also works _invisibly_ with _every_ page we generate, including attachments, RSS output, etc. *: drop the *Pragma: no-cache* and replace it with a bit of cache control. *Pragma: no-cache* wasn't really doing much because there wasn't any other cache control headers that would have confused a cache into thinking that it could actually keep the stuff anyways. For cache control, all we really need to do is distinguish between public and private data (i.e. anon vs logged in users). *: remove the response header stuff from =main.c=. Everything else like that was already being done in =cgi_reply()= anyways... (check-in: aceb64f982 user: cpb tags: trunk)

2005-12-04
00:08
(#521) add an RFC 822 date formatter. The time zone is hardcoded to GMT as required by HTTP. (check-in: 8dc86c4ad0 user: cpb tags: trunk)
2005-12-02
13:36
_tktnew_ needs a cancel action somewhere (check-in: ee560628d3 user: cpb tags: trunk)
13:34
(#470) description preview title needs to be broken out (check-in: f962c45888 user: cpb tags: trunk)
02:46
(#470) merge [552] into the *manual-patches* branch so I can keep working on this without changing browsers. (check-in: 5a508a83b3 user: cpb tags: manual-patches)
02:41
(#470) put a textarea on the same page as the preview area. Besides working around some browser issues (I'm not sure how well defined large tracts of text in hidden fields are), it makes the edit/preview/edit cycle must faster. Those of use working over dial-up connections appreciate any reduction in clicks. (check-in: aff75c9ab2 user: cpb tags: trunk)
2005-12-01
22:12
(#510) put an "Edit" button in the _chngview_ action bar. I'll leave the little "edit" link next to the comment, however, since people are probably used to it. (check-in: f0a4f8e861 user: cpb tags: trunk)
22:08
(#512) confirm report delete actions. (check-in: 46514be2ff user: cpb tags: trunk)
21:52
(#517) submitting a report form now sends to the _rptview_ page. (check-in: 9a74426b83 user: cpb tags: trunk)
2005-11-25
02:08
(#509) add reports, attachments and inspections. (check-in: 312b7c8441 user: cpb tags: manual-patches)
00:46
(#264) fix typo in date function docs (check-in: c4bfeee7e5 user: cpb tags: trunk)
2005-11-24
23:58
(#511) make the report query authorization stricter:

*: restrict *access_load* to setup users *: anonymous users can't see contact information *: RdWiki permission to read wiki. Mind you, you also need that to see reports in the first place, but... *: Checkout permission to read *chng*, *filechng* and *file* *: Read permission to see *ticket* columns (check-in: 9242e11819 user: cpb tags: trunk)

15:12
(#509) we already had a minimal CvstracDocumentation page so rather than created a new parallel page, just take that one over. (check-in: 30bce97349 user: cpb tags: manual-patches)
02:59
(#509) finish check-in documentation, add wiki and milestones. (check-in: 02dcb9278a user: cpb tags: manual-patches)
2005-11-23
19:28
(#444) when searching filenames, search for attachments as well as repository files. Also fix labels on filename output. (check-in: bd088608fa user: cpb tags: trunk)
01:40
(#509) that wasn't supposed to be in there (check-in: 66a71b636a user: cpb tags: manual-patches)
01:24
(#509) initial cut at writing and integrating an online manual. Putting this in a branch since it's not going to happen _too_ quickly.

*: create a =common_add_help_item()= function which takes a wiki page as an argument and ensures that a *Help* link to that page goes somewhere appropriate. Currently, "appropriate" is defined as the navigation menu.

*: ensure that every page which does something "interesting" has one of these help items.

*: add a "Help" item to the main index page.

*: start writing some content for this manual. This is going to be slow going, to say the least, but I've identified which pages need to be written and started on a few, including the main manual page, the admin page, the ticket page, and the check-in page. Others will follow... (check-in: 5de1e153b9 user: cpb tags: manual-patches)

2005-11-19
23:49
(#507) use the *setup* userid when updating Wiki pages. It makes for a saner display where the userid is displayed. (check-in: ac37064510 user: cpb tags: trunk)
2005-11-11
00:09
(#507) some wiki fixes *: [271] fixed an inverse timestamp problem in =makewikiinit.c=, but that fix never got back into =wikiinit.c= for some reason. Fixed. *: change the fonts section heading to just *Fonts*. *: add a command-line "wikiinit" option which just updates the Wiki content to whatever's currently in /cvstrac/wikiinit.c. The normal "history" behaviour will ensure that whatever content that was already in the wiki will still be available. (check-in: 671cbbbf82 user: cpb tags: trunk)
2005-11-03
21:16
(#444) add "Filenames" to the list of searchable things in the index. (check-in: 9c17eb967d user: cpb tags: trunk)
2005-10-19
16:13
(#496) fix some SQL syntax errors, plus get a combination of flags right. (check-in: f164a046a8 user: cpb tags: trunk)
13:25
(#496) show inspections in timeline(.rss). They'll show up in all the same places as checkins. (check-in: 16f5bf3491 user: cpb tags: trunk)
2005-10-18
19:08
(#463) add an "associated milestones" field to tickets. There's probably some optimizations that can be done in there, but it's functional enough. (check-in: 9c0fbbecb6 user: cpb tags: trunk)
2005-09-29
01:24
(#315) chorlya: update documentation on minimum SQLite version required. Fix some typos. (check-in: 47678c5c9a user: cpb tags: trunk)
2005-09-28
13:48
(#486) sanely handle empty versions. GitTrac doesn't really have a (fixed) concept of head, so don't try to "guess" the best filename, just disable the behaviour entirely (by linking to /rlog). (check-in: e2e2f4a173 user: cpb tags: trunk)
13:41
(#486) fix SvnTrac behaviour when an empty revision is provided. By not passing -r to _svnlook_, we always get the most recent revision. (check-in: d5ab1b4a52 user: cpb tags: trunk)
01:34
(#486) an empty version is an acceptable value. What version is actually output is, however, dependent on how the SCM-specific =dump_version()= function is implemented. Works for CVS, anyhow. (check-in: 7be1167000 user: cpb tags: trunk)
01:20
(#486) fix NULL dereference in =printable_vers()=. (check-in: 84fde02011 user: cpb tags: trunk)
2005-09-26
23:01
(#463) add support for tickets and milestone association. *: Related milestones are now shown in /tktview. Moved the actual checkin/milestone display code to a separate shared function *: expanded the text entry area in the msnew/msedit pages (check-in: bdebd30f60 user: cpb tags: trunk)
01:50
if the timeline is restricted to a prefix and that prefix is a directory, create a /dir link in the action bar. (check-in: eaa28a84cd user: cpb tags: trunk)
01:39
rather than override the normal "Timeline" behaviour, create an action bar link called "Activity" which invokes the timeline and filters on the directory. (check-in: 57886c3153 user: cpb tags: trunk)
01:38
make a copy of the string, which gets rid of a warning. (check-in: 27db60acce user: cpb tags: trunk)
2005-09-22
21:55
(#483) add a "are you sure" page to milestone deletion. (check-in: ad519777f6 user: cpb tags: trunk)
18:48
okay, delete is really picky about the arguments. (check-in: 29ca1d2629 user: cpb tags: trunk)
18:44
when adding a new milestone, you do need to figure out the cn before redirecting the user... (check-in: 2805241089 user: cpb tags: trunk)
18:33
fix the labelling when viewing milestones (i.e. use Milestone rather than Check-in) and display the _type_ of milestone. (check-in: b498e691f3 user: cpb tags: trunk)
18:22
some fixes to how milestone editting works: *: after changing a milestone, redirect to /chngview rather than /index. /index is fine for a milestone deletion, but when you make a change it's nice to be able to confirm the change. *: put Cancel and Delete items in the action bar (check-in: 49be046641 user: cpb tags: trunk)
03:20
okCheckin is too restrictive. /taghints itself uses okRead. (check-in: fe5908afdb user: cpb tags: trunk)
2005-09-21
02:03
(#476) read somewhere than git commits may not always have an "author" line. In that event, fall back to using committer. (check-in: 5cacfb1af8 user: cpb tags: trunk)
01:59
(#476) when both ndel and nins are zero, don't bother displaying them. This is a cosmetic nicety for things like GitTrac where we don't gather than information. (check-in: c4909487be user: cpb tags: trunk)
01:29
add an "RSS" action item to the /timeline view. Most people aren't even aware of the RSS feed capability since it's mostly undocumented and there's no existing link actually leading to it. (check-in: aa7bb331ff user: cpb tags: trunk)
2005-09-16
16:13
(#480) redirect rcs program output to /dev/null (check-in: 0e9b21d7f4 user: cpb tags: trunk)
2005-09-14
01:22
remove some unused variables. (check-in: 8ab9c60c40 user: cpb tags: trunk)
01:21
(#170) it's not really an error if we can't dump a binary file. (check-in: 733953c857 user: cpb tags: trunk)
01:07
(#278 and #170) replace a bunch of code with a couple common functions *: =output_pipe_as_html()= takes an input stream and a "force" flag and outputs it as HTML. If force is used or the input is plain text, it just gets wrapped with
 tags. If it's detected to be HTML, it'll be passed through unchanged. This
logic was being duplicated in a bunch of places.
*: =common_dumpfile()= handles all the permutations of getfile filtering and the
bRaw flag to implement the basic logic needed to output a particular version of a
file. SCM's just fill in the function needed in a =popen()= call to write the file
to stdout.
(check-in: bf86d5906f user: cpb tags: trunk)
00:38
(#278 #170) filter/diff tweaks *: add the %RP substitution that things like svn and git require *: unify how all three SCM's take parameters *: allow either HTML or plain text output from the file filter to make the diff behaviour. (check-in: abd3173fce user: cpb tags: trunk)
2005-09-13
21:27
(#375) remove all the image files since they're no longer referenced in the code itself. (check-in: c98767c3c0 user: cpb tags: trunk)
14:33
(#476) add a note on building GitTrac (check-in: 83e0842423 user: cpb tags: trunk)
13:59
bump version number to 1.2.0 (check-in: 245f4d1e34 user: cpb tags: trunk)
13:57
config.h doesn't get copied into build directory. (check-in: 7de85a0a7c user: cpb tags: trunk)
2005-09-12
23:56
add the output of the makemake.tcl change (check-in: 2087621d78 user: cpb tags: trunk)
23:49
make =config.h= a dependency for all the .o files (check-in: e674230baf user: cpb tags: trunk)
02:30
some cosmetic stuff *: add an alternating (grey) background to the /rlog display. This isn't much of an issue for short commit logs, but once the logs get larger it becomes quite hard to tell one commit from another. *: move some hardcoded bgcolor values into config.h. In this case, BG5=#dddddd is added for branches. (check-in: a2cbc894e8 user: cpb tags: trunk)
01:27
(#476) more git stuff

*: use INSERT's for the FILECHNG records, not REPLACE. *: need to extract the date from the committer record, not the author. Otherwise... Well, cg-update on cogito just blew the ordering all to bits. *: make sure some buffers are properly zeroed. (check-in: e24ed98434 user: cpb tags: trunk)

2005-09-11
21:15
more /dir things *: don't replace the Timeline if we're in the root directory *: do drop the Browse from the nav menu, but add a "Top" option in actions menus of the subdirectories. (check-in: 913c87c3e2 user: cpb tags: trunk)
20:46
*: make /tktundo user interface use an actual form with proper buttons rather than just links.

*: add a Cancel button to the /tktundo action bar (check-in: 33a862021a user: cpb tags: trunk)

20:32
[248] broke the behaviour where, when in the /dir page, clicking on the timeline would restrict the search to the specified directory. Restore that behaviour. Mind you, given that it's been broken for 2.5 years I'm not sure anyone really missed it... (check-in: f970772a96 user: cpb tags: trunk)
18:59
(#476) handle tagging in git

As it turns out, you can't count on just the .git/refs/heads references to build an accurate picture of the revision tree. For example, my test case {link: http://www.kernel.org/git/?p=cogito/cogito.git;a=summary cogito} seems to have commits under the tags references that don't appear in a tree from either of the heads. Not sure why this is, but the gist of it is that we need to treat tags as heads for the purposes of building a full commit tree.

This patch cleans up a lot of stuff so we can actually make that work. And it does, although importing {link: http://www.kernel.org/git/?p=cogito/cogito.git;a=summary cogito} is now around 6 minutes rather than 2.5. There's probably some SQLite optimizations that could be done there...

One interesting consequence is that tags and heads are automatically turned into milestones, which means the timeline always has, as the latest entry, a milestone for every head. Based on my understanding of git development patterns, that not entirely a Bad Thing. (check-in: 8dd6510a6b user: cpb tags: trunk)

18:52
(#476) make =common_readfile()= more, uh, common. (check-in: 0e5d73aeb1 user: cpb tags: trunk)
2005-09-10
13:54
(#476) _why_ do we need to explicitly get GIT_DIR if CVSTrac automagically does =chdir()= into the repository directory? I don't know either. (check-in: 867304bbf3 user: cpb tags: trunk)
13:12
(#444) adjust some =common_standard_menu()= calls *: toggle f=1 for /dir, /rlog, /fileview, etc search defaults *: "Browse" should be available in /dir. Particularly when we get deeper in the tree since it's the fastest way to get back to the root. (check-in: 2040d6d700 user: cpb tags: trunk)
02:06
(#476) create a =printable_vers()= function to generate briefer revision numbers for things like GitTrac where 40 char long object hashes can really trash the layout. (check-in: 73f5e2ac46 user: cpb tags: trunk)
01:40
(#278 and #476) both GitTrac and SvnTrac shared a copy of =is_file_available()=. Merge them into /cvstrac/history.c and just have CVS with it's own implementation. (check-in: b4eb08b4b8 user: cpb tags: trunk)
01:27
move the /taghints to the action bar and make it CVS-only. Also make it permissions dependent. Had to fudge the table layout a bit to fill in the resulting lack of text. #231 would be nice right now... (check-in: 472564c2b4 user: cpb tags: trunk)
01:06
(#278 #476 #357) replace the extra =patchset_chng()= method with just a flag for =diff_chng()=. This cuts down on duplication and is one less SCM entry point.

Also, don't display Patchset or Inspection if the user doesn't have the permissions to use them. (check-in: a1d1317770 user: cpb tags: trunk)

00:22
(#278) merge chorlya's 20050909 diff, with some fixes

*: log messages now variable length. This works nicely for Subversion because it actually indicates length before the message *: tree copies and deletes now handled sanely *: fixed some memory management issues in the patch *: skip =svn_did_repository_change()= check if historysize reset to zero. *: assorted other minor changes and optimizations. (check-in: 787797f694 user: cpb tags: trunk)

00:18
(#278 and #476) only CVS knows about modules. That might change later. (check-in: 555b4b2744 user: cpb tags: trunk)
2005-09-09
22:51
(#476) include =limits.h= (check-in: 1a1faabd0c user: cpb tags: trunk)
19:52
(#444) when only filename is checked, after the search all the boxes are toggled on. That's not quite right. (check-in: 4ce9c2831d user: cpb tags: trunk)
11:41
(#476) more git fixes *: hopefully fix the timestamp problems *: just store the commit id for the files. It's not as handy as the blob for dumping specific versions, but we really need the tree and since a commit is a treeish... (check-in: d34b2321e4 user: cpb tags: trunk)
02:56
(#476) missed a =pclose()= (check-in: 3453dfa9bc user: cpb tags: trunk)
02:25
(#476) first cut at a GitTrac implementation.

*: It works against a _git_ working directory, but it's not ready for production use *: file diffs aren't implemented because, oddly enough, there doesn't seem to be anything like _git-diff-blob_. Something to fix, I guess. *: documentation to follow. To try it out:

make APPNAME=gittrac ./gittrac init </path/to/working/directory> <project> ./gittrac server 8008 </path/to/working/directory> <project> login as setup/setup, change repository to /path/to/working/directory go to timeline
(check-in: 47460307a5 user: cpb tags: trunk)
01:07
(#474) we need the transition offered by the 1.8 schema stuff or an attempt to create a _new_ SvnTrac setup is going to fail. (check-in: 78d6f1061a user: cpb tags: trunk)
2005-09-06
13:24
(#474) *: minor bug in ordering of records. Most users wouldn't see this unless multiple commits to a single file showed up with the same cn. You don't even _want_ to know how I manage that.

*: break out of the search loop sooner. That knocks about 15% off the schema upgrade time with my setup (50000 filechng records, many branches, manual changes to revision numbers). (check-in: 53ab03fc06 user: cpb tags: trunk)

11:26
(#460) we don't need _svnlastupdate_ in CVS... (check-in: 9dc4fbe904 user: cpb tags: trunk)
02:26
(#460) need to update _svnlastupdate_ when nothing's changed, too. (check-in: 60da2ae744 user: cpb tags: trunk)
02:20
*: (#474) we only need to set the schema once *: (#460) things work better when it's not always zero (check-in: 4ffd51034b user: cpb tags: trunk)
00:57
(#459) only display the CVSROOT/ change notes in /useredit if we're actually configured to read/write to CVSROOT/*. (check-in: 1d007af8db user: cpb tags: trunk)
00:51
(#459) try to make the /useredit page make a bit more sense in Subversion. It doesn't quite work unless we can properly fix #448. (check-in: a2940e6bb7 user: cpb tags: trunk)
00:35
update copyright date (check-in: bf57fde530 user: cpb tags: trunk)
00:04
(#459) make various CVS specific documentation more generic

*: add a =g.zSCMName= field to the global structure and initialize it to the human-readable name of the SCM. i.e. "CVS" or "Subversion". *: adjust various pages (except, notably, the user/passwd stuff) to be less CVS-specific or to have non-CVS options, depending on what's appropriate. This includes outputting %s(g.zSCMName) and using less specific terms (i.e. "repository" rather than "CVSROOT/history file"). (check-in: a3f0967227 user: cpb tags: trunk)

2005-09-05
18:25
(#474) _now_ we can use FILECHNG.prevvers directly in queries. (check-in: d76ec6d12c user: cpb tags: trunk)
18:03
(#474) fix the CVS prevvers/chngtype performance problem. In a nutshell, the prevvers/chngtype calculation needs to be a glorified table copy. That makes the whole thing about 100x faster. This introduces a 1.9 schema version, but removes the whole 1.8 thing since it ends up basically being a NOP. Care is taken to not break existing 1.8 schemas. (check-in: 093061844a user: cpb tags: trunk)
2005-09-04
02:35
(#278) can't use CHNG.prevvers directly in CVS because we don't actually build the entire history until _previous_version()_ is called. (check-in: 07d4f645a4 user: cpb tags: trunk)
02:23
(#473) document available *.mk files. (#278) describe how to build Subversion support (check-in: 0855b1026f user: cpb tags: trunk)
02:20
(#473) add a BSB makefile template (check-in: 8e23b7d80c user: cpb tags: trunk)
02:19
(#473) fix a variety of C++isms introduced by the captcha and svn stuff. (check-in: 3d3e046d7c user: cpb tags: trunk)
2005-09-03
13:49
(#318) move show/omit milestones into the action menubar. (check-in: 2a96f6deb8 user: cpb tags: trunk)
2005-08-31
01:05
reclassify "Directory" as an action rather than navigation item since it's relative to the currently viewed page. (check-in: 2728efa4ba user: cpb tags: trunk)
00:49
(#278) make the added/removed messages relative to version numbers so they make a little more sense. (check-in: a6c80733ef user: cpb tags: trunk)
00:37
(#468) do a VACUUM after a schema update or a repository reread/reconstruct. (check-in: 01aaafbb78 user: cpb tags: trunk)
00:30
(#278) use FILECHNG.chngtype to generate labels *: we were treating any 1.1 version as a new file. This obviously only works for CVS *: flag added and removed files appropriately and always mention the file version. (check-in: d10d78d076 user: cpb tags: trunk)
2005-08-29
14:40
(#455) changed remarks and description are now run through diff. *: Moved the wiki diff logic to a =diff_strings()= function. Allow a caller defined context. This would be a good candidate for a section in /setup_diff *: handle changed remarks and description by running them through =diff_strings()=

Note that because the ticket history has moved to a separate /tkthistory page (#378) the diff only runs when people actually explicitly want to see histories. But even without that, the decrease in ticket history sizes would still be a win since CPU time is usually cheaper than bandwidth. (check-in: 423c0f6d9f user: cpb tags: trunk)

00:43
(#170) that was supposed to be a comment. (check-in: 4e942a6e81 user: cpb tags: trunk)
2005-08-28
22:40
(#460) handle both fsfs and bdb database backends. Note that it's not the end of the world if both of these fails, it's just a shortcut. (check-in: 21dc66285d user: cpb tags: trunk)
22:16
(#170) always nice if you can actually _delete_ the filter... (check-in: f3a8a6bcfc user: cpb tags: trunk)
22:03
(#466) checking the path works better if you have a root. (check-in: 478907e0bb user: cpb tags: trunk)
21:59
(#170) add support for "pretty printing" files in HTML. This basically means the /fileview page. /getfile is and always will be raw.

*: define a =get_filefilter()= to setup a pipeline for optional filtering. This handles the filename and version substitutions. *: change =*_dump_version()= to use a filter if available. *: add a setup for the filter to /setup_diff. In the process, update it to make sense for SvnTrac (#459). (check-in: 62a8b886dd user: cpb tags: trunk)

20:26
(#466) don't pass the built-up query string directly. Use a "%s" formatter instead. (check-in: c8fe56178d user: cpb tags: trunk)
20:05
(#460) tweak things a bit in case svnlook runs fast enough and ensure that we do an svnlook every hour or so. (check-in: 488ea1b507 user: cpb tags: trunk)
19:07
(#170) add basic support for dumping files in some "markup" format. Right now, this means straight HTML
 tags.

*: add a "raw" flag to =dump_version()= so we can still use it for regular /getfile retrieval. *: change =cvs_dump_version()= and =svn_dump_version()= to try to do something useful with the flag. This is where a filter would be used. *: add a /fileview URL as the default browse file display. It has, of course, the option to display the "raw" bits. A useful side effect is that file display is faster in Konqueror and other browsers which handle HTML better than straight "text/plain". *: /fileview will inline known image formats into the page. *: /getfile still works as expected.

(check-in: 390c1c2364 user: cpb tags: trunk)
15:26
(#462) only offer patchsets for checkins (chng.type==0). (check-in: dda1d871b0 user: cpb tags: trunk)
15:08
(#458) run =g.zExtra= through =dehttpize()= after we extract it. This is done automagically for CGI parameters, but some things will look at =g.zExtra= too. (check-in: c8d08e6829 user: cpb tags: trunk)
14:49
(#460) avoid excess _svnlook_ calls by checking file modification times in the repository directory. This is a bit hackish and not reliable (the files are all touched even with read-only operations), but definitely smoothes things out. (check-in: 95fda74d63 user: cpb tags: trunk)
02:00
(#394) be smarter about updating ticket/chng cross references when a chng message gets editted. Not only do we need to add xref entries, we also need to remove them. Note that this will remove any _manually_ created associations. (check-in: baa06c5e85 user: cpb tags: trunk)
01:31
(#278) merge =svntrac-patches= into HEAD. This change includes: *: Subversion support via =svn.c= *: upgrades the database schema to 1.8 *: an assortment of little fixes and tweaks to make all of the above actually work (check-in: 7eb1ce4dbb user: cpb tags: trunk)
00:54
(#278) "svnlook" assumes that $CWD is the repository. Which means that because CVSTrac first does a chdir() into the repository directory (as given by the command line), the first login by "setup" will cause a repository import. It's usually a good idea if the admin has a chance to set things up first... (Leaf check-in: c0a6147f5c user: cpb tags: svntrac-patches)
2005-08-27
22:11
(#445) when encountering the results of "svn copy", use "svnlook tree" to fill out the file hierarchy. "svnlook changed" will show the top of the tree and anything in the copy that's not "original", but it won't actually provide a list of copied files. This does mean that any directory add results in a slower code path. (check-in: 30755238a6 user: cpb tags: svntrac-patches)
14:49
(#278) remove a =free()= call on a NULL pointer. (check-in: 8d0eea5100 user: cpb tags: svntrac-patches)
2005-08-26
00:57
(#457) more markup substitution changes:

*: add %u (user) and %c (capabilities) substitutions *: alter how the markup substitution function works to make it much easier (i.e. two lines) to add new substitutions. (check-in: 49da6cee57 user: cpb tags: trunk)

2005-08-25
18:08
(#454) include "derived from" in the /tktnew field list. (check-in: addf2fdfa2 user: cpb tags: trunk)
18:04
(#456) Delete button was taking us to /tktview rather than /tktedit. (check-in: 5bd377a405 user: cpb tags: trunk)
2005-08-23
22:44
(#202) don't accept empty user ids (check-in: 294eb3843d user: cpb tags: trunk)
22:32
(#184) move =cgi.h= include to the bottom like most of the others. (check-in: 9fe3fb4dbd user: cpb tags: trunk)
20:59
(#444) add the ability to search for filenames. We don't search file _contents_, although that _could_ be eventually be enabled on an SCM with a particularly efficient content searching mechanism... or an SCM hosted on a system with efficient file-based searching (Spotlight?) (check-in: dcd1bd62da user: cpb tags: trunk)
2005-08-19
17:55
(#447) should do a =ticket_notify()= when remarks are appended. (check-in: d56738cb48 user: cpb tags: trunk)
17:50
(#448) add support for handling Subversion user files. Also fixed some tabdamage. (check-in: 8e48c02f5d user: cpb tags: svntrac-patches)
2005-08-15
00:43
(#446) change _insert_file()_ to correctly handle being given /-terminated directory names. (check-in: 373f829aaf user: cpb tags: svntrac-patches)
2005-08-14
02:11
(#419) automatically turn pathnames to repository files (i.e. /cvstrac/format.c) into rlog links. (check-in: e60a74f5d1 user: cpb tags: trunk)
00:14
(#278) last cut at the schema 1.8 upgrade thing. There doesn't appear to be a reasonable way to get performance on 50000 _filechng_ records to be acceptable, so just do the 1.8 upgrade and then do the _prevvers_ and _chngtype_ determination on demand, when _previous_version()_ or _is_dead_revision()_ are called. There are only called infrequently and usually on just a handful of files, so performance should be fine and eventually _filechng_ will be populated, at least for the popular files. (check-in: 19577998f6 user: cpb tags: svntrac-patches)
2005-08-13
22:15
(#441) ensure the diff buffer is NUL terminated. (check-in: 508314e405 user: cpb tags: svntrac-patches)
2005-08-12
23:39
(#440) report deletion doesn't work without the "del" CGI parameter. Looks like that used to be provided for free when deletion was trigger through a form submission. (check-in: d18db092d9 user: cpb tags: trunk)
16:04
(#278) fix the ordering, change the schema init to make testing easier. 50000 _filechng_ updates still takes a while, but it's a lot faster _and_ it appears to be complete. (check-in: 2e515464aa user: cpb tags: svntrac-patches)
16:03
(#278) move the schema stuff into a separate =check_schema()= function and have the "update" server command call it. This allows for somewhat less painful updates. (check-in: 01f4a0f592 user: cpb tags: svntrac-patches)
16:01
(#278) sanely handle "broken" version numbers (without periods). (check-in: ee65b02896 user: cpb tags: svntrac-patches)
01:02
(#278) try to get some better performance from the schema v1.8 update algorithm. 15-20 minutes to churn through 48000 _filechng_ entries seems a bit too much... (check-in: 9c5e27150e user: cpb tags: svntrac-patches)
2005-08-11
02:07
(#278) clean up a bunch of database queries. Use _db_short_query()_ in more places and actually free some results and stuff. This appears to speed up the 1.8 schema update considerably. (check-in: 28fddf823c user: cpb tags: svntrac-patches)
01:47
(#278) don't need a svntrac target. Just go
make all APPNAME='svntrac'
(check-in: 7697fb9c05 user: cpb tags: svntrac-patches)
01:43
(#278) Subversion update (check-in: f933715cc9 user: cpb tags: svntrac-patches)
01:37
(#278) quote version in _previous_history()_ query. (check-in: c245b2a3d6 user: cpb tags: svntrac-patches)
01:36
(#278) quote revision in query (check-in: ed999f3928 user: cpb tags: svntrac-patches)
01:36
(#278) don't do prevvers chaining for anything other than CVS. Also quote revision. (check-in: 977fa08117 user: cpb tags: svntrac-patches)
01:32
(#437) fix a couple SQL statements where we're not quoting what we get from CGI parameters. The one in wiki.c requires admin privs while the one in timeline.c should require admin privs (the submit button only shows for admins), but only checks for write perms when processing the form. (check-in: 76e74eb9ee user: cpb tags: trunk)
01:30
(#437) fix a couple SQL statements where we're not quoting what we get from CGI parameters. The one in _wiki.c_ requires admin privs while the one in _timeline.c_ _should_ require admin privs (the submit button only shows for admins), but only checks for write perms when processing the form. (check-in: aa28796170 user: cpb tags: svntrac-patches)
01:00
(#278) comments to clarify what happens when _cvs_previous_version()_ fails to work because <cough> someone messed with CVS revision numbers. In a nutshell, it breaks diffing but is otherwise currently benign. That may change if we make heavier use of the _prevvers_ chaining and the _chngtype_ "add" value. (check-in: 3ce0522d51 user: cpb tags: svntrac-patches)
00:58
(#278) _is_dead_revision()_ only needs the database so it doesn't need to be buried in _cvs.c_. (check-in: b8f0f1d459 user: cpb tags: svntrac-patches)
2005-08-10
11:31
(#278) note to self. This works as long as people don't mess with CVS revision numbers, but woe to those like myself... (check-in: c951065ff8 user: cpb tags: svntrac-patches)
03:27
(#278) need to set _chngtype_ and _prevvers_ during _cvs_update_history()_ too. This isn't as nice as I'd like, but it seems to work okay. (check-in: 2f462d5a92 user: cpb tags: svntrac-patches)
03:03
(#278) with _prevvers_ in the _filechng_ table, we don't actually _need_ SCM-specific versions of _previous_version()_. (check-in: d2cc98ccd6 user: cpb tags: svntrac-patches)
02:40
(#278) _is_dead_revision()_ is much, much less horrible when you don't need to run external programs... (check-in: f9fa98ae15 user: cpb tags: svntrac-patches)
02:35
(#278) changes to the _filechng_ table. *WARNING* this is hairy stuff.

*: This updates the schema to 1.8, adding the _prevvers_ and _chngtype_ fields to the _filechng_ table.

*: change _cvs_previous_version()_ to check the _prevvers_ field rather than just making assumptions about things. This is _much_ nicer.

*: the hairy part is found in _db.c_ in the _db_upgrade_schema_8()_ function. In a nutshell, we want to take what we know about the old _filechng_ tables and populate the _prevvers_ and _chngtype_ fields. *Be warned* that I haven't tested this on a repository with weird version number increments. (check-in: 76a751e4c1 user: cpb tags: svntrac-patches)

2005-08-09
23:04
(#278) add core Subversion support *: s/diff_chng/patchset_chng/ *: _diff_chng()_ now defined to dump a HTML-ized diff *: _svn.c_ now fleshed out with something which supposedly works ;) (check-in: bf1a8917e1 user: cpb tags: svntrac-patches)
22:42
(#278) Make sure we always have '/' in zFile, otherwise link to parent directory won't work for file in repository root. (check-in: 34a66f52c7 user: cpb tags: svntrac-patches)
2005-08-08
23:38
(#433) put an "Append Remarks" link at the bottom of the remarks section as well. (check-in: 57006a5009 user: cpb tags: trunk)
23:31
(#278, #357) add a _chng_diff()_ function and enable the */patchset* page. I'm using the term *Patchset* because *Diff* in CvsTrac always seems to imply an HTML page, not a raw diff. That might not be the best choice of words...

The CVS version still hasn't been as well tested as I'd like. The patch _looks_ good, but how it applies is a different story. (check-in: a364e9365b user: cpb tags: svntrac-patches)

17:17
(#278) oops... that built at home. Weird. (check-in: 18e497af18 user: cpb tags: svntrac-patches)
02:18
(#278) _svn_ needs a filename for the previous version and, quite frankly, _cvs_ _should_ be using one as well because right now, there's a major problem if someone goes manually mucking with version numbers (via "cvs commit -r <n>", for example) since _cvs_previous_version()_ doesn't even check the file history... (check-in: 8586d8ce7c user: cpb tags: svntrac-patches)
01:39
(#278) add skeleton for Subversion support. Currently doesn't do anything, of course. Update makefile so it should just be a matter of
make svntrac
(check-in: b0e5372e3e user: cpb tags: svntrac-patches)
01:28
(#278) add support for dynamic SCM detection from the executable name. In a nutshell, we look for _<blah>trac_ in =argv[0]= and set the =zSCM= variable in the =Global= structure to _<blah>_. Modified a few places to actually check the =g.zSCM= value before blindly doing something CVS-like. (check-in: a23c45a22b user: cpb tags: svntrac-patches)
00:59
(#278) move all the CVS-specific code into =cvs.c= except the user import stuff.

*Note* that this is all in the _svntrac-patches_ branch.

*: a set of common function calls goes in =history.c= which can be dispatched to whatever SCM subsystem is approriate. *: anything that deals directory with the CVS repository (including the =history= file and the genuine ,v files is abstracted behind this API. Nothing else sees files, just filenames in the database. *: added some additional error handling so the content side of things can gracefully handles failures in the repository access code. *: moved =xref_checkin_comment= to =db.c= (check-in: 570734ddde user: cpb tags: svntrac-patches)

2005-08-07
23:39
(#278) s/history_update/cvs_history_update/ (check-in: 5edce4b049 user: cpb tags: trunk)
23:38
(#278) update =main.mk= and =makemake.tcl= for =cvs.c= (check-in: 5e67ce5a5b user: cpb tags: trunk)
23:36
(#278) keep history.c, actually. That's where the "SCM dispatch" logic can go. (check-in: f997d40d7d user: cpb tags: trunk)
23:23
(#278) rename =history.c= to =cvs.c=. We'll push more of the CVS-specific stuff into there. (check-in: 3d7e3566c8 user: cpb tags: trunk)
2005-06-17
00:18
(#424) remove trailing whitespace on all lines in =remove_blank_lines=. (check-in: 9ef98855e1 user: cpb tags: trunk)
2005-06-16
23:56
(#425) path parsing eats the leading / characters so don't look for one when checking for robots.txt. (check-in: 464925e468 user: cpb tags: trunk)
2005-05-19
01:17
(#418) do better bounds checking in =output_restricted_html=. The preparatory scan before isAllowed wasn't checking the indices and while this isn't a problem (i.e. I can't prove there's a vulnerability) with current use patterns, it could become a problem down the road. (check-in: 7c2f8e3687 user: cpb tags: trunk)
2005-05-17
22:03
(#421) add support for a "checkin_time_window" config option. By default, we'll stick with 30 seconds, but obviously it can be increased for a particular project. _Most_ CVSTrac users aren't going to hit the number of locking conflicts that I get. (check-in: 2fc200ba07 user: cpb tags: trunk)
01:43
(#418) handle the empty "html" tag faster. An =isAllowed= call with an empty string happens with things like "a <= b", for example. (check-in: 1810e4064a user: cpb tags: trunk)
2005-05-16
23:46
(#420) make tktnew and tktedit enforce the 70 character title limit using _maxlength_ as well as _size_. (check-in: ddfd507c3d user: cpb tags: trunk)
2005-05-15
01:03
(#417) I'm thinking that fixing #418 will involve a smarter HTML scrubber. The line-by-line filtering that I was doing won't cut it... a proper HTML filter needs to look at the entire filtered block, not discrete lines. Hence we use =common_readfp()= to pull in the full output from the block and then we run it through =output_restricted_html()=. (check-in: ab3df0015e user: cpb tags: trunk)
01:01
(#417) be a _little_ clearer about how we make room for the terminating NUL. (check-in: c4cbe89274 user: cpb tags: trunk)
00:58
(#417) define a =common_readfp()= function to read from a file descriptor into a chunk of memory. (check-in: 8b1802a5a7 user: cpb tags: trunk)
2005-05-13
23:56
(#417) the HTML generated by custom markups needs to be sanitized like all other HTML which CVSTrac generates. Remove the
tag stuff from =output_restricted_html()= (it's only needed in <HTML> sections) and use it to filter any HTML coming from a custom markup.
(check-in: 14aa0e3846 user: cpb tags: trunk)
2005-05-12
03:26
(#417) export =write_to_temp= function. (check-in: e067500bd4 user: cpb tags: trunk)
03:26
(#417) implement custom blocks.

*: a block is a markup which handles all contents in between {quote:{markup}} and {quote:{endmarkup}}. Only one definition is needed. The contents of the block are in the %b substitution.

*: terminology change. Straight markups are called "Markups" or "Program Markups". Blocks are called "Blocks" or "Program Blocks". The latter is basically just an external filter.

*: Created a pipe_block() function to handle the filtering stuff. It also includes the previous external program functionality. Some of the guts were stolen from the path in #353 at http://the.taoofmac.com/cgi-bin/cvs/chngview?cn=86 (check-in: 686ac5053f user: cpb tags: trunk)

01:48
(#416) fix ticket parsing in xref_checkin_comment():

*: export ndigit() and is_eow() functions from format.c *: make xref_checkin_comment() use them (check-in: f5e0052566 user: cpb tags: trunk)

2005-05-11
03:15
(#415) add { and } nesting to the =is_markup()= function. This is simple enough, in that we increment the nest count at each { and decrement at }. When we reach nest==0, we can bail.

This obviously doesn't handle the case where someone wants to have unbalanced {'s or }'s in a markup. In that case, using the HTML character entities { and } (wrapped in <HTM L> and </HT ML> markup) should work. (check-in: 34e2d62fe6 user: cpb tags: trunk)

2005-05-09
02:16
(#414) identify external links with icons. Basically, it looks something like: *: <html>¤ http://www.sqlite.org *: <html>¤ Some other page (check-in: 54dd65fc19 user: cpb tags: trunk)
2005-05-02
01:31
(#408) oops. Besides being completely reserved logic, that's not how you check if zMsg is "empty". (check-in: 7053af8064 user: cpb tags: trunk)
2005-05-01
23:56
(#408) there's no point including links backs to pages that the user doesn't have the credentials to actually look at. (check-in: 5a6f8b28da user: cpb tags: trunk)
2005-04-28
20:29
(#411) check the xref table for an existing entry before adding another. This eliminates duplication in ticket and chng lists. (check-in: f55db9dd3a user: cpb tags: trunk)
2005-04-23
00:26
(#408) put a limit (if a large one) on wiki page sizes in the output. There doesn't seem to be limits to wiki page name sizes elsewhere, so it seems possible for someone to create a page name large enough to blow a buffer. (check-in: bd0c94c243 user: cpb tags: trunk)
00:20
(#408) RSS items (including the header) now define links back to the relevant items. i.e. A ticket change to /tktview, a check-in to /chngview. This requires some magic to calculate absolute URLs and may not work in all configurations (where hostname information doesn't make it down to CVSTrac, for example). Most such web servers would be considered broken, so no big worry. (check-in: 69c2b4d3a6 user: cpb tags: trunk)
2005-04-19
22:21
(#404) ensure that redirections are applied to the document root by stripping off whatever is in g.zExtra. (check-in: fc625e869b user: cpb tags: trunk)
21:52
(#406) when getting the markup list from the database, get it ordered. (check-in: 9ae4bb02c1 user: cpb tags: trunk)
01:22
(#405) document additional substitutions and what environment variables are available to program formatters. (check-in: 3f2477767f user: cpb tags: trunk)
01:21
(#405) add %x and %r markup substitutions

*: %x is useful to implement markups where the arguments provide "optional" descriptions. For example, {quote:{getfile: filename} would produce a link like {link: filename filename} while {quote:{getfile: filename description}} would produce something like {link: filename description} using one formatter, {quote: %x}.

*: %r is useful for program formatters which need to know where to find the sqlite database (along with the %n substitution, of course). (check-in: 0d9ec65118 user: cpb tags: trunk)

2005-04-18
02:22
(#404) prevent cgi_redirect from cycling. This just blocks redirections when the url is the same as the current page (comparing only up to ? and/or #). If they are the same, it generates a 500 error code with the following message:
Cyclic redirection in /wiki/test/login?nxp=/wiki/test/login%3Fnxp%3D/wiki/test/test

Or whatever the URL is. This handily blocks all the various unauthenticated user login cycles as well as the getfile/blah/blah/blah.c cycle. There might be a more elegant solution, but I can't think of it. (check-in: 4e3e21d60d user: cpb tags: trunk)

01:08
(#301) add a page for managing custom wiki markups. (check-in: 9eee0111e6 user: cpb tags: trunk)
01:07
(#301) add a {quote: {markups}} to the end of FormattingWikiPages. (check-in: be873fdaf6 user: cpb tags: trunk)
01:06
(#301) implement custom markup rules. This involves the following:

*: add a special {quote: {markups}} markup which outputs the descriptions for the available list of custom rules. This sort of thing is useful for FormattingWikiPages where we need to be able to list the server-specific rules.

*: in order to do custom markups we need to do argument substitutions. markup_substitution is a function which takes a custom markup format, does the argument substitution, and feeds back the string for further processing.

*: in the case of "internal" rules, that just means the substituted string is dumped into the output. This allows for simple markups like, say, {quote: {sqlitetkt 56}} which would be written as {quote: #%k}.

*: in the case of "program" rules, we run an external script with the arguments on the command line. This is somewhat similar to the ticket notification and custom diff programs.

*: finally, the append_formatting_hints() function gets some logic to list the custom rules. (check-in: e6b1053812 user: cpb tags: trunk)

00:59
(#301) activate 1.7 schema change (check-in: c00beee88f user: cpb tags: trunk)
00:59
(#301) v1.7 schema change which adds a new table, markup. markup is used to define custom {quote: {markup: key args}} rules anywhere wiki editting is allowed. (check-in: 65ae924d30 user: cpb tags: trunk)
2005-04-10
03:02
(#390) show the directory (with a browse like) for a milestone if it's available. (check-in: 5a8337d8f7 user: cpb tags: trunk)
03:01
(#390) when converting tags to milestones, track the directory too. =cvs rtag= is a directory-specific operator.

This does introduce a problem... When we get a new tag, we want to delete any older versions of that tag. However, existing databases won't have the directory to search on so we end up deleting any global instances of the tag. This maintains the semantics of the older database, but it's a bit annoying. Newer milestones, of course, will only be deleted if the directory matches too. (check-in: b5d5927499 user: cpb tags: trunk)

02:32
(#398) be pickier about when and where we look at RCS lines

*: "revision" should be ignored when we've already got a valid revision. *: "date:" should be ignored when we've already got a time (you could also check zUser, among other things). (check-in: a037e14dde user: cpb tags: trunk)

01:43
(#380) schema change 1.6 adds a description field for attachments. This checkin adds a field for entering the description and displays the contents (wiki formatted) when viewing an attachment list. (check-in: 1529a5177f user: cpb tags: trunk)
2005-04-09
01:02
(#401) update the throttler/honeypot documentation. *: add notes about captcha *: the honeypot link isn't actually hidden (check-in: b03d49895c user: cpb tags: trunk)
2005-04-08
02:24
(#401) added a needCaptcha flag to the throttle call which will push the client right to captcha even if they're below the throttle limit. This ensures that only humans are hitting certain pages like the wiki edit, ticket creation, etc. (check-in: d987a798f1 user: cpb tags: trunk)
02:22
(#401) integrate a captcha page into the throttle logic

*: when a client exceeds the throttle limit, they're punted to a captcha page. If they get punted to the page more than CAPTCHA_LOCKOUT times, the normal throttle blocking kicks in.

*: a client can hit the /captcha page as many times as they want. This might be a problem, but we don't penalize human users who might generate a lot of hits.

*: Once the user gets passed the captcha page, they get a cookie which disables the throttle behaviour. A logged-in user is also immune. (check-in: e73fc99f96 user: cpb tags: trunk)

02:18
(#401) database schema upgrade 1.6

*: add a captcha counter to the access_load table. This is necessary since we can't count on the client to keep state in a form or URL.

*: (for #390) add a directory field to the chng table. This is necessary to differentiate between rtags in different modules

*: (for #380) add a description field to the attachment table (check-in: bce7e39a77 user: cpb tags: trunk)

2005-04-07
22:19
fix comment. the new schema version is 1.5. (check-in: f76df7330f user: cpb tags: trunk)
2005-04-05
01:05
(#392) Mozilla and Firefox are quite sensitive to newlines in link titles. Make sure there aren't any. This basically just means we _must_ use =cgi_printf()= rather than =@= formatting. (check-in: cb751bc04c user: cpb tags: trunk)
2005-04-04
01:50
(#392) break ticket and checkin link titles into two separate options and add separate setup toggles for anonymous and logged in users. This is necessary because:

*: link titles mean larger timeline HTML. On my test box, larger seems to range anywhere from 10% to 30%.

*: link titles mean a db lookup for every generated link. Again, non-trivial numbers on an active timeline.

*: check-in link titles are nowhere near as useful as ticket link titles since most places that show ticket links (timeline, tktview, tkthistory) also contain considerable check-in context. Specifically the same thing as in the link title. Wouldn't be a bad idea to add check-in summary info (i.e. some metric indicating the size or number of files). Of course, this would be less useful to anon users, so you'd probably only want to enable it for logged in users.

Also, the setup_interface page looks much more useful with more options... (check-in: 213e5aca28 user: cpb tags: trunk)

2005-04-03
02:59
(#395) create the [Up] link when the directory is non-empty since the toplevel directories don't have slash in them. (check-in: 088a4f7346 user: cpb tags: trunk)
02:25
(#241) break the standard menu header into navigation and action sections.

navigation is defined as links that take you to somewhere unrelated to the current page. Actions apply, somehow, to the current page.

*: common_standard_menu is defined to be navigation items only since there's no "default" action. *: rename common_replace_menu_item to common_replace_nav_item. We don't need a corresponding call for actions since there's no defaults to replace. *: rename common_add_menu_item to common_add_nav_item. This call changes the azLink/nLink variables. *: create a new common_add_action_item which handles the azAction/nAction variables. *: modify common_vlink_header to create a separate row with BG4 background for the action items. *: change everywhere that calls any of the common_add/common_replace calls to either a navigation or action item. I _think_ I got them all correct. *: change the "Add a new inspection..." link to be an action item. (check-in: c1c4d08724 user: cpb tags: trunk)

01:43
(#377) implement =fixed font= markup. This is really just cut and pasted from how the italic stuff is done. (check-in: b312b7f10b user: cpb tags: trunk)
00:56
(#375) call common_icon() rather than generating <img src= tags. (check-in: e6eb4b4e13 user: cpb tags: trunk)
00:55
(#375) add a common_icon() function. This version spits out HTML 4 character entities that are as similar as possible to the .gif icons already in use. There's nothing sacred about the particular set of entities chosen, they just happen to work on all the browsers I've tested with. And if the choices aren't entirely good, things only need to change in one place. (check-in: cff238b514 user: cpb tags: trunk)
2005-04-02
23:13
(#374) actually, back out [347]. We have to assume that the caller is giving us a properly formatted url or there's a good chance that we'll end up trashing it. (check-in: d3c7d3203b user: cpb tags: trunk)
23:02
(#374) that should be %h, not %s. (check-in: ff0ca4db76 user: cpb tags: trunk)
22:25
(#392) tighten up output_ticket and output_chng to *: get rid of static buffers *: use %h rather than %s where necessary (check-in: f21f134be5 user: cpb tags: trunk)
22:12
(#387) move ticket history to a separate page

*: remove the ticket_change_history() function *: in the /tktview page, add a History link to /tkthistory *: implement the /tkthistory page, a combined chronological view of all ticket changes, related checkins, attachments, inspections, derivations, and whatever else we can think of (check-in: 069349d92b user: cpb tags: trunk)

20:30
(#392) create a /setup_interface page to handle user interface items like the infolink stuff. Currently, only the infolink toggle is on the page. (check-in: e42eaf19fe user: cpb tags: trunk)
18:45
(#392) modify output_ticket and output_chng to check the g.okInfoLink flag. If it's off, we skip the database query. This means the overstrike behaviour from #52 is off and the link titles in #392 aren't written out. This reduces the number of database queries and the size of the output (link titles aren't always small). (check-in: 905361236d user: cpb tags: trunk)
18:43
(#392) initialize the g.okInfoLink flag at the beginning of common_vlink_header (i.e. before any HTML formatting happens, right?).

The rule is: *: logged in users always have g.okInfoLink=1. *: anon users get the config option infolink *: if the infolink flag isn't in the database, anon users have g.okInfoLink=0. (check-in: 07c0523342 user: cpb tags: trunk)

18:40
(#392) add an okInfoLink flag to the Global structure. This controls the "extended" information that can go into a ticket or chng link (output_ticket and output_chng). (check-in: f9349382d0 user: cpb tags: trunk)
17:09
directory .vimrc for getting the CVSTrac indentation right (check-in: 860fb24eb4 user: cpb tags: trunk)
12:53
Make sure search strings are quoted to avoid SQL injection. (check-in: cee5b98db0 user: drh tags: trunk)
04:57
(#392) implement link titles for tickets and checkins *: create an output_ticket() function to handle ticket magic. Besides doing the link title, this does the overstrike logic from #52. *: create an output_chng() function to handle checkin/milestone titles. *: change formatting and browsing output to call these functions instead of rolling out a custom /tktview. (check-in: 7a33ecd30a user: cpb tags: trunk)
04:04
(#374) wiki pages are formatted such that the page title is a link to a self search. (check-in: fe79e7a7aa user: cpb tags: trunk)
04:03
(#374) common_header needs to be able to create page links *: create a common_vlink_header() function that takes the (optional) url, the title, and a va_list. *: change common_header to call this with a NULL url *: create a common_link_header function that adds a url (check-in: 02a7f02a85 user: cpb tags: trunk)
03:09
(#52) write inactive tickets with <html>overstrike</html>. Currently, inactive means new or active. Maybe review should be counted too? (check-in: 3afc391dbf user: cpb tags: trunk)
03:07
(#384) a tab got past me... (check-in: 00771328aa user: cpb tags: trunk)
03:05
(#52) rather than doing a custom format referencing /tktview for a ticket number, format the ticket number as #<n> and call output_formatted(). (check-in: 214bb91fd8 user: cpb tags: trunk)
02:35
(#384) add a section to {link: /cvstrac/tktview?tn=384,0 /tktview} to display a list of derived tickets. Nothing is shown if there aren't any so this won't affect people who don't use them. (check-in: d3787c4977 user: cpb tags: trunk)
02:17
(#372) make the Derived From value a link to a ticket. *: add a _numeric_ flag to the parameter attribute list *: flag _derivedfrom_ and _severity_ as numeric. _priority_ seems like it would be a good candidate, but the database schema labels it as "text". *: format and output _derivedfrom_ field as a ticket link. The _extract_integer()_ call may seem gratuitous, but when I first started looking at this I noticed that if you put "#<n>" into the Derived Ticket field, it actually got stored that way. So who knows what might be in people's databases. (check-in: c98dc4c34b user: cpb tags: trunk)
02:08
(#372) add extract_integer() function. This pulls an integral value from a string. Intended for derivedticket field where someone might enter either "1" or "#1" and expect either to Just Plain Work. (check-in: 79def2657a user: cpb tags: trunk)
01:45
put non-zero default options into hidden fields. Ticket #381. (check-in: e329459c66 user: cpb tags: trunk)
01:38
enable SO_REUSEADDR on the listen socket (Ticket #387). (check-in: 8cfc7b3702 user: cpb tags: trunk)
01:32
don't call sqlite_mprintf with an null/empty string. Ticket #388. (check-in: ff8794c17c user: cpb tags: trunk)
2005-03-16
22:17
Changes so that it will compile on AIX. Ticket #383. (check-in: 36fb78f0e4 user: drh tags: trunk)
2005-02-16
02:58
Add the ability to delete lots of wiki spam with a single delete operation. (check-in: 4a0bc5aa8e user: drh tags: trunk)
2004-12-19
12:56
Fix the publish.sh script so that does not put every source file into the source archive twice. Ticket #362. (check-in: 55ed046fd4 user: drh tags: trunk)
2004-12-17
14:51
Update the publish.sh script. (check-in: d594aae463 user: drh tags: trunk)
14:43
Fix another potential XSS vulnerability. Bump the version number in preparation for a new release. (check-in: ec49533250 user: drh tags: trunk)
14:19
Fix for XSS vulnerability in CVSTrac. (check-in: 84500f0caf user: drh tags: trunk)
2004-08-18
00:11
Add additional checks of user-supplied parameters in order to help prevent future vulnerabilities similar to ticket #339. (check-in: 172ff153cd user: drh tags: trunk)
2004-08-06
16:23
Update the version number (check-in: d9a06c8c35 user: drh tags: trunk)
16:00
Fix for security vulnerability reported by BUGTRAC. (check-in: c11038cd45 user: drh tags: trunk)
2004-04-19
17:51
Provide the ability to choose a default priority and severity for new tickets. (check-in: 7de56d0cb3 user: drh tags: trunk)
2004-04-09
12:13
Make sure the sdate() function works with a NULL argument. (check-in: 186abd7776 user: drh tags: trunk)
2004-03-19
14:28
Comment change to view.c. (check-in: 63fd48e0c1 user: drh tags: trunk)
14:23
Rework the database field filter for reports to use the new authentication mechanism of SQLite. (check-in: 65937f4ff4 user: drh tags: trunk)
2004-03-13
14:17
Bump the version number to 1.1.3 (check-in: b7932f92bf user: drh tags: trunk)
2004-02-17
15:41
Adjustments to the built-in sdate() function. (check-in: 755914acb6 user: drh tags: trunk)
2004-02-02
15:11
Enhancements to the throttle result viewing. (check-in: ca3eb4f200 user: drh tags: trunk)
15:02
For string comparison purposes, CRNL and NL are considered the same. (check-in: 40fba36395 user: drh tags: trunk)
2004-01-28
16:27
Add the ability to append comments to the Remarks section of a ticket. (check-in: a6536b8cf4 user: drh tags: trunk)
2004-01-27
18:33
Add more throttling to the attachment pages. (check-in: 7715b2f669 user: drh tags: trunk)
2004-01-11
00:31
Registered users can undo their own ticket changes within 24 hours. Administrators can undo anonymous ticket changes indefinitely. (check-in: 49a7c535bf user: drh tags: trunk)
2003-12-10
14:02
Fix for ticket #259. (check-in: 45924bb6d6 user: drh tags: trunk)
2003-12-06
20:40
Improvements to the spider-capture honeypot. (check-in: 634aca0eb2 user: drh tags: trunk)
14:35
Formatting changes on the access log report. (check-in: ef5de9a126 user: drh tags: trunk)
14:28
Create a honeypot for robots that disables service. Add a report on the throttling results accessible to the setup user. (check-in: 326d13eef7 user: drh tags: trunk)
2003-11-28
13:35
Enhance the throttling mechanism to cover the wiki. Added in an attempt to stop spiders from vandalizing the wiki on the sqlite website. (check-in: 0989d9894e user: drh tags: trunk)
13:34
Fix an off-by-1 error in the pathname lookup. Ticket #274. (check-in: 90a78d66ae user: drh tags: trunk)
2003-11-17
01:44
Fix a sign error. User load for access control was increasing exponentially with time rather than decreasing exponentially. (check-in: 8b030ce722 user: drh tags: trunk)
2003-11-13
22:34
Accept the
    markup within html.
(check-in: 65ea0b8144 user: drh tags: trunk)
2003-11-10
21:57
Add the ability to tag check-ins with inspection reports. (check-in: 61632a02fb user: drh tags: trunk)
20:04
Forgot to include a new source file in the previous check-in. (check-in: afb98db5df user: drh tags: trunk)
17:59
Implement bandwidth throttling. Up the database schema version to 1.5. (check-in: 1a96a73862 user: drh tags: trunk)
2003-11-03
14:38
Bug fix in the wiki HTML formatting. (check-in: 1a61a5b3db user: drh tags: trunk)
2003-11-02
00:51
On wiki pages, text between {quote: <html>...</html>} is displayed as HTML. The set of allowed tags is restricted to prevent users from inserting forms, javascript, etc. (check-in: 036579f4a5 user: drh tags: trunk)
2003-10-06
20:26
When making changes to the CVSROOT/passwd file, if the user ID cannot be found from /etc/passwd, use the user id in the CONFIG table where name='cvs_user_id'. (check-in: 005bddea2f user: drh tags: trunk)
2003-09-22
23:05
Rework the milestone display in the file browser so that it shows the date of the milestone and gives a hyperlink to the milestone description. (check-in: a21277253a user: drh tags: trunk)
22:32
Identify branch check-ins in the file browser interface. (check-in: bb0a0cbbbf user: drh tags: trunk)
21:20
Add the ability to associate a milestone with a branch. (check-in: 324e917f0c user: drh tags: trunk)
2003-09-18
12:39
The getpwuid() function fails in a chroot jail on Debian Linux. So read the /etc/passwd file directly to get the information we need. (check-in: eec69c5396 user: drh tags: trunk)
2003-09-07
20:47
Add a "diff" option to wiki pages that shows the difference between the current version and the previous version of that page. (check-in: 93314bd3f5 user: drh tags: trunk)
2003-09-03
02:00
Fix an #endif in the wrong spot. Ticket #247. (check-in: c427e7f661 user: drh tags: trunk)
01:56
Fix a typo in an SQL statement. Ticket #245. (check-in: 5ac783656f user: drh tags: trunk)
2003-08-29
20:23
Fix the timeline so that it shows blue date boxes only when they contain content. This was only a problem in various restricted display modes. (check-in: 9dd37c1027 user: drh tags: trunk)
2003-08-23
16:09
Bug fixes for the previous two check-ins. (check-in: 9b650c5ed1 user: drh tags: trunk)
15:37
The attach_get and fileget methods now include the name of the attachment or file as part of the pathname. This gives the browser a better default name for the SaveAs dialog saving the attachment to disk. (check-in: c7f0791dd5 user: drh tags: trunk)
14:52
Report attachments in the timeline. (check-in: 30b8766299 user: drh tags: trunk)
2003-08-21
11:44
Add the "testcgi" command-line option for testing CGI installations. (check-in: aac9b343c3 user: drh tags: trunk)
2003-08-05
16:10
When an unauthorized operation is attempted, redirect to the "login" screen. Pass in the "nxp" parameter to login so that after the login completes we redirect back to the original page. (check-in: 436b2fd7c2 user: drh tags: trunk)
14:25
Use the red X icon only for tickets of type "code". For other tickets, use the purple triangle. (check-in: 28c6394bc0 user: drh tags: trunk)
14:13
Use the "mkimage_c.tcl" script to automatically generate the "image.c" source file. Add the GIF images to the source tree. Highlight check-ins that occur to a branch. (check-in: c7bf362812 user: drh tags: trunk)
2003-07-09
18:42
Add the parsedate() SQL function that converts text date strings into seconds since 1970. Useful in reports. (check-in: 396475a3f3 user: drh tags: trunk)
16:17
Add the ability to include the user-defined ticket fields on the new-ticket page. (check-in: 99c28a71cf user: drh tags: trunk)
2003-07-06
06:55
Remove private declaration of sqlite_vmprintf to avoid a redeclaration, because SQLite 2.8.4 and higher now have this function in the <sqlite.h> API definition (see http://cvs.hwaci.com/sqlite/chngview?cn=1008 for details). Unfortunately SQLite still does not have a numerical (non-string) API version definition in <sqlite.h>, so we cannot make this declaration conditional (in order to still support older SQLite versions, too). Hence, completely remove it or CVSTrac will not build correctly with SQLite 2.8.4 and higher. (check-in: 5075a0f2c4 user: rse tags: trunk)
2003-05-19
23:46
Fix some minor problems reported by Tiago Nuno Geralda Dionisio. (check-in: a8d770caf6 user: drh tags: trunk)
2003-05-13
01:13
Fix the twos-complement negation bug. (check-in: 6573ed5fd4 user: drh tags: trunk)
2003-04-05
16:04
Fix date interpretation on history file scans. Dates were off due to a botched leapyear compuation. Ticket #203. (check-in: 6efba5d315 user: drh tags: trunk)
2003-03-30
21:04
Fix an SQL error that occurs under certain combinations of options in the timeline. Also, give better error messages in the event of future SQL errors. Ticket #201. (check-in: bba94fd20c user: drh tags: trunk)
2003-03-19
03:35
Remove backslashes from ticket titles in addition to single-quotes, to prevent a malicious user from subverting the notify procedure using a strange title. Ticket #198. (check-in: 9927077e78 user: drh tags: trunk)
2003-02-09
16:59
Explicitly set the charset to ISO-8859-1 if the we are not using internationalization. Ticket #177. (check-in: c8d0310b83 user: drh tags: trunk)
08:33
- GPL stands for "General Public License" and not "GNU Public License" - Use a year range to also cover 2003 as its the usual convention (although according to copyright law should not really be required). (check-in: 5e3027f513 user: rse tags: trunk)
2003-02-07
17:58
Do not send "Pragma: no-cache" in the header of attachments. This is needed to work around a bug in Internet Explorer. Ticket #176. (check-in: 50ba77b4cc user: drh tags: trunk)
2003-02-05
02:44
At the ability for the setup user to set a maximum attachment size. The default maximum attachment size is still 100. Setting the max size to 0 disables the ability to add attachments. (check-in: d3e1370fe5 user: drh tags: trunk)
2003-02-04
11:15
Always treat the version number of a file as TEXT not NUMERIC so that "1.1" will not compare equal to "1.10". (check-in: 6488f80369 user: drh tags: trunk)
2003-01-31
14:31
Provide a page under the setup menu to backup and restore the database. (check-in: 4e6a2573fc user: drh tags: trunk)
13:36
The "Rescan" option for the CVSROOT/history file now does a better job of fixing errors such as introduced by the bug of ticket #172. (check-in: b9cc0dd6f4 user: drh tags: trunk)
01:16
When adding new check-ins to the database, take care not to add duplicates. Ticket #172. (check-in: 34849a376b user: drh tags: trunk)
2003-01-26
21:51
Give the Setup user the ability to configure the default type for new tickets. Ticket #168. (check-in: 99b33d63b3 user: drh tags: trunk)
00:50
Fix a typo on the Tagging and Branching Hints page. Ticket #167. (check-in: e020f93490 user: drh tags: trunk)
2003-01-25
00:24
Fix a typo on the user configuration page. Ticket #165. (check-in: ec5992cf58 user: drh tags: trunk)
00:21
Fix a typo in the description of wiki markup. (check-in: 81bc0a14ec user: drh tags: trunk)
00:18
Fix a bug in the cookie-setting code. Ticket #166. (check-in: 2a9770b604 user: drh tags: trunk)
2003-01-24
15:47
Prevent wrapping of the menu lines in the upper-right hand corner of the screen. (check-in: 6939028bcf user: drh tags: trunk)
13:30
Provide the ability to show milestones on the check-in history of a file. (check-in: cf8961b361 user: drh tags: trunk)
2003-01-23
20:27
Add a new permission bit that enables or disables a users ability to change their password. Ticket #165. (check-in: c435da3f04 user: drh tags: trunk)
2003-01-18
16:04
Added the RSS generator from Rui Carmo. (check-in: 885d51c61f user: drh tags: trunk)
00:22
Allow a greater time slew between the timestamps in the CVSROOT/history file and in the output of the rlog command. Sometimes if a big file is being checked in, the timestamps can differ by several seconds. (check-in: 084cbfdbab user: drh tags: trunk)
2003-01-06
09:22
fix cast to reflect declaration of azAttach variable (check-in: 77f11fe6b6 user: rse tags: trunk)
2003-01-01
01:34
Rework the menus that appear in the upper right-hand corner of the each screen so that they are more complete and consistent. (check-in: 3ba1ccb599 user: drh tags: trunk)
2002-12-18
09:44
fix GCC warning: assignment from incompatible pointer type (check-in: d028cb92e8 user: rse tags: trunk)
2002-12-17
15:46
Preparing for the version 1.1.2 release. (check-in: 213454ede5 user: drh tags: trunk)
2002-12-16
16:37
On the timeline, do not repeat a date tag after a milestone tag. (check-in: 4eb799d3c2 user: drh tags: trunk)
16:20
Require the wiki page named "{quote: HomePage}" to be locked in order to be substituted for the main index page. (check-in: 949790de68 user: drh tags: trunk)
15:59
Add text to the Configure Source Code Diff Program page to explain the intended use of the single-file listing command. Ticket #154. (check-in: 2578663f44 user: drh tags: trunk)
14:29
If the URL in "{quote: {image: URL}}" markup is the filename of an attachment, then automatically convert the URL into an actual URL for the attachment. (check-in: dd5698137a user: drh tags: trunk)
2002-12-13
12:04
Shut off GCC 3.2.1 warnings: `xxxx' might be used uninitialized in this function (check-in: df857dd11c user: rse tags: trunk)
2002-12-09
15:20
Do not trust atof() to decode numbers with a "." character as the radix point. With some locales, a "," is used instead. Ticket #152. (check-in: 9b78b9074b user: drh tags: trunk)
2002-12-07
22:08
In the wiki formatter, a horizontal line now acts as a paragraph separator. Ticket #153. (check-in: 5faef38e56 user: drh tags: trunk)
2002-12-04
16:43
Detect when files are deleted from the repository and add those events to the timeline. Ticket #150. (check-in: 233ce3b288 user: drh tags: trunk)
2002-12-02
12:31
Fix a typo. Ticket #149. (check-in: b7110691c0 user: drh tags: trunk)
2002-11-30
20:51
Correctly determine the tail of attachment files even if the microsoft "\" file separator is used. Also: fix a bug in the wiki formatter. (check-in: 2ef0cb0eae user: drh tags: trunk)
20:04
Add the ability to sort the wikitoc page by creation date and modification time of the wiki page. (check-in: dcfc246172 user: drh tags: trunk)
19:57
Fix a bug in parameter parser that can cause the CGI processor to go into an infinite loop if given an ill-formed URL. (check-in: fc3eae912c user: drh tags: trunk)
16:49
Fix a bug in "chroot" mode that was introduced by checkin [211]. (check-in: a9cfd5571d user: drh tags: trunk)
16:18
Fix some compiler warnings. (check-in: f6e8f28818 user: drh tags: trunk)
16:10
Small changes to text and formatting. (check-in: 50546ffb4e user: drh tags: trunk)
03:51
Add the ability to specify external programs that compute file diffs. Ticket #132. Also includes some bug fixes and documentation updates. (check-in: 91d10cf9dd user: drh tags: trunk)
2002-11-29
16:10
Bug fix in the history file scanner. Also added the capability to reread the history file while preserving prior check-in numbers. (check-in: fde3840f69 user: drh tags: trunk)
15:14
Add the ability to put attachments on wiki pages. And add {image} markup that allows an attachment (or any URL) that is an image to be displayed in the middle of a Wiki page. (check-in: 14c3699d2e user: drh tags: trunk)
06:52
If a Wiki page named "HomePage" exists and is not empty, then that page is used for the main screen instead of the build-in menu. The built-in menu is still accessible from the /mainmenu URL. Ticket #126. (check-in: c93abada6b user: drh tags: trunk)
06:15
Add multi-level bullet and enumeration lists. Tickets #125 and #129. (check-in: a710a741ac user: drh tags: trunk)
04:17
Use two or three asterisks in a row to turn a bold font into a bold font with a larger point size. Useful for headings and titles in Wiki. (check-in: 13d857a7fe user: drh tags: trunk)
00:04
Markup added to the wiki formatter for handling linebreaks, hyperlinks with arbitrary text labels, and escaping characters with special meaning to the formatter. This is related to tickets #137, #129, and #122. (check-in: 2520ceb2cd user: drh tags: trunk)
2002-11-28
06:33
Provide the ability for the administrator to create up to 5 extra fields on tickets. (check-in: 3868af92ff user: drh tags: trunk)
02:18
Replace the frequent queries to the CONFIG table with a new subroutine that does the query and caches the results. (check-in: c3b1b7f70e user: drh tags: trunk)
00:52
Update the database schema by adding better indices, inserting the new ENUMS table and adding extra columsn to the TICKET table. Allow the administrator to change the set of ticket types and ticket status. (check-in: 0e0258023d user: drh tags: trunk)
2002-11-27
20:34
Break the "setup" page into several smaller pages. Add the ability to turn off writing to CVSROOT/passwd. (ticket #34). Add the ability to use only a subset of the CVS repository. (tickets #38, #90, and #112). This check-in is not fully stable - do not use in a production environment without further testing. (check-in: 5b13859803 user: drh tags: trunk)
13:27
include <sys/time.h> for struct timeval definition (check-in: 8b0e247ab6 user: rse tags: trunk)
01:38
When browsing, files in the attic (in other words, files that have been deleted) have a big red "X" over their icons. Tickets #147, #134, #91. (check-in: d4f746c26f user: drh tags: trunk)
01:02
Fix a bug in the CVSROOT/history file parser that was causing branch check-ins to appear partually on the main trunk. Ticket #145. (check-in: 541396a74d user: drh tags: trunk)
2002-11-24
17:19
Do not attempt to "diff" files which have "-kb" in CVS. Ticket #133. (check-in: 98fe9c4120 user: drh tags: trunk)
16:45
Add missing space in the timeline output. Ticket #143. (check-in: 7934a27e53 user: drh tags: trunk)
16:39
Fix for ticket #135. (check-in: 9a5247c7e0 user: drh tags: trunk)
2002-10-29
23:08
Add the ability for CVSTrac to be a stand-alone webserver in addition to a CGI program or a server that is run from INETD. (check-in: 1b9b4e3615 user: drh tags: trunk)
2002-09-27
14:49
Hyperlinks to images are shown inline. Tickets #93 and #123. (check-in: 673665abed user: drh tags: trunk)
14:33
Enhance the iconography on the timeline by adding some new icons and changing the use of existing icons to closer match what users expect. Ticket #121. (check-in: 4ec9b6447a user: drh tags: trunk)
13:18
Fix for ticket #124: fix the redirect to the login screen that occurs when a user tries to create a new ticket but does not have the right permissions.

Also added a report of the total execution time to the logfile output and fixed a commenting error. (check-in: 2cdb08793b user: drh tags: trunk)

2002-09-05
22:07
Fix for ticket #85: Add the ability to link attachments to tickets. (check-in: 3bbd7bb10d user: drh tags: trunk)
15:49
Enhance the CGI module so that it is able to interpret multipart/form-data content in the HTTP request. This is the first step towards implementing attachments per ticket #85. (check-in: f08c5e09f3 user: drh tags: trunk)
11:53
Documentation changes prior to release of 1.1.1 (check-in: 78c3f2d600 user: drh tags: trunk)
2002-09-04
02:38
Improvements to documentation. Still lots of work to do though. (check-in: 2ec647cd38 user: drh tags: trunk)