There is a file-format enhancement to Fossil that seeks to make Fossil run
more efficiently on projects with a large number of files in each checkout.
Help in testing this enhancement will be appreciated.

Fossil has been working great on projects with a thousand files or less in
each checkout (which is to say, on most open-source projects).  But some
recent experiments with projects that have over 60,000 files in each
checkout revealed inefficiencies.  A small backwards-compatible enhancement
to the file format is needed to address those inefficiencies.

With each check-in, Fossil constructs a "manifest" which is a file listing
all other files that are part of the check-in.  The manifest works great for
smaller projects, but when the number of files gets large, the overhead of
handling the manifests becomes a problem. The present enhancement is to
allow a check-in to be a "delta-manifest".  A delta-manifest, instead of
recording every file in the check-in, only records the files that have
changed from some prior check-in.  Delta manifests are usually much, much
smaller than regular manifests (called "baseline-manifests") and can be
processed more quickly.

In the experimental enhanced Fossil, a delta-manifest is generated instead
of a baseline-manifest if the delta-manifest is less than 1/125th the size
of the baseline-manifest.  The 125 threshold has been experimentally
determined to give good results.

Other changes in the experimental Fossil include a new "repo-cksum"
setting.  By doing:

    fossil setting repo-cksum off

Fossil will skip a lot of cross-checking designed to detect errors early and
prevent a software bug from causing loss-of-work.  Additional information
about these cross-checks can be found on the
http://www.fossil-scm.org/fossil/doc/tip/www/selfcheck.wiki webpage. The
repo-cksum is enabled by default and we recommend that you leave it on where
practical.  But it does present a performance burden for large projects and
can be turned off for those cases, if necessary.

Finally, the experimental Fossil no long automatically generates the
"manifest" and "manifest.uuid" files in the root directory of each
check-out.  Those files were never used by Fossil - they were generated for
the convenience of the application.  The makefiles for both  Fossil itself
and for SQLite depend on the manifest and manifest.uuid files being
present.  But other projects found them annoying, so they are now off by
default.  Use the "fossil setting manifest on" command to enable them.

 The enhancements are currently on the "experimental" branch:

    http://www.fossil-scm.org/fossil/timeline?r=experimental

Unix users should be able to download and build an experimental version
themselves.  Windows users are encouraged to do the same if they are able,
but for those that do not have a suitable build environment, a precompiled
binary is made available at:

    http://www.fossil-scm.org/fossil-w32-201010192027.zip

It will be very helpful if you can try out this experimental Fossil and
report both successes and failures.  This is a great opportunity for you to
contribute to the Fossil project even if you don't have the skills or desire
to go code diving.

Some additional testing hints:

To create a dummy repository for testing purposes, copy some existing
repository then "detach" it:

     cp fossil.fossil test.fossil
     fossil test-detach -R test.fossil

By "detaching" the test repository, you eliminate the possibility of
accidentally syncing changes you commit to the test repository into your
real repository.

Other options that you might find useful:

     fossil commit --delta ...
     fossil commit --baseline ...
     fossil commit --test ...

The --delta option to the commit command forces the generation of a
delta-manifest even if Fossil would prefer to do a baseline manifest.
Similarly, --baseline forces the generation of a baseline-manifest even if
Fossil would prefer a delta.  The --test argument to commit causes the
commit to be a dry-run.  Nothing is actually committed.  Instead, the
manifest is printed on standard output.

If you do a lot of testing or experimentation with Fossil, another
command-line option you might find useful is --sqltrace.  That option (which
works with all commands) prints all SQL statements that Fossil evaluates as
they are evaluated.

Thanks for testing out the recent Fossil changes.  Please be sure to report
either success or failure (whichever you encounter) with the new Fossil to
this mailing list, or directly to me at d...@sqlite.org.

-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to