I've implemented 2.3 support with this PR. This was not a particularly easy task, as there are a number of inconsistencies in the project layout. It is also not easy to see the differences between the 2.2 and 2.3 code paths. I have a suggestion to refactor this repository such that the layout uses versions at the top level, e.g. something like:
common
v2/v2_1
v2/v2_2
v2/v2_3
v2/v2_3/idsearcher/...
v2/v2_3/json/reader.go (with a `Read` function)
v2/v2_3/json/writer.go (with a `Write` function)
v2/v2_3/rdf/reader.go (with a `Read` function)
Where each version contains all the version specific files. This avoids files growing uncontrollably like the idsearcher as every version increases (there are a number of files like this). It's also unclear when implementing a new version exactly which files need to be modified vs. copied.
There are also inconsistencies like the json package containing a writer and parser but separate packages for tvloader and tvsaver, there should be a common pattern here (I think the json package having a reader and writer is the better pattern). If things are split up by version, then this becomes even easier, as you just reference <version>/<format> and have access to a read and write functions and they don't even have to be renamed (just Read/Parse and Write), so these function names with 2_2 and 2_3 aren't things that show up in the diffs between the versions.
If all the code specific to a version was within a specific path, adding a new version would be as simple as copying the previous one and making appropriate changes. It would then be easy to see the differences between them using something like: diff v2/v2_2 v2/v2_3 --ignore-matching-lines='package v2_.'
This means for any consumer, all they would need to do is update the paths, like from something like v2_2 to v2_3, the other function calls would remain the same.
I would be happy to take on this refactoring if it is something that might be accepted.
I've implemented 2.3 support with this PR. This was not a particularly easy task, as there are a number of inconsistencies in the project layout. It is also not easy to see the differences between the 2.2 and 2.3 code paths. I have a suggestion to refactor this repository such that the layout uses versions at the top level, e.g. something like:
Where each version contains all the version specific files. This avoids files growing uncontrollably like the idsearcher as every version increases (there are a number of files like this). It's also unclear when implementing a new version exactly which files need to be modified vs. copied.
There are also inconsistencies like the
jsonpackage containing awriterandparserbut separate packages fortvloaderandtvsaver, there should be a common pattern here (I think thejsonpackage having a reader and writer is the better pattern). If things are split up by version, then this becomes even easier, as you just reference<version>/<format>and have access to a read and write functions and they don't even have to be renamed (justRead/ParseandWrite), so these function names with2_2and2_3aren't things that show up in the diffs between the versions.If all the code specific to a version was within a specific path, adding a new version would be as simple as copying the previous one and making appropriate changes. It would then be easy to see the differences between them using something like:
diff v2/v2_2 v2/v2_3 --ignore-matching-lines='package v2_.'This means for any consumer, all they would need to do is update the paths, like from something like
v2_2tov2_3, the other function calls would remain the same.I would be happy to take on this refactoring if it is something that might be accepted.