I sent out an earlier email [1] that discusses the idea of a submodule
ref backend that mirrors the superproject. Basically, if this backend is
used (for example, through a configuration option), the submodule itself
will not store any "refs/..." refs, but will check the gitlink of the
commit of the ref of the same name in the superproject. For example, if
the superproject has at refs/heads/foo:
superproject/
sub [gitlink -> 1234...]
and at refs/heads/bar:
superproject/
sub [gitlink -> 5678...]
Inside sub, "git rev-parse foo" will output "1234...", and "git rev-parse
bar" will output "5678...", even though "foo" and "bar" are not defined
anywhere inside sub.
(The submodule handles refs that do not start with "refs/" - for
example, HEAD and FETCH_HEAD - like usual.)
[1] also describes what happens when the submodule attempts to write to
any "refs/..." ref.
For those interested, here's what such an implementation might look
like, and a test to demonstrate such functionality. I have partial
read-only functionality - a lot of it still remains to be done.
[1]
https://public-inbox.org/git/[email protected]/
Jonathan Tan (2):
submodule: refactor acquisition of superproject info
submodule: read-only super-backed ref backend
Makefile | 1 +
refs.c | 11 +-
refs/refs-internal.h | 1 +
refs/sp-backend.c | 261 +++++++++++++++++++++++++++++++++++++++++
submodule.c | 107 +++++++++++------
submodule.h | 5 +
t/t1406-submodule-ref-store.sh | 26 ++++
7 files changed, 374 insertions(+), 38 deletions(-)
create mode 100644 refs/sp-backend.c
--
2.15.0.531.g2ccb3012c9-goog