I'm getting increasing pressure to provide Fossil with "drive-by-patch
workflow" capabilities.  By this I mean capabilities that make it easier
for random passers-by on the internet to contribute changes to a project.
GitHub provides that capability using pull-requests, for example.

I've started a new branch "DBP-workflow" to work on these ideas.

Among the enhancements I mgiht experiment with this week (assuming I am not
pulled off to work on SQLite problems that pop up unexpectedly) are the
following:

(1) Bundles.  A bundle is a single file (another SQLite database, of
course) that encapsulates one or more check-ins.  An unprivileged user can
clone a repo and make their own local changes, then package those changes
into a bundle to email to a developer for consideration.  The developer can
then import a bundle into a provide branch for examination.  Then either
purge that private branch or publish it, as appropriate.

(2) The ability to push/pull/clone individual branches.  (Currently, Fossil
push/pull/clone syncs absolutely everything).  Part of this will be the
ability to clone just a single branch beginning at a recent date, rather
than the entire history of the project - so that people who do not care
about the ancient history of a long-running project don't have to download
it all.  Another aspect to this is the ability to auto-sync with multiple
repositories, so that a user can auto-sync with branch A on repo X and with
branch B on repo Y, automatically and at the same time.

(3) The ability to purge individual checkins and/or branches from a
repository.  Purging is different from shunning.  Purged checkins can be
added back later, if wanted.  Purging is important to DBP workflows, I
think, in order to keep the amount of cruft in a repository under control.
The oft-requested "fossil uncommit" command would be just a special case of
purging.

(4) The ability for anonymous users to push their own prospective changes
as a new branch.  Anonymous pushes would be restricted to check-ins only
(not wiki or tickets or other artifacts) and only check-ins on new branches
- in other words anonymous users would not be allowed to push changes to
trunk or push tags against preexisting check-ins.  Anonymous pushes might
be held for moderation before being publicly accessible.  Anonymous pushes
might require the pusher to also submit repository-specific identification
information for verification purposes.  The identification information
might be just an email address, or it might include full contact
information and/or scans of signed copyright releases and/or scans of
proof-of-identity such as passports/id-cards, configurable according to the
policies of individual projects.  Identification information would be held
privately by repos and not synced or cloned, just as the "user" table is
currently private to a repo.

(5) A non-synced "graveyard" table containing purged and shunned artifacts,
in case those artifacts ever need to be resurrected.  This is a safety
mechanism that allows for an "unpurge" and also to recover lost content in
case a bug in the "purge" command removes more than intended from the
repository.

The foregoing is just an outline of my ideas, in case people are wondering
what the new DBP-workflow branch is all about.  It remains to be seen how
much of the above I actually manage to get done...
-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
fossil-dev mailing list
fossil-dev@lists.fossil-scm.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/fossil-dev

Reply via email to