* Speed up manifest generation.

[?]
Feb 26, 2009, 4:57 PM
BDSD2JLV4V4I52SE7MCZLYNDC4XU27ZNH7TYKLT7CA7YR5WRMQBAC

Dependencies

  • [2] 2T42QGZD * Register builds as GC roots so they don't get deleted.
  • [3] 2JQ7WEFM
  • [4] 5NO7NCKT * Refactoring.
  • [5] IWVA2P2Y * Generate manifests on demand. Next step: generate NAR archives on
  • [6] NYC3LZKH * Generate NAR archives on the fly. Necessary for producing channels
  • [7] AFTXA575 * $HYDRA_DATA environment variable.
  • [8] Y35C6GHH * One-click installs.
  • [9] ZRBXLKFO
  • [10] IN272KZW * Automatically keep all builds in the latest successful release in
  • [*] 2GK5DOU7 * Downloading closures.
  • [*] WZ3AEJ67 * hydra_update_gc_roots.pl registers build outputs that should be kept

Change contents

  • replacement in src/Hydra/lib/Hydra/Helper/Nix.pm at line 10
    [4.619][4.619:675]()
    isValidPath getHydraPath getHydraDBPath openHydraDB
    [4.619]
    [2.17]
    isValidPath queryPathInfo
    getHydraPath getHydraDBPath openHydraDB
  • edit in src/Hydra/lib/Hydra/Helper/Nix.pm at line 23
    [13.374]
    [4.298]
    }
    sub queryPathInfo {
    my $path = shift;
    # !!! like above, this breaks abstraction. What we really need is
    # Perl bindings for libstore :-)
    open FH, "</nix/var/nix/db/info/" . basename $path
    or die "cannot open info file for $path";
    my $hash;
    my $deriver;
    my @refs = ();
    while (<FH>) {
    if (/^Hash: (\S+)$/) {
    $hash = $1;
    }
    elsif (/^Deriver: (\S+)$/) {
    $deriver = $1;
    }
    elsif (/^References: (.*)$/) {
    @refs = split / /, $1;
    }
    }
    close FH;
    die unless defined $hash;
    return ($hash, $deriver, \@refs);
  • replacement in src/Hydra/lib/Hydra/View/NixManifest.pm at line 5
    [4.372][4.372:386](),[4.400][4.400:420]()
    use IO::Pipe;
    use POSIX qw(dup2);
    [4.372]
    [4.593]
    use Hydra::Helper::Nix;
  • replacement in src/Hydra/lib/Hydra/View/NixManifest.pm at line 24
    [4.1011][3.1052:1188]()
    my @refs = split '\n', `nix-store --query --references $path`;
    die "cannot query references of `$path': $?" if $? != 0;
    [4.1011]
    [4.1213]
    my ($hash, $deriver, $refs) = queryPathInfo $path;
  • edit in src/Hydra/lib/Hydra/View/NixManifest.pm at line 26
    [4.1222][4.1222:1351]()
    my $hash = `nix-store --query --hash $path`
    or die "cannot query hash of `$path': $?";
    chomp $hash;
  • edit in src/Hydra/lib/Hydra/View/NixManifest.pm at line 28
    [4.591][4.591:731](),[4.731][4.1398:1407](),[4.1398][4.1398:1407]()
    my $deriver = `nix-store --query --deriver $path`
    or die "cannot query deriver of `$path': $?";
    chomp $deriver;
  • replacement in src/Hydra/lib/Hydra/View/NixManifest.pm at line 31
    [4.769][4.769:910]()
    (scalar @refs > 0 ? " References: @refs\n" : "") .
    ($deriver ne "unknown-deriver" ? " Deriver: $deriver\n" : "") .
    [4.769]
    [4.1485]
    (scalar @{$refs} > 0 ? " References: @{$refs}\n" : "") .
    (defined $deriver ? " Deriver: $deriver\n" : "") .