As of yesterday, *all* my patches had been merged into OpenSSL HEAD, in preparation for the OpenSSL 1.1 Beta 1 release this week.
There is only one more patch outstanding in my OpenSSL git tree. Do those statements seem self-contradictory to you? Well, they're not quite. The patches *were* merged, but one was then reverted because it was utterly hosed and broke the build for fairly much *everyone* except the UEFI target. Bad dwmw2. No biscuit. Why was it so broken? Well, it wasn't because I'm a *complete* muppet — it was correct when I first committed it, and I *tested* it in a native Linux build at that point too, as well as within the EDK2 build: http://git.infradead.org/users/dwmw2/openssl.git/commitdiff/929ae044cf7 However, a subsequent change in the upstream tree affected my patch: http://git.infradead.org/users/dwmw2/openssl.git/commitdiff/8731a4fcd#patch7 At some point I stupidly did a 'git pull --rebase' or something else that you should never do. In rebasing, I then failed to correctly fix up the changes, leaving it broken. I did a quick smoke-test rebuild (under EDK2 only, it seems) of the rebased tree, but didn't spot the error. Now, you can point out that this involved user error on my part when I did the rebase — but there are a number of problems with putting it down to that alone: Firstly, it's a *predictable* error. You are *never* paying as much attention (to each and every commit) when you rebase, as when you create them in the first place. A process should not introduce *predictable* user errors. In fact, although in *this* case it needed user error, there are cases where the tools *will* handle the merge automatically, but the code is still broken — you're not handling a new enum value that someone else has added in the upstream you're rebasing onto, or something like that. So the patch *applies* OK, but doesn't work. Or works most of the time but has broken corner cases. And the most important thing is that when this happens during a rebase, the history — which is the single most important thing that a version control system exists to preserve! — is lost. When the breakage is discovered, there's no way to go back and see "it works <here> and then the merge <here> was broken". You just end up with a false history in which a given commit *never* worked. Now, this one is a trivial (and recent) example, and it's easy enough to sort out and even *find* the original commit in my local tree which was subsequently discarded in the rebase. I'm using it because it was *me* who screwed up, and I can rant at length about the *practice* of rebasing, without making some other poor sod feel bad. We all screw up. The point is to use the tools to help us *cope*. Although *this* one was simple, it *does* happen that more complex submissions also end up broken even by the time they are merged. And when that happens, if the tools are being used *properly*, you can *see* that it actually worked on the commit just *before* it was merged, and it was broken in the merge. And you can look for the cause — what changed in the upstream, between the version that the work was based on, and the tree it was merged into. This isn't a purely theoretical concern. I've *done* this. And I've done it as a third party with little familiarity with the specific code in question, a *long* time after it was merged. Because it was only a relatively esoteric corner case that was broken, so nobody noticed — the kind of thing you think about while you're *writing* the code, and never again. Especially not while rebasing. (Which is also an argument for decent unit tests, mind you, but that's a different rant and one on which I'm even *more* hypocritical.) So please, DO NOT REBASE submissions onto the latest master. Use the tools properly as they were designed to be used — put any non-trivial work into a tree and send it as a pull request. Sure, send the patches to the list for review *too*, but that shouldn't be how they actually get in. Note: using 'git rebase --interactive' just to add Reviewed-by: and similar tags is acceptable. But don't actually rebase onto a different base. Keep it where it was, and *merge* it. -- David Woodhouse Open Source Technology Centre [email protected] Intel Corporation
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

