Aggregate constituents are derivations. However there can be multiple builds in an evaluation that have the same derivation, i.e. they can alias each other (e.g. "emacs", "emacs24" and "emacs24Packages.emacs" in Nixpkgs). Previously we picked a build arbitrarily for the AggregateConstituents table. Now we pick the one with the shortest name (e.g. "emacs").
JCJJKRWQN7XLV65FQEW4YBGI24IP6PFILISCMDWPXT7YEMEMDUAAC
JTHWA6AM6UU4ZVWBH2JKUVFR743LVIMRU7IMDUVDLN4M3K7MR4XQC
RXVJFQ5AV3WME4HDVBPSRCALQTXROT4KQPOQVO6KTWTBNZIZZGPAC
FTPCV25MOLQUNR5CAR453W7T7QTUZRLPLEOSDZ5HSDFAXQZVHOYQC
OOQ2D3KCLFPYNAN253PHWLBQMB6OMO2KYQWQXLTP65SQAYZWQ5LAC
3XTHEUMP2ZOMPQWE3S5QWHIHCEJNEXGDPQB3JUVZFPS3RFMY455QC
N22GPKYTOLZLBGTGDATQDVZ4R5APZEAOIA7L32X4UXBH4XNI7MWAC
while (my ($id, $x) = each %buildMap) {
$ev->jobsetevalmembers->create({ build => $id, isnew => $x->{new} });
}
# Create AggregateConstituents mappings. Since there can
# be jobs that alias each other, if there are multiple
# builds for the same derivation, pick the one with the
# shortest name.
$ev->jobsetevalmembers->create({ build => $id, isnew => $x->{new} });
$drvPathToId{$x->{drvPath}} = $id;
my $y = $drvPathToId{$x->{drvPath}};
if (defined $y) {
next if length $x->{jobName} > length $y->{jobName};
next if length $x->{jobName} == length $y->{jobName} && $x->{jobName} ge $y->{jobName};
}
$drvPathToId{$x->{drvPath}} = $x;