Check-in [6ecc392f1c]
Not logged in
Overview

SHA1 Hash:6ecc392f1caa77a3fb3665801a62d46e13a24213
Date: 2008-07-20 17:37:10
User: drh
Comment:Updated documentation to indicate that bug-tracking is now available. Preliminary documentation on bug-tracking. (Much more documentation is needed - also need documentation on how the wiki works.)
Timelines: ancestors | descendants | both | trunk
Other Links: files | ZIP archive | manifest

Tags And Properties
Changes
[hide diffs]

Added www/bugtheory.wiki version [6a29c06018]

@@ -1,1 +1,112 @@
+<h1>Bug-Tracking In <a href="index.wiki">Fossil</a></h1>
+
+A bug-report in fossil is called a "ticket".  Tickets are tracked
+separately from code check-ins (baselines).
+
+Some other distributed bug-tracking systems store tickets as files within
+the source tree and thereby leverage the syncing and merging capabilities
+of the versioning system to sync and merge tickets.  This approach is
+rejected in fossil for three reasons:
+
+  1.  Check-ins (a.k.a. "baselines") in fossil are immutable.  So if
+      tickets were part of the check-in, then there would no way to add
+      new tickets to a check-in as new bugs are discovered.
+
+  2.  Any project of reasonable size and complexity will generate thousands
+      and thousands of tickets, and we do not want all those ticket files
+      cluttering the source tree.
+
+  3.  We want tickets to be managed from the web interface and to have a
+      permission system that is distinct from check-in permissions.
+      In other words, we do not want to restrict the creation and editing
+      of tickets to developers with check-in privileges and an installed
+      copy of the fossil executable.  Casual passers-by on the internet should
+      be permitted to create tickets.
+
+Recall that a fossil repository consists of an
+unordered collection of <i>artifacts</i>.  (See the
+<a href="fileformat.wiki">file format document</a> for details.)
+Some artifacts have a special format, and among those are
+<a href="fileformat.wiki#tktchng">Ticket Change Artifacts</a>.
+One or more ticket change artifacts are associated with each
+ticket.  A ticket is created by a ticket change artifact.
+Each subsequent modification of the ticket is a separate artifact.
+
+The "push", "pull", and "sync" algorithms shared ticket change artifacts
+between repositories in the same way as every other artifact.  In fact,
+the sync algorithm has no knowledge of the meaning of the artifacts it
+is syncing.  As far as the sync algorithm is concerned, all artifacts are
+alike.  After the sync has occurs, the individual repositories must try
+to make sense of the meaning of the various artifacts for themselves.
+
+<h2>Interpretation Of Ticket Change Artifacts</h2>
+
+Every ticket change artifact contains (among other things)
+
+  *  a timestamp,
+  *  a ticket UUID, and
+  *  one or more name/value pairs.
+
+The current state of a ticket is found by replaying all ticket
+change artifacts with the same ticket UUID in timestamp order.
+For a given ticket, all values are initially NULL.  As each
+ticket change artifact is encountered, values are either replaced
+or appended, according to a flag on the name/value pair.  The current
+values for the fields of a ticket are the values that remain at the
+end of the replay process.
+
+To create a new ticket, on has merely to insert a ticket change
+artifact with a randomly generated ticket UUID.  The ticket UUID
+is a random 40-character lower-case hexadecimal number.  New
+ticket UUIDs should be chosen using good randomness so that two
+ore more users do not accidently cause a conflict by generating
+the same UUID.  The name/value pairs on the initial ticket change
+artifact are the initial values for the fields in the ticket.
+
+Amending a ticket means simply creating a new artifact with the
+same ticket UUID and with name/value pairs for those fields which
+are changing.  Fields of the ticket which are not being modified
+should not appear as name/value pairs in the new artifact.
+
+This approach to storing ticket state means that independently entered
+changes are automatically merged together when artifacts are shared
+between repositories.  Tickets do not branch.  This approach also makes
+it trivial to track the historic progression of changes to a ticket.
+
+In order for this scheme to work, the system clocks on machines that
+add new ticket changes artifacts have to be set close to reality.
+It is OK for a ticket change artifact timestamp to be off by a few
+minutes or even a few hours.  But if a timestamp on a ticket change
+artifact is off by months or years, it can seriously confuse the
+replay algorithm for determining the current ticket state.  There
+are techniques available to cause rogue artifacts to be ignored
+by fossil.  So if a ticket change artifact with a bad timestamp
+does get into a repository, it can be removed by an adminstrator.
+But the best approach is to take steps to insure that timestamps
+are approximately correct in the first place.
+
+<h2>Local Configuration</h2>
+
+The ticket change artifacts are part of the global state for a project.
+The global state is that which is shared between repositories during
+a sync.  Each repository also has local state which is not (normally)
+shared.  The name/value pairs for a ticket are part of global state,
+but the interpretation and display of that information is local state.
+Hence, each repository is free to set up its own ticket display and
+input formats and reporting rules according to its own particular needs.
+
+Each repository defines its own TICKET table in its database.  There is
+one row in the TICKET table for each unique ticket UUID.  The
+names of columns in the TICKET table correspond to the names in
+the name/value pairs of ticket change artifacts.  When running the replay
+algorithm, if a name/value pair is seen which has no corresponding column
+in the TICKET table, then that name/value pair is ignored.
 
+Each repository also defines scripts used to generate web pages for
+creating new tickets, viewing existing tickets, and modifying an
+existing ticket.  These scripts consist of HTML with an embedded
+scripts written an a TCL-like language called "TH1".  Each fossil
+repository is create with default scripts.  There is currently no
+documentation on the TH1 langauage.  Administrators wishing to
+customize their ticket entry, viewing, and editing screens should
+modify the default scripts to suit their needs.

Modified www/fileformat.wiki from [9be529e4b5] to [3dee4db541].

@@ -297,10 +297,11 @@
 argument to the W card is an integer which is the number of bytes
 of text in the wiki page.  That text follows the newline character
 that terminates the W card.  The wiki text is always followed by one
 extra newline.</p>
 
+<a name="tktchng"></a>
 <h2>5.0 Ticket Changes</h2>
 
 <p>A ticket-change artifact represents a change to a trouble ticket.
 The following cards are allowed on a ticket change artifact:</p>
 

Modified www/index.wiki from [a45f7bf59e] to [997d5488af].

@@ -2,27 +2,24 @@
 
 <p>
 Fossil is a new
 <a href="http://en.wikipedia.org/wiki/Revision_control">
 distributed software revision control system</a> that includes an integrated
-<a href="http://en.wikipedia.org/wiki/Wiki">Wiki</a> and an integrated
-<a href="http://en.wikipedia.org/wiki/Bugtracker">
-bug-tracking system</a> all in a single, easy-to-use, stand-alone
-executable.
-(NB: The bug-tracker component is not yet completely functional, but
-we expect it to be available soon.)
+<a href="../../../wiki_rules">wiki</a> and an integrated
+<a href="bugtheory.wiki">bug-tracking system</a> all in a single,
+easy-to-use, stand-alone executable.
 Fossil is
 <a href="http://www.fossil-scm.org/fossil/timeline">self-hosting</a>
 since 2007-07-21 on
 <a href="http://www.hwaci.com/cgi-bin/fossil/timeline">two separate servers</a>.
-You can download the lastest sources and
-compile it yourself using the instructions below.
+You can download the <a href="../../../timeline">lastest sources</a> and
+<a href="build.wiki">compile it yourself</a>.
 Or you can grab
 <a href="http://www.fossil-scm.org/download.html">precompiled binaries</a>.
 </p>
 
-<p>Design Goals For Fossil:</p>
+<p>Features Of Fossil:</p>
 
 <ul>
 <li>Supports disconnected, distributed development (like
 <a href="http://kerneltrap.org/node/4982">git</a>,
 <a href="http://www.monotone.ca/">monotone</a>,
@@ -31,18 +28,21 @@
 or client/server operation (like
 <a href="http://www.nongnu.org/cvs/">CVS</a> or
 <a href="http://subversion.tigris.org/">subversion</a>),
 or operations on local repositories,
 or all three at the same time</li>
-<li>Integrated bug tracking and wiki, along the lines of
+<li>Integrated <a href="bugtheory.wiki">bug tracking</a> and
+<a href="../../../wiki_rules">wiki</a>, inspired by
 <a href="http://www.cvstrac.org/">CVSTrac</a> and
-<a href="http://www.edgewall.com/trac/">Trac</a>.</li>
+<a href="http://www.edgewall.com/trac/">Trac</a> but enhanced to
+support distributed, disconnected operation.</li>
 <li>Built-in web interface that supports deep archaeological digs through
 the project history.</li>
 <li>All network communication via
-<a href="http://en.wikipedia.org/wiki/HTTP">HTTP</a>
-(so that everything works from behind restrictive firewalls).</li>
+<a href="http://en.wikipedia.org/wiki/HTTP">HTTP</a> with
+<a href="quickstart.wiki#proxy">proxy support</a>
+so that everything works from behind restrictive firewalls.</li>
 <li>Everything (client, server, and utilities) is included in a
 single self-contained executable - trivial to install</li>
 <li>Server runs as <a href="http://www.w3.org/CGI/">CGI</a>, using
 <a href="http://en.wikipedia.org/wiki/inetd">inetd</a>/<a
  href="http://www.xinetd.org/">xinetd</a>, or using its own built-in,
@@ -91,11 +91,11 @@
 <li><a href="quickstart.wiki">Quick Start</a> guide to using fossil
 <li>Fossil supports <a href="embeddeddoc.wiki">embedded documentation</a>
     that is versioned along with project source code.</li>
 <li>The <a href="selfcheck.wiki">automatic self-check</a> mechanism
 helps insure project integrity.</li>
-<li>Fossil contains a [/wiki | built-in wiki].</li>
+<li>Fossil contains a <a href="../../../wiki">built-in wiki</a>.</li>
 <li>There is a
     <a href="http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users">
     mailing list</a> available for discussing fossil issues.</li>
 </ul>