# config

name: css
value:
  /* General settings for the entire page */
  body {
    margin: 0ex 0ex;
    padding: 0px;
    background-color: #fef3bc;
    font-family: sans-serif;
  }

  /* The project logo in the upper left-hand corner of each page */
  div.logo {
    display: inline;
    text-align: center;
    vertical-align: bottom;
    font-weight: bold;
    font-size: 2.5em;
    color: #a09048;
  }

  /* The page title centered at the top of each page */
  div.title {
    display: table-cell;
    font-size: 2em;
    font-weight: bold;
    text-align: left;
    padding: 0 0 0 5px;
    color: #a09048;
    vertical-align: bottom;
    width: 100%;
  }

  /* The login status message in the top right-hand corner */
  div.status {
    display: table-cell;
    text-align: right;
    vertical-align: bottom;
    color: #a09048;
    padding: 5px 5px 0 0;
    font-size: 0.8em;
    font-weight: bold;
  }

  /* The header across the top of the page */
  div.header {
    display: table;
    width: 100%;
  }

  /* The main menu bar that appears at the top of the page beneath
  ** the header */
  div.mainmenu {
    padding: 5px 10px 5px 10px;
    font-size: 0.9em;
    font-weight: bold;
    text-align: center;
    letter-spacing: 1px;
    background-color: #a09048;
    color: black;
  }

  /* The submenu bar that *sometimes* appears below the main menu */
  div.submenu, div.sectionmenu {
    padding: 3px 10px 3px 0px;
    font-size: 0.9em;
    text-align: center;
    background-color: #c0af58;
    color: white;
  }
  div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
  div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited {
    padding: 3px 10px 3px 10px;
    color: white;
    text-decoration: none;
  }
  div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover {
    color: #a09048;
    background-color: white;
  }

  /* All page content from the bottom of the menu or submenu down to
  ** the footer */
  div.content {
    padding: 1ex 5px;
  }
  div.content a { color: #706532; }
  div.content a:link { color: #706532; }
  div.content a:visited { color: #704032; }
  div.content a:hover { background-color: white; color: #706532; }

  /* Some pages have section dividers */
  div.section {
    margin-bottom: 0px;
    margin-top: 1em;
    padding: 3px 3px 0 3px;
    font-size: 1.2em;
    font-weight: bold;
    background-color: #a09048;
    color: white;
  }

  /* The "Date" that occurs on the left hand side of timelines */
  div.divider {
    background: #e1d498;
    border: 2px #a09048 solid;
    font-size: 1em; font-weight: normal;
    padding: .25em;
    margin: .2em 0 .2em 0;
    float: left;
    clear: left;
  }

  /* The footer at the very bottom of the page */
  div.footer {
    font-size: 0.8em;
    margin-top: 12px;
    padding: 5px 10px 5px 10px;
    text-align: right;
    background-color: #a09048;
    color: white;
  }

  /* Hyperlink colors */
  div.footer a { color: white; }
  div.footer a:link { color: white; }
  div.footer a:visited { color: white; }
  div.footer a:hover { background-color: white; color: #558195; }

  /* <verbatim> blocks */
  pre.verbatim {
     background-color: #f5f5f5;
     padding: 0.5em;
  }

  /* The label/value pairs on (for example) the ci page */
  table.label-value th {
    vertical-align: top;
    text-align: right;
    padding: 0.2ex 2ex;
  }


name: header
value:
  <html>
  <head>
  <title>$<project_name>: $<title></title>
  <link rel="alternate" type="application/rss+xml" title="RSS Feed"
        href="$home/timeline.rss">
  <link rel="stylesheet" href="$home/style.css?tan" type="text/css"
        media="screen">
  </head>
  <body>
  <div class="header">
    <div class="logo">
      <img src="$home/logo" alt="logo">
    </div>
    <div class="title">$<title></div>
    <div class="status">
      <div class="logo"><nobr>$<project_name></nobr></div><br/>
      <nobr><th1>
       if {[info exists login]} {
         puts "Logged in as $login"
       } else {
         puts "Not logged in"
       }
    </th1></nobr></div>
  </div>
  <div class="mainmenu">
  <th1>
  html "<a href='$home$index_page'>Home</a>\n"
  if {[anycap jor]} {
    html "<a href='$home/timeline'>Timeline</a>\n"
  }
  if {[hascap oh]} {
    html "<a href='$home/dir?ci=tip'>Files</a>\n"
  }
  if {[hascap o]} {
    html "<a href='$home/brlist'>Branches</a>\n"
    html "<a href='$home/taglist'>Tags</a>\n"
  }
  if {[hascap r]} {
    html "<a href='$home/reportlist'>Tickets</a>\n"
  }
  if {[hascap j]} {
    html "<a href='$home/wiki'>Wiki</a>\n"
  }
  if {[hascap s]} {
    html "<a href='$home/setup'>Admin</a>\n"
  } elseif {[hascap a]} {
    html "<a href='$home/setup_ulist'>Users</a>\n"
  }
  if {[info exists login]} {
    html "<a href='$home/login'>Logout</a>\n"
  } else {
    html "<a href='$home/login'>Login</a>\n"
  }
  </th1></div>


name: project-description
value:
  Package and application containing the common parts of build.tcl scripts for Tcl-based setup, building, and installation of packages.


# reportfmt

title: All Tickets
cols:
  #ffffff Key:
  #f2dcdc Active
  #e8e8e8 Review
  #cfe8bd Fixed
  #bde5d6 Tested
  #cacae5 Deferred
  #c8c8c8 Closed

sqlcode:
  SELECT
    CASE WHEN status IN ('Open','Verified') THEN '#f2dcdc'
         WHEN status='Review' THEN '#e8e8e8'
         WHEN status='Fixed' THEN '#cfe8bd'
         WHEN status='Tested' THEN '#bde5d6'
         WHEN status='Deferred' THEN '#cacae5'
         ELSE '#c8c8c8' END AS 'bgcolor',
    substr(tkt_uuid,1,10) AS '#',
    datetime(tkt_mtime) AS 'mtime',
    type,
    status,
    subsystem,
    title
  FROM ticket


# event

type: ci
user: aku
comment:
  Start on the kettle core and application. Auto-extension system planned, but not funcitonal at this point. Basic database plus standard recipes ok. Database may require a revamp to allow multiple definitions for a recipe to handle bundles of packages, applications, etc.


type: ci
user: aku
comment:
  Allow multiple definitions per recipe. Auto-extend when encountering unknown declarations. A few public helpers for reciples.


type: ci
user: aku
comment:
  Support for installation and removal of pure Tcl applications (plain copy, delete). Added to self build.


type: ci
user: aku
comment:
  General tcl package installation, removal done, with various utilites. gui mode highlighting done. kettle is able to install and remove itself now, using itself.


type: ci
user: andreask
comment:
  Utilities for (un)installing files. Core change to allow for dependent recipes. Help not fully worked out yet for this.


type: ci
user: aku
comment:
  Continued re-architecting. GUI/text puts simplified: Command resolution, not renaming. Prep for ANSI color codes in text mode.


type: ci
user: andreask
comment:
  Rework of the internals nearly done. Issues with manpage installation (not idempotent). Need doc uninstall recipes. Generally working.


type: ci
user: andreask
comment:
  Bugfix in gui part of Hilit, plus trace message tweaking, and new standard recipe: null == do nothing


type: ci
user: aku
comment:
  Extended the set of figures for the doc and figures support packages. Updated architecture, and package dependency diagram. Added ascii architecture diagram.


type: ci
user: aku
comment:
  Updated the introduction to explain the system. New, albeit empty manpages for all the packages, and the DSL.


type: ci
user: andreask
comment:
  Refactored welcome a bit, extended for most documents to point to the introduction. Added skeleton to fill with the documentation of the DSL. Regenerated doc tree.


type: ci
user: andreask
comment:
  Second big reorganization. Namespacified and layered the code, and made it all a single package, if split over multiple files. Incomplete, untested.


type: ci
user: aku
comment:
  Fixed reorg bugs. Made tcl package detection more robust. Still to do: Find and using files owned by the primary file of a package. Tested, working in general.


type: ci
user: andreask
comment:
  Added utilities for lambda creation, and snarfed Tcl code for try/finally. See where we can make things more robust with it.


type: ci
user: andreask
comment:
  Created utilities to execute sub-processes, and do things in a directory. Liberal use of try/finally.


type: ci
user: andreask
comment:
  Recipea now can have multiple parents. Tcl packages now have debug recipes which are just aliases of install. Testsuite notes regarding test dependency management. Which we currently do not have.


type: ci
user: andreask
comment:
  Generalized most of the file scan loops into a utility command. Reworked the file predicates for readability. Modified doctools-file to always check anti-markers, not just for marker manpage_begin.


type: ci
user: andreask
comment:
  Updated docs regarding marker handling for documentation. This was also the file wrongly detected as primary doc file without the change.


type: ci
user: andreask
comment:
  Simplified file scan llops, now using the new utility. Note: tcl package scan is still using its own loop, because it has a non-standard predicate with additional output beyond yes/no (package name and version).


type: ci
user: andreask
comment:
  option usage in path layer normalized. path scanner extended for result side-channel from predicate. tcl package predicate modified to use said side-channel for extended results. tcl package code simplified to use the general scanner.


type: ci
user: andreask
comment:
  Reworked the option database, added hooks called when values change, to propagate it to derived options. Distinguish user and system choices, with the first having priority. Redefined the prefix and dir options making use of the new facilities. Added standard recipes to list options, and show the state of the database.


type: ci
user: andreask
comment:
  Added system to manage dependencies on external tools. Updated doc and figures to use it for theirs (dtplite, dia).


type: ci
user: andreask
comment: Extended tool management to allow for multiple application names, and post-search validation
ecomment:
  Extended tool management to allow for multiple application names, and post-search validation.
  Added option --include-dir.
  Option processing extended to store normalized paths.
  Added standard recipe "show-state" for @-prefixed options, where we use the option database for global state.
  Implemented critcl support from the outline/scratch, recipes for regular and debug builds, wrapping into TEA.
  Status management modified to show failure note even for terminal.


type: ci
user: aku
comment:
  Show process id in traces to differentiate main- and sub-processes. Handle terminal colorization choice through option --color (boolean).


type: ci
user: aku
comment:
  Moved colorization setup into the options, to not only have system defaults, but user-choice also. Reworked the innards of the IO system to have the GUI puts recognize color escape sequences directly instead of having the tag set only by the high-level commands. This means that colorization generated by sub-processes will be shown properly now.


type: ci
user: andreask
comment:
  Split storage of option data and option definition. Allow setter hook to veto. Have to think about how to show associated errors.


type: ci
user: aku
comment:
  No need to restore option data on veto. Throw to top, and report properly. We will use KETTLE errorcodes to distinguish reportable things from internal problems, i.e. bugs.


type: ci
user: aku
comment:
  io - Extended with markup for 'fail'.

  status - Reworked to keep the tracker of all executing goals in
           namespaced scope, instead of on the stack. Made
  	 'status check' superfluous as well, by throwing and trapping
  	 special errors.

  path - Removed all uses of 'status check'.

  recipes - Reworked to use new status API.


type: ci
user: aku
comment:
  Save path of the current build definition script, and make it available through a new path command.


type: ci
user: aku
comment:
  Commands to recursively call goals in yourself, and other packages. Non-functional (loading and deserialization of options and work state is not done yet)


type: ci
user: andreask
comment:
  Added try handling to pipe command, handle status signals, should they appear. Robust cleanup of temp files.


type: ci
user: andreask
comment:
  Reworked invokation of sub-processes again. Options are transmitted directly now (command line), and not loaded back. The goal work state is transfered through the --state option, down to sub-process, and back. Handling of target lists via recognition of internal option names (@-prefix) to supply the actual paths.


type: ci
user: andreask
comment:
  Refactored the test suite handling into helper commands for main execution, and handling of lines, for readability. Added recursive invokation of self for installation (debug prefered, regular as fallback) of the package under test in a local place.


type: ci
user: andreask
comment:
  Capture and report all KETTLE signals bubbling into the application. None are internal errors requiring full stacktrace.


type: ci
user: andreask
comment:
  Bugfix, package destination path is derived from the file getting compiled. Plus separate output from the new introduction.


type: ci
user: andreask
comment:
  Fix various issues with invoke: command names, command scoping, executable and interpreter, post-call goal check.


type: ci
user: andreask
comment:
  Started to work the tcllib sak test support into the system. Especially also to get a local build/install into the testsuite.


type: ci
user: aku
comment:
  Fixed issues with configuration transfer to sub-processes. Setting directly on the command line, as "user", overrides on higher-level options like --prefix are not propagated to dependent options. Also switched prefix/exec-prefix, prefix is main, exec-prefix is dependent.


type: ci
user: aku
comment:
  Pared the snarfed utilities down. Dropped support for anything before Tcl 8.5 or tcltest 2. Dropped general utilities the use of is unsure. New commands for setting up package under test, and supporting packages. Especially the way to find the local installation is much better, using a custom package unknown handler.


type: ci
user: andreask
comment:
  Added kettle build script detection for path scan. Added build command for recursion. Known bug: Determining goal execution only on goal name and location is not good enough. Configuration overrides must be taken into account as well. I.e. c::index build for queue::c currently prevents the build for stack::c, going into different directories when done for testing.


type: ci
user: aku
comment:
  Completed fixup of state sharing. Now using configuration as part of the key into the work database, properly distinguishing build of the same dependency for different packages. Mainly under tests. Further completed TODO, search for build script in invoke, when not specified.


type: ci
user: aku
comment:
  Modified order of execution in recursion. Run each specified goal separately. This ensures that each child has them invoked in the same order.


type: ci
user: aku
comment:
  More work on state sharing. doc-destnation and some other keys should not be part of the key to the work database. Renamed to --with-doc-destination, and filtering out all --with-* options. This must be documented in the future. These are keys specifying input, for the key we must have only options influencing output.


type: ci
user: andreask
comment:
  Tweaked output of invokations. Tweaked handling of lines in pipes to prevent insertion of bogus empty lines at the end of the child process. We may get a partial line containing just an escape sequence. We have to print the sequence, but not make it a full line.


type: ci
user: aku
comment:
  Renamed option -v to -trace. Tweaked standard recipe show-state, separate first line from into, like for show-options


type: ci
user: aku
comment:
  Testsuite output, conceal last flash message, and strip the now-visible \n from the lines bubbling up before printing.


type: ci
user: andreask
comment:
  Snarfed code computing relative paths from tcllib fileutil. Used it to shorten the shown paths in various places


type: ci
user: andreask
comment:
  Render \r characters inert to eol translation. They get otherwise dropped when passed through a chain of invokes, changing how the output of the test system looks like. The change might not be fully ok. Its effect on Windows, or old Mac is unclear).


type: ci
user: andreask
comment:
  Extended test handling: New option --with-shell to specify the shell to run tests with. Internal change, moved helper commands into namespace. Prep for more incorporation of tcllib/sak/test features.


type: ci
user: aku
comment:
  Removed central hardwired choice of which options are used to key the work database. This information is now stored for each option, and an option can be explicitly opted out of its use in that key.


type: ci
user: aku
comment:
  Tweak option internals: Default value is part of definition. Renamed 'setd' to 'set-default'. Updated all users.


type: ci
user: aku
comment:
  Fixed some issues with options: Change propagation has to distinguish user/default modes, and treat set-default as set for user modes (This fixed an issue with test run from the gui and its --lib-dir setting mishandled, not getting overriden by the --prefix for debug/install). Dropped --ignore-glob from the work database key. Fixed issue with config generation, save and restore the def dictionary too, as it can be changed (user flag).


type: ci
user: andreask
comment:
  Trap broken pipe signals. Make a last-ditch effort at reporting. Regardless, just exit, not an internal error.


type: ci
user: aku
comment:
  Moved the string processing utility commands in recipes to their own file, for future use in other layers of the system.


type: ci
user: aku
comment:
  Extended option (and type) definition with help texts. Added new standard recipe "help-options" to show the option help. Renamed a few recipes: "show-options" -> "show-configuration", "recipes" -> "list-recipes", "options" -> "list-options", "help" -> "help-recipes". Added new general recipes "show", "list", and "help". Side note: We use the string utilities here, see previous commit.


type: ci
user: aku
comment:
  Fixed gui todo: Clear work database after a run, allow multiple calls of the same recipe/goal/action.


type: ci
user: aku
comment:
  Start on extending the gui to allow the editing of the configuration, i.e. options. The ground was started on this with commits [4946938a63], and [571812bd8d]. Current change: Moved the creation of the action part of the gui into a semi-megawidget.


type: ci
user: aku
ecomment:
  Added outline of the new gui structure, using a notebook and its tabs.
  Moved exit handling out of the action tab.
  Moved install path to the configuration tab.
  Musing about using multiple action tabs, one per 'category' of actions ...
  If yes, not yet, focus is on the options now.

comment:
  Start on extending the gui to allow the editing of the configuration, i.e. options. The ground was started on this with commits [4946938a63], and [571812bd8d]. Current change: Moved the creation of the action part of the gui into a semi-megawidget.


type: ci
user: aku
comment:
  Option gui complete, in a basic form.

  options:	Allow multiple onchange hooks.
  	   	Added command to query type.

  ovalidate:	Extended to allow specification of gui scripts,
  	   	i.e. option type specific code. Reworked the standard
  	   	types (added code, different names).

  doc.tcl:	Updated the option definitions.
  testsuite.tcl:
  tool.tcl:
  options.tcl:

  gui.tcl:	Created the configuration panel.
  		Most of the setup is hidden in the
  		option type definitions.
  		Dropped the old INSTALLPATH code.


type: ci
user: andreask
comment:
  Tweak, plus structuring comments. Noted that io/util are not complete, missing docs for some commands still.


type: ci
user: aku
comment:
  Fix bug in tool handling. Abort recipe when a required tool is not found. And note how our search is incomplete when a validator is used.


type: ci
user: aku
comment:
  Starting to fill out the benchmarking support. Basic outline like for tests. Needs still work, mainly in the benchmark execution itself, and the communication of progress and results, including saving the latter.


type: ci
user: andreask
comment:
  Shifted .kettle dot-file to dot-directory, and look inside for the file containing the standard options.


type: ci
user: andreask
comment:
  Removed application parts of libbench, and moved pieces to utilities. The generated timings look off... Should trial current actuall tclbench for comparison.


type: ci
user: andreask
comment:
  Extended benchmark handling with options to filter which to run, and setting the default iteration count.


type: ci
user: andreask
comment:
  With Tclx capture INT, TERM signals, i.e. Control-C, ^C and exit cleanly. Added atexit handler support. Used to ensure cleanup of temp files and directories, outside of the basic try/finally handling.


type: ci
user: andreask
comment:
  Redone 'kettle recurse' to not start immediately, but define proper recipes for the found children and recipe sets. Note: Help is not nice yet.


type: ci
user: andreask
comment:
  Modified the test and bench handling to cover the case of using a user specified install directory, which is not deleted. Enables better debugging as it leaves the install behind, for gdb, etc.


type: ci
user: aku
comment:
  Better check for special "args" argument in the generator for wrong#args messages, plus fix of the replacement string.


type: ci
user: aku
comment:
  Fix issues with multiple test files. Ensure vertical alignment, plus some per-file state initialization. Further added code to be more robust if a test file does not run cleanupTests, thus does not provide a summary line. We maintain our own counters and fake the information when needed.


type: ci
user: andreask
comment:
  New doc feature: Support for putting embedded docs into gh-pages branch of a git-based project. github uses this branch for per-project websites.


type: ci
user: andreask
comment:
  Path scanning change. Skip core dumps. Recognized by name (for now). The (cri)tcl-package-file predicates check the whole file, and load it into memory. Bad idea for something as large as core dumps. An alternative solution would be to snarf pieces of fileutil::type and skip anything reported as "binary".


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=a5b2810cfcb0e541&n=4 | a5b2810cfcb0e541]: Cancel symbolic tag "kettle-1".


type: ci
user: andreask
comment:
  Modified the critcl support code to highlight warnings coming out of the critcl log. For direct use of the critcl (app) packages an interceptor for the output is used. This will work only for critcl 3.1.7 and higher, which actually uses the intercepted command for output. Similarly only critcl 3.1.7 and higher will actually put warnings into its log.


type: ci
user: andreask
comment:
  Expanded path layer: Higher order command to walk a path up until root, and testing each with predicate. Used to implement tests if a directory is in a git or fossil checkout.


type: ci
user: andreask
comment:
  Doc generator code modified to allow dtplite as path external app and app-as-package. Further modified to detect a fossil checkout and generate a proper home link for the embedded documentation.


type: ci
user: andreask
comment:
  Reworked the progressbar animation to use Erase(to)EOL for clear output instead of simulating this by padding with spaces to overwrite previous characters. Needs testing.


type: ci
user: andreask
comment:
  Reworked the kettle comdline to make -f optional, enabling /usr/bin/env for the hash bang line of build.tcl scripts


type: ci
user: andreask
comment:
  Extended the meta data handling. Added recipe allowing the quick insertion of a meta data template into Tcl packages and applicatrions without any, to be completed manually.


type: ci
user: andreask
comment:
  Extended cmdline with ability to directly invoke commands (@* format). First command to generate simple build.tcl files


type: ci
user: andreask
comment:
  Fixed the meta-data code to generate a proper message again, when no user information is found at all.


type: ci
user: aku
comment:
  Completed testsuite scanner, now named 'testcases'. Added 'testcheck' reporting on duplicate names. Extended 'test' with --single mode to run each test case in its own process, with no others.


type: ci
user: andreask
comment:
  Extended testsuite processing. Now capture failures in setup and cleanup code blocks of test cases. Fixed handling of test case result blocks, preserving empty lines and trailing whitespace.


type: ci
user: andreask
comment:
  Started work on scanning a testsuite for problems (dup test cases). Currently the code simply reports the test names.


type: ci
user: andreask
comment:
  Extended meta data support to cover Tcl script applications. Reworked data structures, internals. Extended meta data for kettle application and package itself.


type: ci
user: andreask
comment:
  Added standard recipe for re-installation of packages, etc. A sequence of uninstall followed by install.


type: ci
user: andreask
comment:
  Extended the handling of Tcl meta-data. Insert VC information (type, revision). See if we can do the same for critcl based packages.


type: ci
user: andreask
comment:
  Added author information, and heuristics to auto-generate a location from "fossil remote" information.


type: ci
user: andreask
comment:
  Added missing arg protections to various stream command, caused double-subst and crash on command-like output from testsuites.


type: ci
user: andreask
comment:
  Extended testsuite handling. tcltest options are now available through kettle, albeit using --foo instead of -foo.


type: ci
user: andreask
comment:
  Continued work on the doc templates. Fleshed out, properly organized. Plus @help in the special section for proper command help


type: ci
user: andreask
comment:
  Fix bug in meta data handling. With files now always local to root, root is needed to read the file.


type: ci
user: andreask
comment:
  More commands to handle requirements and keywords. Unified access to various files holding settings.


type: ci
user: andreask
comment:
  Trunk merge ... The bugfix in trunk we merge is actually essentially a backport of a change we made here on the branch first. Not making the backport was the bug.


