60 std::map<wxString, std::vector<KIID_PATH>> byRefdes;
64 if( e.refdes.IsEmpty() )
69 if( e.refdes.EndsWith( wxS(
"?" ) ) )
72 byRefdes[e.refdes].push_back( e.id );
75 for(
const auto& [refdes, ids] : byRefdes )
83 f.
message = wxString::Format( wxS(
"Reference designator '%s' is used %zu times" ),
86 report.
failures.push_back( std::move( f ) );
120 constexpr int MAJOR_EPOCH_DELTA = 50000;
122 int maxV = std::max( { aAncestorVersion, aOursVersion, aTheirsVersion } );
123 int minV = std::min( { aAncestorVersion, aOursVersion, aTheirsVersion } );
125 if( maxV - minV >= MAJOR_EPOCH_DELTA )
131 wxS(
"Schema version spread between merge inputs is too large "
132 "(min=%d, max=%d). Refusing to merge." ),
134 report.
failures.push_back( std::move( f ) );
136 else if( maxV != minV )
142 wxS(
"Merge inputs use different schema versions "
143 "(ancestor=%d, ours=%d, theirs=%d)." ),
144 aAncestorVersion, aOursVersion, aTheirsVersion );
145 report.
failures.push_back( std::move( f ) );
VALIDATION_REPORT CheckSchemaVersions(int aAncestorVersion, int aOursVersion, int aTheirsVersion)
Schema-version compatibility check: every input to the merge must use a compatible serialization vers...
Reference-designator uniqueness over a flat list of (refdes, id) pairs.