(if you never used the "Upstream-ID:" markers in our commit messages
and
are not morbidly curious, then feel free to stop reading now).
I've just switched the git repository that portable OpenSSH uses
to cluster OpenBSD CVS commits from one that was converted using
"git cvsimport" to one that is maintained using cvs2gitdump[1]
I've explained the background in the commit message that marks
the point at which the switch happens, so rather than repeat
myself, I'll just paste it below ^_^
If you have any questions, please ask me. Here's my attempt at
preempting a few:
q: Why not use the OpenBSD git conversion[2] directly?
a: Mostly because it isn't real-time and I like being able to sync
changes from upstream to portable instantly. This is especially
important at release time, when lots of changes happen quickly.
q: Why not figure out what was going wrong with git cvsimport?
a: I started to but it was obviously going to be a long yak-shave
involving git-cvsimport (a Perl script), the old version of cvsps
that it demands and CVS itself. cvs2gitdump is 1/2 the length of
git-cvsimport alone, considerably more readable (and therefore
debuggable) and works with the repository RCS files directly.
q: Why not do tree surgery to graft the git-cvsimport history to
a repository maintained by cvs2gitdump?
a: 1) I don't know whether it would work properly,
2) I couldn't be bothered to find out (I'd rather spend my time
working on OpenSSH than fighting infrastructure), and
3) unlike git-cvsimport, cvs2gitdump generates histories and
commit hashes that are stable between imports, so it provides
a more reproducible and canonical base to build on. That
would be lost if I tried to graft the two toghether.
[1] https://github.com/yasuoka/cvs2gitdump
[2]
commit eb9c582b710dc48976b48eb2204218f6863bae9a
Author: Damien Miller <djm at mindrot.org>
Date: Tue Oct 31 00:46:29 2017 +1100
Switch upstream git repository.
Previously portable OpenSSH has synced against a conversion of OpenBSD's
CVS repository made using the git cvsimport tool, but this has become
increasingly unreliable.
As of this commit, portable OpenSSH now tracks a conversion of the
OpenBSD CVS upstream made using the excellent cvs2gitdump tool from
YASUOKA Masahiko: https://github.com/yasuoka/cvs2gitdump
cvs2gitdump is considerably more reliable than gitcvsimport and the old
version of cvsps that it uses under the hood, and is the same tool used
to export the entire OpenBSD repository to git (so we know it can cope
with future growth).
These new conversions are mirrored at github, so interested parties can
match portable OpenSSH commits to their upstream counterparts.
https://github.com/djmdjm/openbsd-openssh-src
https://github.com/djmdjm/openbsd-openssh-regress
An unfortunate side effect of switching upstreams is that we must have
a flag day, across which the upstream commit IDs will be inconsistent.
The old commit IDs are recorded with the tags "Upstream-ID" for
main
directory commits and "Upstream-Regress-ID" for regress commits.
To make it clear that the commit IDs do not refer to the same
things, the new repository will instead use "OpenBSD-ID" and
"OpenBSD-Regress-ID" tags instead.
Apart from being a longwinded explanation of what is going on, this
commit message also serves to synchronise our tools with the state of
the tree, which happens to be:
OpenBSD-ID: 9c43a9968c7929613284ea18e9fb92e4e2a8e4c1
OpenBSD-Regress-ID: b33b385719420bf3bc57d664feda6f699c147fef