From: Eric Sunshine Date: Fri, 20 Apr 2018 22:16:05 GMT Subject: Re: [PATCH v3] fast-export: fix regression skipping some merge-commits Message-ID: In-Reply-To: <20180420221231.4131611-1-martin.agren@gmail.com> On Fri, Apr 20, 2018 at 6:12 PM, Martin Ågren wrote: > 7199203937 (object_array: add and use `object_array_pop()`, 2017-09-23) > noted that the pattern `object = array.objects[--array.nr].item` could > be abstracted as `object = object_array_pop(&array)`. > > Unfortunately, one of the conversions was horribly wrong. Between > grabbing the last object (i.e., peeking at it) and decreasing the object > count, the original code would sometimes return early. The updated code > on the other hand, will always pop the last element, then maybe do the > early return without doing anything with the object. > > The end result is that merge commits where all the parents have still > not been exported will simply be dropped, meaning that they will be > completely missing from the exported data. > > Re-add a commit when it is not yet time to handle it. An alternative > that was considered was to peek-then-pop. That carries some risk with it > since the peeking and poping need to act on the same object, in a s/poping/popping/ > concerted fashion. > > Add a test that would have caught this. > > Reported-by: Isaac Chou > Analyzed-by: Isaac Chou > Helped-by: Johannes Schindelin > Signed-off-by: Martin Ågren