So we've thought about it for some time, and I really need you to
start reviewing the code now.
I'll just summarize what we've discussed so far:
1. The malleability argument doesn't hold, because we're proposing a
link object with optional fields.
2. The local-fork argument doesn't hold, because users will be
rebasing changes to the link object in exactly the same way as they
currently do with the blob object .gitmodules.
3. The worktree argument doesn't hold, because we're proposing to
treat the link object as nothing more than a blob object that can be
parsed by git-core. It will stage and unstage just like a blob.
Sure, it's not accessible directly by the filesystem: so what? What
is the difference does `emacsclient .gitmodules` versus `git edit-link
clayoven` make to the end-user?
4. The diff-confusion argument is just another by-the-way, but it
doesn't really hold either. Currently, we see:
- Subproject commit b83492
+ Subproject commit 39ab2f
(with diff.submodule set to log, we can actually see the log of the
submodule between these two commits. With links, we will see:
- checkout_rev = b83492
+ checkout_rev = 39ab2f
There's nothing that prevents us from respecting diff.submodule (some
minor glue code will have to be written; that's all).
*. There is actually one thing that .gitmodules does better than
links. foreach. It's trivial to implement with .gitmodules and hard
to implement with links: with .gitmodules, the paths of all the
submodules are in one place. But with links, we'll have to
unpack_trees() every tree in the entire repository, and dig through it
to find all the link objects to initialize. Basically, inefficient
and inelegant. However, I don't think this is a big problem in
practice, since this is not exactly a common operation: I'd probably
want to recurse-submodules once at clone time.
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html