nix-channel: Add option to force fetching of manifests

This commit is contained in:
Eelco Dolstra 2012-09-13 12:11:40 -04:00
parent b14717ab90
commit c845c0ccad
2 changed files with 19 additions and 0 deletions

View file

@ -364,6 +364,18 @@ build-use-chroot = /dev /proc /bin</programlisting>
</varlistentry> </varlistentry>
<varlistentry><term><literal>force-manifest</literal></term>
<listitem><para>If this option is set to <literal>false</literal>
(default) and a Nix channel provides both a manifest and a binary
cache, only the binary cache will be used. If set to
<literal>true</literal>, the manifest will be fetched as well.
This is useful if you want to use binary patches (which are
currently not supported by binary caches).</para></listitem>
</varlistentry>
<varlistentry><term><literal>system</literal></term> <varlistentry><term><literal>system</literal></term>
<listitem><para>This option specifies the canonical Nix system <listitem><para>This option specifies the canonical Nix system

View file

@ -6,6 +6,8 @@ use File::Path qw(mkpath);
use Nix::Config; use Nix::Config;
use Nix::Manifest; use Nix::Manifest;
Nix::Config::readConfig;
my $manifestDir = $Nix::Config::manifestDir; my $manifestDir = $Nix::Config::manifestDir;
@ -102,10 +104,15 @@ sub update {
# Check if the channel advertises a binary cache. # Check if the channel advertises a binary cache.
my $binaryCacheURL = `$Nix::Config::curl --silent '$url'/binary-cache-url`; my $binaryCacheURL = `$Nix::Config::curl --silent '$url'/binary-cache-url`;
my $extraAttrs = ""; my $extraAttrs = "";
my $getManifest = ($Nix::Config::config{"force-manifest"} // "false") eq "true";
if ($? == 0 && $binaryCacheURL ne "") { if ($? == 0 && $binaryCacheURL ne "") {
$extraAttrs .= "binaryCacheURL = \"$binaryCacheURL\"; "; $extraAttrs .= "binaryCacheURL = \"$binaryCacheURL\"; ";
deleteOldManifests($origUrl, undef); deleteOldManifests($origUrl, undef);
} else { } else {
$getManifest = 1;
}
if ($getManifest) {
# No binary cache, so pull the channel manifest. # No binary cache, so pull the channel manifest.
mkdir $manifestDir, 0755 unless -e $manifestDir; mkdir $manifestDir, 0755 unless -e $manifestDir;
die "$0: you do not have write permission to `$manifestDir'!\n" unless -W $manifestDir; die "$0: you do not have write permission to `$manifestDir'!\n" unless -W $manifestDir;