On Fri, Apr 20, 2018 at 6:12 PM, Martin Ågren <martin.agren@xxxxxxxxx> 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 <Isaac.Chou@xxxxxxxxxxxxxx> > Analyzed-by: Isaac Chou <Isaac.Chou@xxxxxxxxxxxxxx> > Helped-by: Johannes Schindelin <Johannes.Schindelin@xxxxxx> > Signed-off-by: Martin Ågren <martin.agren@xxxxxxxxx>