View Ticket
Not logged in
Ticket Hash: 5f9f516a22f5538aa862fea8fb0fa8ce470846c0
Title: Cannot commit changes: tree checksums before and after commit do not match
Status: Open Type: Code_Defect
Severity: Critical Priority:
Subsystem: Resolution: Open
Last Modified: 2009-11-24 19:46:04
Version Found In: d5695157d0
Description:
All action took place on a iMac with MacOS/X 10.5.7.

Here the receipt to provoke the error:
<verbatim>
wget http://www.qiao.in-berlin.de/t3xr2.zip
mkdir bug
cd bug
fossil new repos.fsl
fossil open repos.fsl
unzip ../t3xr2.zip
fossil add .
fossil com -nosign -m "Import failed"
</verbatim>
Fossil will answer with:
<verbatim>
New_Version: 19afb14b17676ebbd8b9060d4adb718a3ceb103f
fossil: tree checksums before and after commit do not match
</verbatim>

Please let me know, if you need further information or if I can help somehow ...

Thanks,
chi :-)

<hr><i>bharder added on 2009-06-13 15:45:23:</i><br>
These operations work fine on NetBSD 5.0, fossil version [5882d97495], on i386 (Pentium M).

<hr><i>chi added on 2009-06-13 16:54:48:</i><br>
Thank you bharder! Thru your remark I was finally able to spot the bug, but I don't have an idea, how to solve it!

In the archive there is a file <samp>Manifest</samp>. Now Fossil want to create an own file <samp>manifest</samp> where it stores some information. Unfortunately the MacOS/X' filesystem HFS+ is case insensitive per default! So the checkin's file <samp>Manifest</samp> and Fossil's own one <samp>manifest</samp> are considered the same. So after checkin, Fossil write its <samp>manifest</samp> thereby destroying a file that is part of the checkin! Fossil detect that and complain.

As Fossil do not need a file <samp>manifest</samp> (i.e. it can work without one), it should be taken into consideration, whether it should be possible to prevent the creation of the <samp>manifest</samp> and <samp>manifest.uuid</samp> files per default?

Ciao,
chi :-)

<hr><i>anonymous claiming to be kc added on 2009-11-16 14:11:54:</i><br>
In version d5695157d0-win32 same problem. Can't commit.

<hr><i>altufaltu added on 2009-11-17 01:59:54:</i><br>
As fossil creates a database in local directory when open command is run, it is preferred to save contents of manifest and menifest.uuid files in the database itself rather than separate files. These file names are too common.

That will keep things simple.


<hr><i>drh added on 2009-11-22 23:32:47:</i><br>
Fossil does not use the manifest or manifest.uuid files.  Those files
are created purely for the convenience of the application.

For example, the source code to fossil itself (which is stored as a fossil
repository) looks at the manifest and manifest.uuid files to get the date
and time and version information that is displayed when you type:
"fossil version".  And SQLite gets the information returned by the
sqlite3_sourceid() function in the same way.

<hr><i>eric added on 2009-11-24 19:46:04:</i><br>
checkin.c writes the two files, and could possibly have an option not to, but changing that means we need to know why it writes "manifest" and then reads it back again!