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.
561 cpb 2005-Dec-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.
560 cpb 2005-Dec-11 15:16 (#522) fix some comments
559 cpb 2005-Dec-11 02:22 (#522) patchsets are constant, too.
558 cpb 2005-Dec-11 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...
557 cpb 2005-Dec-11 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...
556 cpb 2005-Dec-04 00:08 (#521) add an RFC 822 date formatter. The time zone is hardcoded to GMT as required by HTTP.
555 cpb 2005-Dec-02 13:36 _tktnew_ needs a cancel action somewhere
554 cpb 2005-Dec-02 13:34 (#470) description preview title needs to be broken out
553 cpb 2005-Dec-02 02:46 (#470) merge [552] into the *manual-patches* branch so I can keep working on this without changing browsers.
552 cpb 2005-Dec-02 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.
551 cpb 2005-Dec-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.
550 cpb 2005-Dec-01 22:08 (#512) confirm report delete actions.
549 cpb 2005-Dec-01 21:52 (#517) submitting a report form now sends to the _rptview_ page.
548 cpb 2005-Nov-25 02:08 (#509) add reports, attachments and inspections.
547 cpb 2005-Nov-25 00:46 (#264) fix typo in date function docs
546 cpb 2005-Nov-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
545 cpb 2005-Nov-24 15:12 (#509) we already had a minimal CvstracDocumentation page so rather than created a new parallel page, just take that one over.
544 cpb 2005-Nov-24 02:59 (#509) finish check-in documentation, add wiki and milestones.
543 cpb 2005-Nov-23 19:28 (#444) when searching filenames, search for attachments as well as repository files. Also fix labels on filename output.
542 cpb 2005-Nov-23 01:40 (#509) that wasn't supposed to be in there
541 cpb 2005-Nov-23 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...
540 cpb 2005-Nov-20 23:49 manual-patches
537 cpb 2005-Nov-19 23:49 (#507) use the *setup* userid when updating Wiki pages. It makes for a saner display where the userid is displayed.
536 cpb 2005-Nov-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.
535 cpb 2005-Nov-03 21:16 (#444) add "Filenames" to the list of searchable things in the index.
534 cpb 2005-Oct-19 16:13 (#496) fix some SQL syntax errors, plus get a combination of flags right.
533 cpb 2005-Oct-19 13:25 (#496) show inspections in timeline(.rss). They'll show up in all the same places as checkins.
532 cpb 2005-Oct-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.
531 cpb 2005-Sep-29 01:24 (#315) chorlya: update documentation on minimum SQLite version required. Fix some typos.
530 cpb 2005-Sep-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).
529 cpb 2005-Sep-28 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.
528 cpb 2005-Sep-28 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.
527 cpb 2005-Sep-28 01:20 (#486) fix NULL dereference in =printable_vers()=.
526 cpb 2005-Sep-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
525 cpb 2005-Sep-26 01:50 if the timeline is restricted to a prefix and that prefix is a directory, create a /dir link in the action bar.
524 cpb 2005-Sep-26 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.
523 cpb 2005-Sep-26 01:38 make a copy of the string, which gets rid of a warning.
522 cpb 2005-Sep-22 21:55 (#483) add a "are you sure" page to milestone deletion.
521 cpb 2005-Sep-22 18:48 okay, delete is really picky about the arguments.
520 cpb 2005-Sep-22 18:44 when adding a new milestone, you do need to figure out the cn before redirecting the user...
519 cpb 2005-Sep-22 18:33 fix the labelling when viewing milestones (i.e. use Milestone rather than Check-in) and display the _type_ of milestone.
518 cpb 2005-Sep-22 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
517 cpb 2005-Sep-22 03:20 okCheckin is too restrictive. /taghints itself uses okRead.
516 cpb 2005-Sep-21 02:03 (#476) read somewhere than git commits may not always have an "author" line. In that event, fall back to using committer.
515 cpb 2005-Sep-21 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.
514 cpb 2005-Sep-21 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.
513 cpb 2005-Sep-16 16:13 (#480) redirect rcs program output to /dev/null
507 cpb 2005-Sep-14 01:22 remove some unused variables.
506 cpb 2005-Sep-14 01:21 (#170) it's not really an error if we can't dump a binary file.
505 cpb 2005-Sep-14 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.
504 cpb 2005-Sep-14 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.
512 drh 2005-Sep-13 21:27 Version 1.2.0
503 cpb 2005-Sep-13 21:27 (#375) remove all the image files since they're no longer referenced in the code itself.
502 cpb 2005-Sep-13 14:33 (#476) add a note on building GitTrac
501 cpb 2005-Sep-13 13:59 bump version number to 1.2.0
500 cpb 2005-Sep-13 13:57 config.h doesn't get copied into build directory.
499 cpb 2005-Sep-12 23:56 add the output of the makemake.tcl change
498 cpb 2005-Sep-12 23:49 make =config.h= a dependency for all the .o files
497 cpb 2005-Sep-12 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.
496 cpb 2005-Sep-12 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.
495 cpb 2005-Sep-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.
494 cpb 2005-Sep-11 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
493 cpb 2005-Sep-11 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...
492 cpb 2005-Sep-11 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.
491 cpb 2005-Sep-11 18:52 (#476) make =common_readfile()= more, uh, common.
490 cpb 2005-Sep-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.
489 cpb 2005-Sep-10 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.
488 cpb 2005-Sep-10 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.
487 cpb 2005-Sep-10 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.
486 cpb 2005-Sep-10 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...
485 cpb 2005-Sep-10 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.
484 cpb 2005-Sep-10 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.
483 cpb 2005-Sep-10 00:18 (#278 and #476) only CVS knows about modules. That might change later.
482 cpb 2005-Sep-09 22:51 (#476) include =limits.h=
481 cpb 2005-Sep-09 19:52 (#444) when only filename is checked, after the search all the boxes are toggled on. That's not quite right.
480 cpb 2005-Sep-09 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...
479 cpb 2005-Sep-09 02:56 (#476) missed a =pclose()=
478 cpb 2005-Sep-09 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 ./gittrac server 8008 login as setup/setup, change repository to /path/to/working/directory go to timeline
477 cpb 2005-Sep-09 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.
476 cpb 2005-Sep-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).
475 cpb 2005-Sep-06 11:26 (#460) we don't need _svnlastupdate_ in CVS...
474 cpb 2005-Sep-06 02:26 (#460) need to update _svnlastupdate_ when nothing's changed, too.
473 cpb 2005-Sep-06 02:20 *: (#474) we only need to set the schema once *: (#460) things work better when it's not always zero
472 cpb 2005-Sep-06 00:57 (#459) only display the CVSROOT/ change notes in /useredit if we're actually configured to read/write to CVSROOT/*.
471 cpb 2005-Sep-06 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.
470 cpb 2005-Sep-06 00:35 update copyright date
469 cpb 2005-Sep-06 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").
468 cpb 2005-Sep-05 18:25 (#474) _now_ we can use FILECHNG.prevvers directly in queries.
467 cpb 2005-Sep-05 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.
466 cpb 2005-Sep-04 02:35 (#474) can't use CHNG.prevvers directly in CVS because we don't actually build the entire history until _previous_version()_ is called.
465 cpb 2005-Sep-04 02:23 (#473) document available *.mk files. (#278) describe how to build Subversion support
464 cpb 2005-Sep-04 02:20 (#473) add a BSD makefile template
463 cpb 2005-Sep-04 02:19 (#473) fix a variety of C++isms introduced by the captcha and svn stuff.
462 cpb 2005-Sep-03 13:49 (#318) move show/omit milestones into the action menubar.
461 cpb 2005-Aug-31 01:05 reclassify "Directory" as an action rather than navigation item since it's relative to the currently viewed page.
460 cpb 2005-Aug-31 00:49 (#278) make the added/removed messages relative to version numbers so they make a little more sense.
459 cpb 2005-Aug-31 00:37 (#468) do a VACUUM after a schema update or a repository reread/reconstruct.
458 cpb 2005-Aug-31 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.
457 cpb 2005-Aug-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.
456 cpb 2005-Aug-29 00:43 (#170) that was supposed to be a comment.
455 cpb 2005-Aug-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.
454 cpb 2005-Aug-28 22:16 (#170) always nice if you can actually _delete_ the filter...
453 cpb 2005-Aug-28 22:03 (#460) checking the path works better if you have a root.
452 cpb 2005-Aug-28 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).
451 cpb 2005-Aug-28 20:26 (#466) don't pass the built-up query string directly. Use a "%s" formatter instead.
450 cpb 2005-Aug-28 20:05 (#460) tweak things a bit in case svnlook runs fast enough and ensure that we do an svnlook every hour or so.
449 cpb 2005-Aug-28 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.
448 cpb 2005-Aug-28 15:26 (#462) only offer patchsets for checkins (chng.type==0).
447 cpb 2005-Aug-28 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.
446 cpb 2005-Aug-28 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.
445 cpb 2005-Aug-28 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.
444 cpb 2005-Aug-28 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
443 cpb 2005-Aug-28 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...
442 cpb 2005-Aug-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.
441 cpb 2005-Aug-27 14:49 (#278) remove a =free()= call on a NULL pointer.
440 cpb 2005-Aug-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.
439 cpb 2005-Aug-25 18:08 (#454) include "derived from" in the /tktnew field list.
438 cpb 2005-Aug-25 18:04 (#456) Delete button was taking us to /tktview rather than /tktedit.
437 cpb 2005-Aug-23 22:44 (#202) don't accept empty user ids
436 cpb 2005-Aug-23 22:32 (#184) move =cgi.h= include to the bottom like most of the others.
435 cpb 2005-Aug-23 20:59 (#444) add the ability to search for filenames. We don't search file _contents_, although that _could_ 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?)
434 cpb 2005-Aug-19 17:55 (#447) should do a =ticket_notify()= when remarks are appended.
433 cpb 2005-Aug-19 17:50 (#448) add support for handling Subversion user files. Also fixed some tabdamage.
432 cpb 2005-Aug-15 00:43 (#446) change _insert_file()_ to correctly handle being given /-terminated directory names.
431 cpb 2005-Aug-14 02:11 (#419) automatically turn pathnames to repository files (i.e. /cvstrac/format.c) into rlog links.
430 cpb 2005-Aug-14 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.
429 cpb 2005-Aug-13 22:15 (#443) ensure the diff buffer is NUL terminated.
428 cpb 2005-Aug-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.
427 cpb 2005-Aug-12 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.
426 cpb 2005-Aug-12 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.
425 cpb 2005-Aug-12 16:01 (#278) sanely handle "broken" version numbers (without periods).
424 cpb 2005-Aug-12 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...
423 cpb 2005-Aug-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.
422 cpb 2005-Aug-11 01:47 (#278) don't need a svntrac target. Just go make all APPNAME='svntrac'
421 cpb 2005-Aug-11 01:43 (#278) Subversion update
420 cpb 2005-Aug-11 01:37 (#278) quote version in _previous_history()_ query.
419 cpb 2005-Aug-11 01:36 (#278) quote revision in query
418 cpb 2005-Aug-11 01:36 (#278) don't do prevvers chaining for anything other than CVS. Also quote revision.
417 cpb 2005-Aug-11 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.
416 cpb 2005-Aug-11 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.
415 cpb 2005-Aug-11 01:00 (#278) comments to clarify what happens when _cvs_previous_version()_ fails to work because 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.
414 cpb 2005-Aug-11 00:58 (#278) _is_dead_revision()_ only needs the database so it doesn't need to be buried in _cvs.c_.
413 cpb 2005-Aug-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...
412 cpb 2005-Aug-10 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.
411 cpb 2005-Aug-10 03:03 (#278) with _prevvers_ in the _filechng_ table, we don't actually _need_ SCM-specific versions of _previous_version()_.
410 cpb 2005-Aug-10 02:40 (#278) _is_dead_revision()_ is much, much less horrible when you don't need to run external programs...
409 cpb 2005-Aug-10 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.
408 cpb 2005-Aug-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 ;)
407 cpb 2005-Aug-09 22:42 (#278) Make sure we always have '/' in zFile, otherwise link to parent directory won't work for file in repository root.
406 cpb 2005-Aug-08 23:38 (#433) put an "Append Remarks" link at the bottom of the remarks section as well.
405 cpb 2005-Aug-08 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.
404 cpb 2005-Aug-08 17:17 (#278) oops... that built at home. Weird.
403 cpb 2005-Aug-08 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 ", for example) since _cvs_previous_version()_ doesn't even check the file history...
401 cpb 2005-Aug-08 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
402 cpb 2005-Aug-08 01:39 file svn.c was initially added on branch svntrac-patches.
400 cpb 2005-Aug-08 01:28 (#278) add support for dynamic SCM detection from the executable name. In a nutshell, we look for _trac_ in =argv[0]= and set the =zSCM= variable in the =Global= structure to __. Modified a few places to actually check the =g.zSCM= value before blindly doing something CVS-like.
399 cpb 2005-Aug-08 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=
398 cpb 2005-Aug-07 23:39 (#278) s/history_update/cvs_history_update/
397 cpb 2005-Aug-07 23:38 (#278) update =main.mk= and =makemake.tcl= for =cvs.c=
396 cpb 2005-Aug-07 23:36 (#278) keep history.c, actually. That's where the "SCM dispatch" logic can go.
395 cpb 2005-Aug-07 23:23 (#278) rename =history.c= to =cvs.c=. We'll push more of the CVS-specific stuff into there.
394 cpb 2005-Jun-17 00:18 (#424) remove trailing whitespace on all lines in =remove_blank_lines=.
393 cpb 2005-Jun-16 23:56 (#425) path parsing eats the leading / characters so don't look for one when checking for robots.txt.
392 cpb 2005-May-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.
391 cpb 2005-May-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.
390 cpb 2005-May-17 01:43 (#418) handle the empty "html" tag faster. An =isAllowed= call with an empty string happens with things like "a <= b", for example.
389 cpb 2005-May-16 23:46 (#420) make tktnew and tktedit enforce the 70 character title limit using _maxlength_ as well as _size_.
388 cpb 2005-May-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()=.
387 cpb 2005-May-15 01:01 (#417) be a _little_ clearer about how we make room for the terminating NUL.
386 cpb 2005-May-15 00:58 (#417) define a =common_readfp()= function to read from a file descriptor into a chunk of memory.
385 cpb 2005-May-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.
384 cpb 2005-May-12 03:26 (#417) export =write_to_temp= function.
383 cpb 2005-May-12 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
382 cpb 2005-May-12 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
381 cpb 2005-May-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
and markup) should work.
380 cpb 2005-May-09 02:16 (#414) identify external links with icons. Basically, it looks something like: ¤ http://www.sqlite.org
¤Some other page
379 cpb 2005-May-02 01:31 (#408) oops. Besides being completely reserved logic, that's not how you check if zMsg is "empty".
378 cpb 2005-May-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.
377 cpb 2005-Apr-28 20:29 (#411) check the xref table for an existing entry before adding another. This eliminates duplication in ticket and chng lists.
376 cpb 2005-Apr-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.
375 cpb 2005-Apr-23 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.
374 cpb 2005-Apr-19 22:21 (#404) ensure that redirections are applied to the document root by stripping off whatever is in g.zExtra.
373 cpb 2005-Apr-19 21:52 (#406) when getting the markup list from the database, get it ordered.
372 cpb 2005-Apr-19 01:22 (#405) document additional substitutions and what environment variables are available to program formatters.
371 cpb 2005-Apr-19 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).
370 cpb 2005-Apr-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.
369 cpb 2005-Apr-18 01:08 (#301) add a page for managing custom wiki markups.
368 cpb 2005-Apr-18 01:07 (#301) add a {quote: {markups}} to the end of FormattingWikiPages.
367 cpb 2005-Apr-18 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.
366 cpb 2005-Apr-18 00:59 (#301) activate 1.7 schema change
365 cpb 2005-Apr-18 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.
364 cpb 2005-Apr-10 03:02 (#390) show the directory (with a browse like) for a milestone if it's available.
363 cpb 2005-Apr-10 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.
362 cpb 2005-Apr-10 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).
361 cpb 2005-Apr-10 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.
360 cpb 2005-Apr-09 01:02 (#401) update the throttler/honeypot documentation. *: add notes about captcha *: the honeypot link isn't actually hidden
359 cpb 2005-Apr-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.
358 cpb 2005-Apr-08 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.
357 cpb 2005-Apr-08 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
356 cpb 2005-Apr-07 22:19 fix comment. the new schema version is 1.5.
355 cpb 2005-Apr-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.
354 cpb 2005-Apr-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...
353 cpb 2005-Apr-03 02:59 (#395) create the [Up] link when the directory is non-empty since the toplevel directories don't have slash in them.
352 cpb 2005-Apr-03 02:25 (#241, #318) 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.
351 cpb 2005-Apr-03 01:43 (#377) implement =fixed font= markup. This is really just cut and pasted from how the italic stuff is done.
350 cpb 2005-Apr-03 00:56 (#375) call common_icon() rather than generating 
overstrike