I got a little way into this. The two attached patches are
preliminary work.
My proposed split is:
libguestfs.git
common -> git submodule libguestfs-common.git
generator/
lib/
all language bindings
C based tools (eg. virt-df, virt-edit, guestfish)
guestfs-tools.git
common -> git submodule libguestfs-common.git
virt-builder, virt-customize, virt-sparsify, virt-sparsify, etc
virt-v2v.git
common -> git submodule libguestfs-common.git
virt-p2v.git
[already done]
The current common/ subdirectory would become a git submodule. While
git submodules are awkward, they do solve this particular problem with
having common code shared across the repositories, there's only one
git submodule and it's under our control. It does mean that any time
there's a change to common/, we would need to add a commit to the
other 3 repos updating the submodule hash.
There are only 6 generated files which are not confined to the new
libguestfs.git. 4 files are needed by virt-customize and 2 by
virt-v2v (and these last 2 will probably go away in future). My
proposal (in patch 2/2) is that we simply copy these 6 files into the
common submodule. It's not very elegant but it only affects a tiny
fraction of all generated files, these ones are updated very
infrequently, and it solves the problem for now. A possible future
path would be to split the generator so there's a mini-generator for
virt-customize.
libguestfs-common.git can be created from libguestfs.git using 'git
filter-branch --prune-empty --subdirectory-filter common master'. I
tested this already and it seems to work.
The two other new repos can be created using the rather more complex
technique described here which I didn't try yet:
https://stackoverflow.com/questions/2797191/how-to-split-a-git-repository...
Previous discussion was in this thread over several months:
https://www.redhat.com/archives/libguestfs/2018-February/thread.html#00067
https://www.redhat.com/archives/libguestfs/2019-April/thread.html#00260
https://www.redhat.com/archives/libguestfs/2019-June/thread.html#00095
https://www.redhat.com/archives/libguestfs/2019-July/thread.html#00000
Rich.