View Ticket
Not logged in
Ticket UUID: 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
All action took place on a iMac with MacOS/X 10.5.7.

Here the receipt to provoke the error:

mkdir bug
cd bug
fossil new repos.fsl
fossil open repos.fsl
unzip ../
fossil add .
fossil com -nosign -m "Import failed"
Fossil will answer with:
New_Version: 19afb14b17676ebbd8b9060d4adb718a3ceb103f
fossil: tree checksums before and after commit do not match

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

Thanks, chi :-)

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

chi added on 2009-06-13 16:54:48:
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 Manifest. Now Fossil want to create an own file manifest where it stores some information. Unfortunately the MacOS/X' filesystem HFS+ is case insensitive per default! So the checkin's file Manifest and Fossil's own one manifest are considered the same. So after checkin, Fossil write its manifest thereby destroying a file that is part of the checkin! Fossil detect that and complain.

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

Ciao, chi :-)

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

altufaltu added on 2009-11-17 01:59:54:
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.

drh added on 2009-11-22 23:32:47:
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.

eric added on 2009-11-24 19:46:04:
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!