Report system legacy

Geert Janssens janssens-geert at telenet.be
Tue Jun 25 14:09:26 EDT 2013


I have a question about how to treat old metadata. In particular when GnuCash is closed any 
open report is written to a meta file in .gnucash/books. Basically a report identifier and all 
modified options are stored.

Before GnuCash 2.4 this report identifier was the report's name. With 2.4 this changed to the 
report-guid. We still have some legacy code in our report system to be able to read the meta 
files generated in the 2.2 era. So when such an old meta file is encountered (for example when 
a user reopens a file now that hasn't been opened since 2.2.x), the reports will be properly 
restored.

This compatibility does add an important restriction in our code: report names have to be 
unique. Otherwise the wrong report may be restored instead. For standard and business reports 
included in GnuCash this is not really an issue. The constraint mostly limits the custom reports 
functionality (which I'm currently looking into).

Currently a user is not allowed to save a report without changing the name. This is an attempt 
to prevent duplicate report names. But it's already flawed: it's pretty easy to change a name 
twice to be able to save the report with an existing name anyway.

Rewriting this to properly prevent duplicate names is probably possible, but I'd rather move in 
the other direction: allow duplicate names in custom reports.

My motivations:
- I'm working on the uservoice request to allow to save a custom report without requiring to 
change the name first. I have partly rewritten the custom report code with this in mind: you can 
now easily rename a custom report directly in the dialog. That would require the same duplicate 
name checks and another dialog informing the user in case her name already existed.
- Allowing a user to save a report without changing the name under these restricting conditions 
is pretty awkward. The best I could come up with is automatically add some random suffix to 
the report name upon saving. But this random suffix then also appears on the report. This can 
be worked around, but these work-arounds quickly add a lot of complexity. Only to preserve 
compatibility with potentially old meta files.
- GnuCash 2.2 is two major releases back when 2.6 is released. We only guarantee backwards 
compatibility one major release back.

So I'd like to drop the restriction on duplicate report names. The consequence would be we 
can't guarantee anymore that reports stored in old meta files open correctly (that is with the 
proper options set). They may, but they may not. So I'd add a warning dialog in the code path 
that loads these old meta files, indicating that the report may or may not have been loaded 
properly.

Not that this doesn't affect the saved-reports file. It's almost impossible to end up in a situation 
where the saved reports are not handled properly due to dropping this constraint, because this 
file is versioned. When the code changed to use guids instead of names, the file's version was 
bumped. The code to convert from the old to the new format is still in place.

What do you think ?

Geert


More information about the gnucash-devel mailing list