Bugs Everywhere Bug List

Bug: bea/814

ID : 814e39c0-68ee-4165-9166-19e2aee9c07d
Short name : bea/814
Status : open
Severity : minor
Assigned :
Reporter :
Creator : W. Trevor King <wking@drexel.edu>
Created : Sun, 03 Jan 2010 13:12:38 +0000
Summary : Add Roundup-like flexibility

Comment: --------- Comment ---------
ID: d463e2d9-6dcc-41a4-a6b2-647fb3bddf88
Short name: bea/814/d46
From: W. Trevor King <wking@drexel.edu>
Date: Sun, 03 Jan 2010 14:16:55 +0000

The Roundup issue tracker
  http://roundup.sourceforge.net/
has been around for a while, and provides a nice, flexible design
  http://roundup.sourceforge.net/docs/design.html
What ideas from Roundup are worth incorperating in our setup?

Roundup's great strength is the flexibility of its data model and
range of generic support.  It's very easy to extend.  However, there
is only so far you can go with generic support.  Roundup lacks analogs
to the following Command subclasses (as far as I know):
  Diff
    Has per-issue logs, but no repository-wide summary
  Merge
  Commit
    No VCS backends, see http://issues.roundup-tracker.org/issue2550547
  Import_xml
  Serve
    Has HTML server, but no remote command-line access
Of course, none of these would be particularly hard to add to Roundup,
with the possible exception of VCS backends, which appears to be
in-progress anyway.  However, I really like the simplicity of
  `be init`
and the ability to postpone repository customization until you need
it.  So, can we trim down the BE internals to make BE more extensible
without sacrificing our nice default setup and its tools?  The problem
is, how to the commands do their thing if they don't know what they're
working with?

Say, for example, I want to run `be depend bugA bugB`, but my bugs
don't have blocks or blocked_by link properties.  That could be easily
handled by having each command would have to keep track of which
properties it needed and raise appropriate exceptions.

List, Show, Import_xml, etc. would presumably use templates to define
their output/input formats.

As far as postponed customization goes, it would be easy enough to
duplicate Roundup's schema.py and provide a default schema.py for
bugtracking.  This would improve our current system by keeping all the
configurable bits under version control from the start (equivalent to
setting _versioned_property(require_save=True) for all properties).

Another part of the difference between BE and Roundup seems to be due
to the initial backend selection.  Roundup is built on databases,
which encourages their keyed-Class approach with (property, value)
pairs of predefined types.  They use Classes for everything, down to
status values, etc., while we've built those sorts of things into
_versioned_property()s.
Benefits of Roundup approach:
  * easy to configure/alter/retrieve list of allowed values
  * no need to hard-code properties or resort to extra_strings
  * assigned values are actually links to centralized definitions
    - easy updates
Benefits of BE approach:
  * single file for all properties
    - one read and you're done
    - many file systems don't handle 'lots of tiny files' well
  * assigned values are actual values, not links to centralized defs.
    - easy to merge by hand, no need to look up references.
Since it would be fairly simple to add a merging tool that handled the
reference lookup transparently, we can move to a Roundup-like Class
structure by using our current mapfile implementation to store small
Classes.

Finally, would it be easier to merge these Roundup features into BE,
or merge the BE features into Roundup...


Comment: --------- Comment ---------
ID: 17d045d1-3b21-4d3d-8f81-29a5bbc5e6c1
Short name: bea/814/17d
From: W. Trevor King <wking@drexel.edu>
Date: Sun, 03 Jan 2010 16:02:57 +0000

> Roundup's great strength is the flexibility of its data model and
> range of generic support.  It's very easy to extend...
> ...
> As far as postponed customization goes, it would be easy enough to
> duplicate Roundup's schema.py and provide a default schema.py for
> bugtracking.  This would improve our current system by keeping all the
> configurable bits under version control from the start (equivalent to
> setting _versioned_property(require_save=True) for all properties).

How will we handle diffs between with revisions with different
schema.py?  This re-raises bea/ed5/c66 (bea/110/bd1), but we
_expect_ schema.py to evolve, while before we had expected on-disk
versions to stabilize.