Unverified Commit 6f27cf11 authored by Silvan Mosberger's avatar Silvan Mosberger Committed by GitHub
Browse files

Improve compare performance (#377434)

parents 43de826f 80e01114
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -69,7 +69,6 @@ let
    groupByPlatform
    extractPackageNames
    getLabels
    uniqueStrings
    ;

  getAttrs = dir: builtins.fromJSON (builtins.readFile "${dir}/outpaths.json");
@@ -81,7 +80,7 @@ let
  # - values: lists of `packagePlatformPath`s
  diffAttrs = diff beforeAttrs afterAttrs;

  rebuilds = uniqueStrings (diffAttrs.added ++ diffAttrs.changed);
  rebuilds = diffAttrs.added ++ diffAttrs.changed;
  rebuildsPackagePlatformAttrs = convertToPackagePlatformAttrs rebuilds;

  changed-paths =
@@ -110,7 +109,7 @@ let
    );

  maintainers = import ./maintainers.nix {
    changedattrs = lib.unique (map (a: a.packagePath) rebuildsPackagePlatformAttrs);
    changedattrs = lib.attrNames (lib.groupBy (a: a.name) rebuildsPackagePlatformAttrs);
    changedpathsjson = touchedFilesJson;
  };
in
+15 −44
Original line number Diff line number Diff line
@@ -11,17 +11,13 @@ let
  changedpaths = builtins.fromJSON (builtins.readFile changedpathsjson);

  anyMatchingFile =
    filename:
    let
      matching = builtins.filter (changed: lib.strings.hasSuffix changed filename) changedpaths;
    in
    (builtins.length matching) > 0;
    filename: builtins.any (changed: lib.strings.hasSuffix changed filename) changedpaths;

  anyMatchingFiles = files: (builtins.length (builtins.filter anyMatchingFile files)) > 0;
  anyMatchingFiles = files: builtins.any anyMatchingFile files;

  enrichedAttrs = builtins.map (path: {
    path = path;
    name = builtins.concatStringsSep "." path;
  enrichedAttrs = builtins.map (name: {
    path = lib.splitString "." name;
    name = name;
  }) changedattrs;

  validPackageAttributes = builtins.filter (
@@ -45,14 +41,6 @@ let
    pkg: pkg // { maintainers = (pkg.package.meta or { }).maintainers or [ ]; }
  ) attrsWithPackages;

  attrsWeCanPing = builtins.filter (
    pkg:
    if (builtins.length pkg.maintainers) > 0 then
      true
    else
      builtins.trace "Package has no maintainers: ${pkg.name}" false
  ) attrsWithMaintainers;

  relevantFilenames =
    drv:
    (lib.lists.unique (
@@ -88,33 +76,16 @@ let

  attrsWithModifiedFiles = builtins.filter (pkg: anyMatchingFiles pkg.filenames) attrsWithFilenames;

  listToPing = lib.lists.flatten (
    builtins.map (
  listToPing = lib.concatMap (
    pkg:
    builtins.map (maintainer: {
      id = maintainer.githubId;
      packageName = pkg.name;
      dueToFiles = pkg.filenames;
    }) pkg.maintainers
    ) attrsWithModifiedFiles
  );

  byMaintainer = lib.lists.foldr (
    ping: collector:
    collector
    // {
      "${toString ping.id}" = [
        { inherit (ping) packageName dueToFiles; }
      ] ++ (collector."${toString ping.id}" or [ ]);
    }
  ) { } listToPing;
  ) attrsWithModifiedFiles;

  textForPackages =
    packages: lib.strings.concatStringsSep ", " (builtins.map (pkg: pkg.packageName) packages);

  textPerMaintainer = lib.attrsets.mapAttrs (
    maintainer: packages: "- @${maintainer} for ${textForPackages packages}"
  ) byMaintainer;
  byMaintainer = lib.groupBy (ping: toString ping.id) listToPing;

  packagesPerMaintainer = lib.attrsets.mapAttrs (
    maintainer: packages: builtins.map (pkg: pkg.packageName) packages