fix(tools): h5rs diff compares every name of a hard-linked object
The path walk skipped the second hard link to an object, so a file that shares one dataset between /x and /y differed from a file holding two identical copies: "</y> exists only in <B>", exit 1, where h5diff exits 0. For a hard-linked group every member was reported the same way. diff now enumerates every path below the start object (a hard link back to an ancestor is recorded but not descended into), so each name is compared. A group whose links cannot be read is now an error instead of an empty group. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -145,10 +145,14 @@ $ h5rs diff -p 0.01 a.h5 b.h5 # |a - b| / |a| > 1% is a difference
|
||||
Exit status: 0 no differences, 1 differences, 2 error — the same as h5diff's
|
||||
on the cases `diff_exit_codes_match_h5diff` runs. Compared: which objects
|
||||
exist, their kinds, datatypes and shapes, attribute sets and values, dataset
|
||||
values, and soft/external link targets. Two differences from h5diff, on
|
||||
purpose: objects that cannot be compared (different shapes or datatype
|
||||
classes) count as a difference (h5diff warns and exits 0), and two NaNs are
|
||||
equal.
|
||||
values, and soft/external link targets. Every path is compared: an object
|
||||
hard-linked under two names is compared under both, with everything below
|
||||
it, so a file that shares one object between two names equals a file that
|
||||
stores two identical copies. Differences from h5diff, on purpose: objects
|
||||
that cannot be compared (different shapes or datatype classes) count as a
|
||||
difference (h5diff warns and exits 0); two NaNs are equal; and the members
|
||||
of a group reached by a second hard link are compared (h5diff lists them in
|
||||
one file only and exits 1).
|
||||
|
||||
## `h5rs check`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user