Allow packages to be marked as "broken" by setting meta.broken

The effect is that they won't show up in "nix-env -qa" anymore.
This commit is contained in:
Eelco Dolstra 2013-11-04 20:32:49 +01:00
parent 01087750ba
commit 754704ea18
6 changed files with 24 additions and 8 deletions

View File

@ -118,6 +118,15 @@ interpretation:</para>
package).</para></listitem> package).</para></listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><varname>broken</varname></term>
<listitem><para>If set to <literal>true</literal>, the package is
marked as “broken”, meaning that it wont show up in
<literal>nix-env -qa</literal>, and cannot be built or installed.
Sush packages should be removed from Nixpkgs eventually unless
they are fixed.</para></listitem>
</varlistentry>
</variablelist> </variablelist>

View File

@ -279,5 +279,5 @@
./virtualisation/libvirtd.nix ./virtualisation/libvirtd.nix
#./virtualisation/nova.nix #./virtualisation/nova.nix
./virtualisation/virtualbox-guest.nix ./virtualisation/virtualbox-guest.nix
./virtualisation/xen-dom0.nix #./virtualisation/xen-dom0.nix
] ]

View File

@ -16,5 +16,6 @@ pythonPackages.buildPythonPackage rec {
meta = { meta = {
homepage = https://github.com/rackspace/python-novaclient; homepage = https://github.com/rackspace/python-novaclient;
description = "Client library and command line tool for the OpenStack Nova API"; description = "Client library and command line tool for the OpenStack Nova API";
broken = true;
}; };
} }

View File

@ -20,13 +20,13 @@ stdenv.mkDerivation rec {
paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate
distutils_extra simplejson readline glance cheetah lockfile httplib2 distutils_extra simplejson readline glance cheetah lockfile httplib2
# !!! should libvirt be a build-time dependency? Note that # !!! should libvirt be a build-time dependency? Note that
# libxml2Python is a dependency of libvirt.py. # libxml2Python is a dependency of libvirt.py.
libvirt libxml2Python libvirt libxml2Python
novaclient novaclient
]; ];
buildInputs = buildInputs =
[ pythonPackages.python [ pythonPackages.python
pythonPackages.wrapPython pythonPackages.wrapPython
pythonPackages.mox pythonPackages.mox
intltool intltool
@ -45,11 +45,11 @@ stdenv.mkDerivation rec {
substituteInPlace nova/api/ec2/cloud.py \ substituteInPlace nova/api/ec2/cloud.py \
--replace 'sh genrootca.sh' $out/libexec/nova/genrootca.sh --replace 'sh genrootca.sh' $out/libexec/nova/genrootca.sh
''; '';
buildPhase = "python setup.py build"; buildPhase = "python setup.py build";
installPhase = installPhase =
'' ''
p=$(toPythonPath $out) p=$(toPythonPath $out)
export PYTHONPATH=$p:$PYTHONPATH export PYTHONPATH=$p:$PYTHONPATH
mkdir -p $p mkdir -p $p
@ -59,14 +59,14 @@ stdenv.mkDerivation rec {
# computes some stuff from its own argv[0]. So put the wrapped # computes some stuff from its own argv[0]. So put the wrapped
# programs in $out/libexec under their original names. # programs in $out/libexec under their original names.
mkdir -p $out/libexec/nova mkdir -p $out/libexec/nova
wrapProgram() { wrapProgram() {
local prog="$1" local prog="$1"
local hidden=$out/libexec/nova/$(basename "$prog") local hidden=$out/libexec/nova/$(basename "$prog")
mv $prog $hidden mv $prog $hidden
makeWrapper $hidden $prog "$@" makeWrapper $hidden $prog "$@"
} }
wrapPythonPrograms wrapPythonPrograms
cp -prvd etc $out/etc cp -prvd etc $out/etc
@ -86,9 +86,10 @@ stdenv.mkDerivation rec {
doCheck = false; # !!! fix doCheck = false; # !!! fix
checkPhase = "python setup.py test"; checkPhase = "python setup.py test";
meta = { meta = {
homepage = http://nova.openstack.org/; homepage = http://nova.openstack.org/;
description = "OpenStack Compute (a.k.a. Nova), a cloud computing fabric controller"; description = "OpenStack Compute (a.k.a. Nova), a cloud computing fabric controller";
broken = true;
}; };
} }

View File

@ -136,5 +136,6 @@ stdenv.mkDerivation {
description = "Xen hypervisor and management tools for Dom0"; description = "Xen hypervisor and management tools for Dom0";
platforms = [ "i686-linux" "x86_64-linux" ]; platforms = [ "i686-linux" "x86_64-linux" ];
maintainers = [ stdenv.lib.maintainers.eelco ]; maintainers = [ stdenv.lib.maintainers.eelco ];
broken = true;
}; };
} }

View File

@ -18,6 +18,8 @@ let
allowUnfree = config.allowUnfree or true && builtins.getEnv "HYDRA_DISALLOW_UNFREE" != "1"; allowUnfree = config.allowUnfree or true && builtins.getEnv "HYDRA_DISALLOW_UNFREE" != "1";
allowBroken = builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
stdenvGenerator = setupScript: rec { stdenvGenerator = setupScript: rec {
# The stdenv that we are producing. # The stdenv that we are producing.
@ -51,6 +53,8 @@ let
mkDerivation = attrs: mkDerivation = attrs:
if !allowUnfree && (let l = lib.lists.toList attrs.meta.license or []; in lib.lists.elem "unfree" l || lib.lists.elem "unfree-redistributable" l) then if !allowUnfree && (let l = lib.lists.toList attrs.meta.license or []; in lib.lists.elem "unfree" l || lib.lists.elem "unfree-redistributable" l) then
throw "package ${attrs.name} has an unfree license, refusing to evaluate" throw "package ${attrs.name} has an unfree license, refusing to evaluate"
else if !allowBroken && attrs.meta.broken or false then
throw "you can't use package ${attrs.name} because it has been marked as broken"
else else
lib.addPassthru (derivation ( lib.addPassthru (derivation (
(removeAttrs attrs ["meta" "passthru" "crossAttrs"]) (removeAttrs attrs ["meta" "passthru" "crossAttrs"])