Using submodules for third_party/
Jelmer Vernooij
jelmer at samba.org
Sat Dec 6 16:57:24 MST 2014
At the moment we're manually bundling a bunch of third party libraries
in third_party/. Rather than keeping (usually partial) copy of these
libraries in our Git repository, I would propose using git
submodules where possible (in other words, where the upstream is using
git). Submodules have come a long way since they were originally
introduced in Git.
Using submodules would have the following advantages. Mainly:
* it is easy to avoid bundled third party libraries by simply not
running 'git submodule init'.
* easy to review updates of upstream revisions we bundle; updating a
submodule shows up as a one-line diff. This means we can be sure
we're using an unmodified upstream revision; at the moment this is
hard to verify. You have to manually pull down a copy to verify that
the changes being made to the copy of a third party library are
the same as in the upstream repo.
Some other nice benefits:
* we're sure we always ship the pristine upstream source; what the
system version would provide too
* easy to update, allows killing update-external.sh
* reduces unnecessary growth of our own git repo :)
There are two minor downsides I can think of:
* after checkout, it is necessary to run 'git submodule init' to
do the initial checkout of submodules and then run 'git submodule
update' whenever there are changes to the submodules. This
can be avoided by setting the 'fetch.recurseSubmodules' setting in
Git to 'yes'.
* if the upstream repository is down for some reason, you can't check
out the third party library. We could work around this by hosting
our own clone of third party libraries on git.samba.org.
That said, I don't think such a workaround is necessary. In the rare
cases that the upstream repository is down, users can always install the
system version of an external library (since we would only use
submodules for third party libraries).
This also only affects new checkouts and fetches of changes to the
submodules. If the submodule reference doesn't change, there is no
need for updates.
Thoughts?
Jelmer
--
Jelmer Vernooij <jelmer at samba.org> - https://jelmer.uk/
More information about the samba-technical
mailing list