Merge pull request #258 from chaoflow/python
Python recursivePthLoader in action I've checked that nothing which passes in trunk: http://hydra.nixos.org/eval/810237 fails in python-rework: http://hydra.nixos.org/eval/810395 I can also now use buildEnv for python very comfortably. This is a massive improvement, thanks a lot!
This commit is contained in:
commit
51684bcbac
|
@ -68,6 +68,8 @@ let
|
||||||
rm -rf "$out/lib/python${majorVersion}/test"
|
rm -rf "$out/lib/python${majorVersion}/test"
|
||||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
|
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
|
||||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
|
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
|
||||||
|
mv $out/share/man/man1/{python.1,python2.6.1}
|
||||||
|
ln -s $out/share/man/man1/{python2.6.1,python.1}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
|
|
|
@ -76,6 +76,7 @@ let
|
||||||
rm -rf "$out/lib/python${majorVersion}/test"
|
rm -rf "$out/lib/python${majorVersion}/test"
|
||||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
|
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
|
||||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
|
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
|
||||||
|
ln -s $out/share/man/man1/{python2.7.1.gz,python.1.gz}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# Create a python that knows about additional python packages via
|
# Create a python that knows about additional python packages via
|
||||||
# PYTHONPATH
|
# PYTHONPATH
|
||||||
|
|
||||||
{stdenv, python, makeWrapper, extraLibs ? []}:
|
{ stdenv, python, makeWrapper, recursivePthLoader, extraLibs ? [] }:
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "python-${python.version}-wrapper";
|
name = "python-${python.version}-wrapper";
|
||||||
|
|
||||||
propagatedBuildInputs = [python makeWrapper] ++ extraLibs;
|
propagatedBuildInputs = extraLibs ++ [ python makeWrapper recursivePthLoader ];
|
||||||
|
|
||||||
unpackPhase = "true";
|
unpackPhase = "true";
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
(http://pypi.python.org/pypi/setuptools/), which represents a large
|
(http://pypi.python.org/pypi/setuptools/), which represents a large
|
||||||
number of Python packages nowadays. */
|
number of Python packages nowadays. */
|
||||||
|
|
||||||
{ python, setuptools, wrapPython, lib, offlineDistutils, setuptoolsSite }:
|
{ python, setuptools, wrapPython, lib, offlineDistutils, recursivePthLoader }:
|
||||||
|
|
||||||
{ name, namePrefix ? "python-"
|
{ name, namePrefix ? "python-"
|
||||||
|
|
||||||
|
@ -48,16 +48,14 @@ python.stdenv.mkDerivation (attrs // {
|
||||||
|
|
||||||
name = namePrefix + name;
|
name = namePrefix + name;
|
||||||
|
|
||||||
|
# checkPhase after installPhase to run tests on installed packages
|
||||||
phases = "unpackPhase patchPhase configurePhase buildPhase installPhase checkPhase fixupPhase distPhase";
|
phases = "unpackPhase patchPhase configurePhase buildPhase installPhase checkPhase fixupPhase distPhase";
|
||||||
|
|
||||||
buildInputs = [ python wrapPython setuptools ] ++ buildInputs ++ pythonPath;
|
buildInputs = [ python wrapPython setuptools ] ++ buildInputs ++ pythonPath;
|
||||||
|
|
||||||
# setuptoolsSite is responsible for loading pth files
|
propagatedBuildInputs = propagatedBuildInputs ++ [ recursivePthLoader ];
|
||||||
propagatedBuildInputs = propagatedBuildInputs ++ [ setuptoolsSite ];
|
|
||||||
|
|
||||||
buildInputStrings = map toString buildInputs;
|
pythonPath = [ setuptools ] ++ pythonPath;
|
||||||
|
|
||||||
pythonPath = [ setuptools] ++ pythonPath;
|
|
||||||
|
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
PYTHONPATH="${offlineDistutils}/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
|
PYTHONPATH="${offlineDistutils}/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
|
||||||
|
@ -83,9 +81,7 @@ python.stdenv.mkDerivation (attrs // {
|
||||||
# Remove any site.py files generated by easy_install as these
|
# Remove any site.py files generated by easy_install as these
|
||||||
# cause collisions. If pth files are to be processed a
|
# cause collisions. If pth files are to be processed a
|
||||||
# corresponding site.py needs to be included in the PYTHONPATH.
|
# corresponding site.py needs to be included in the PYTHONPATH.
|
||||||
#
|
rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
|
||||||
# leave them until we have a better solution: see #209
|
|
||||||
#rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
|
|
||||||
|
|
||||||
${postInstall}
|
${postInstall}
|
||||||
'';
|
'';
|
||||||
|
@ -94,15 +90,6 @@ python.stdenv.mkDerivation (attrs // {
|
||||||
''
|
''
|
||||||
wrapPythonPrograms
|
wrapPythonPrograms
|
||||||
|
|
||||||
# If a user installs a Python package, she probably also wants its
|
|
||||||
# dependencies in the user environment (since Python modules don't
|
|
||||||
# have something like an RPATH, so the only way to find the
|
|
||||||
# dependencies is to have them in the PYTHONPATH variable).
|
|
||||||
if test -e $out/nix-support/propagated-build-inputs; then
|
|
||||||
ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages
|
|
||||||
fi
|
|
||||||
|
|
||||||
createBuildInputsPth build-inputs "$buildInputStrings"
|
|
||||||
for inputsfile in propagated-build-inputs propagated-build-native-inputs; do
|
for inputsfile in propagated-build-inputs propagated-build-native-inputs; do
|
||||||
if test -e $out/nix-support/$inputsfile; then
|
if test -e $out/nix-support/$inputsfile; then
|
||||||
createBuildInputsPth $inputsfile "$(cat $out/nix-support/$inputsfile)"
|
createBuildInputsPth $inputsfile "$(cat $out/nix-support/$inputsfile)"
|
||||||
|
|
|
@ -51,6 +51,9 @@ createBuildInputsPth() {
|
||||||
local inputs="$2"
|
local inputs="$2"
|
||||||
if [ foo"$inputs" != foo ]; then
|
if [ foo"$inputs" != foo ]; then
|
||||||
for x in $inputs; do
|
for x in $inputs; do
|
||||||
|
if $(echo -n $x |grep -q python-recursive-pth-loader); then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
if test -d "$x"/lib/@libPrefix@/site-packages; then
|
if test -d "$x"/lib/@libPrefix@/site-packages; then
|
||||||
echo $x/lib/@libPrefix@/site-packages \
|
echo $x/lib/@libPrefix@/site-packages \
|
||||||
>> "$out"/lib/@libPrefix@/site-packages/${name}-nix-python-$category.pth
|
>> "$out"/lib/@libPrefix@/site-packages/${name}-nix-python-$category.pth
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{stdenv, fetchurl, python, pkgconfig, cairo, x11}:
|
{ stdenv, fetchurl, python, pkgconfig, cairo, x11 }:
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "pycairo-1.8.8";
|
name = "pycairo-1.8.8";
|
||||||
|
@ -7,5 +7,5 @@ stdenv.mkDerivation {
|
||||||
sha256 = "0q18hd4ai4raljlvd76ylgi30kxpr2qq83ka6gzwh0ya8fcmjlig";
|
sha256 = "0q18hd4ai4raljlvd76ylgi30kxpr2qq83ka6gzwh0ya8fcmjlig";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [python pkgconfig cairo x11];
|
buildInputs = [ python pkgconfig cairo x11 ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,16 +12,12 @@ stdenv.mkDerivation rec {
|
||||||
|
|
||||||
buildInputs = [ python pkgconfig glib ];
|
buildInputs = [ python pkgconfig glib ];
|
||||||
|
|
||||||
|
# in a "normal" setup, pygobject and pygtk are installed into the
|
||||||
|
# same site-packages: we need a pth file for both. pygtk.py would be
|
||||||
|
# used to select a specific version, in our setup it should have no
|
||||||
|
# effect, but we leave it in case somebody expects and calls it.
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
# All python code is installed into a "gtk-2.0" sub-directory. That
|
mv $out/lib/${python.libPrefix}/site-packages/{pygtk.pth,${name}.pth}
|
||||||
# sub-directory may be useful on systems which share several library
|
|
||||||
# versions in the same prefix, i.e. /usr/local, but on Nix that directory
|
|
||||||
# is useless. Furthermore, its existence makes it very hard to guess a
|
|
||||||
# proper $PYTHONPATH that allows "import gtk" to succeed.
|
|
||||||
cd $(toPythonPath $out)/gtk-2.0
|
|
||||||
for n in *; do
|
|
||||||
ln -s "gtk-2.0/$n" "../$n"
|
|
||||||
done
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ stdenv, fetchurl, makeWrapper, python, pkgconfig, glib, gtk, pygobject, pycairo
|
{ stdenv, fetchurl, python, pkgconfig, glib, gtk, pygobject, pycairo
|
||||||
, libglade ? null }:
|
, buildPythonPackage, libglade ? null }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
buildPythonPackage rec {
|
||||||
name = "pygtk-2.22.0";
|
name = "pygtk-2.22.0";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
|
@ -10,26 +10,35 @@ stdenv.mkDerivation rec {
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs =
|
buildInputs =
|
||||||
[ makeWrapper python pkgconfig glib gtk ]
|
[ pkgconfig glib gtk ]
|
||||||
++ stdenv.lib.optional (libglade != null) libglade;
|
++ stdenv.lib.optional (libglade != null) libglade;
|
||||||
|
|
||||||
propagatedBuildInputs = [ pygobject pycairo ];
|
propagatedBuildInputs = [ pygobject pycairo ];
|
||||||
|
|
||||||
|
installCommand = "make install";
|
||||||
|
checkPhase = stdenv.lib.optionalString (libglade == null)
|
||||||
|
''
|
||||||
|
sed -i -e "s/glade = importModule('gtk.glade', buildDir)//" \
|
||||||
|
tests/common.py
|
||||||
|
sed -i -e "s/, glade$//" \
|
||||||
|
-e "s/.*testGlade.*//" \
|
||||||
|
-e "s/.*(glade.*//" \
|
||||||
|
tests/test_api.py
|
||||||
|
'' + ''
|
||||||
|
sed -i -e "s/sys.path.insert(0, os.path.join(buildDir, 'gtk'))//" \
|
||||||
|
-e "s/sys.path.insert(0, buildDir)//" \
|
||||||
|
tests/common.py
|
||||||
|
make check
|
||||||
|
'';
|
||||||
|
# XXX: TypeError: Unsupported type: <class 'gtk._gtk.WindowType'>
|
||||||
|
# The check phase was not executed in the previous
|
||||||
|
# non-buildPythonPackage setup - not sure why not.
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
rm $out/bin/pygtk-codegen-2.0
|
rm $out/bin/pygtk-codegen-2.0
|
||||||
ln -s ${pygobject}/bin/pygobject-codegen-2.0 $out/bin/pygtk-codegen-2.0
|
ln -s ${pygobject}/bin/pygobject-codegen-2.0 $out/bin/pygtk-codegen-2.0
|
||||||
|
ln -s ${pygobject}/lib/${python.libPrefix}/site-packages/${pygobject.name}.pth \
|
||||||
# All python code is installed into a "gtk-2.0" sub-directory. That
|
$out/lib/${python.libPrefix}/site-packages/${name}.pth
|
||||||
# sub-directory may be useful on systems which share several library
|
|
||||||
# versions in the same prefix, i.e. /usr/local, but on Nix that directory
|
|
||||||
# is useless. Furthermore, its existence makes it very hard to guess a
|
|
||||||
# proper $PYTHONPATH that allows "import gtk" to succeed.
|
|
||||||
cd $(toPythonPath $out)/gtk-2.0
|
|
||||||
for n in *; do
|
|
||||||
ln -s "gtk-2.0/$n" "../$n"
|
|
||||||
done
|
|
||||||
|
|
||||||
wrapProgram $out/bin/pygtk-demo --prefix PYTHONPATH ":" \
|
|
||||||
$(toPythonPath "${pygobject} ${pycairo} $out")
|
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ stdenv, fetchurl, python, wrapPython }:
|
{ stdenv, fetchurl, python, wrapPython }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "setuptools-" + version;
|
name = "python-setuptools-" + version;
|
||||||
|
|
||||||
version = "0.6c11";
|
version = "0.6c11";
|
||||||
|
|
||||||
|
|
|
@ -2834,25 +2834,23 @@ let
|
||||||
|
|
||||||
pure = callPackage ../development/interpreters/pure {};
|
pure = callPackage ../development/interpreters/pure {};
|
||||||
|
|
||||||
python = python27;
|
|
||||||
python3 = python32;
|
python3 = python32;
|
||||||
|
|
||||||
python26 = callPackage ../development/interpreters/python/2.6 { };
|
|
||||||
|
|
||||||
python27 = callPackage ../development/interpreters/python/2.7 { };
|
|
||||||
|
|
||||||
python32 = callPackage ../development/interpreters/python/3.2 { };
|
python32 = callPackage ../development/interpreters/python/3.2 { };
|
||||||
|
|
||||||
pythonFull = python27Full;
|
python = python27;
|
||||||
|
python26 = callPackage ../development/interpreters/python/2.6 { };
|
||||||
|
python27 = callPackage ../development/interpreters/python/2.7 { };
|
||||||
|
|
||||||
|
pythonFull = python27Full;
|
||||||
python26Full = callPackage ../development/interpreters/python/wrapper.nix {
|
python26Full = callPackage ../development/interpreters/python/wrapper.nix {
|
||||||
extraLibs = lib.attrValues python26.modules;
|
extraLibs = lib.attrValues python26.modules;
|
||||||
python = python26;
|
python = python26;
|
||||||
|
inherit (python26Packages) recursivePthLoader;
|
||||||
};
|
};
|
||||||
|
|
||||||
python27Full = callPackage ../development/interpreters/python/wrapper.nix {
|
python27Full = callPackage ../development/interpreters/python/wrapper.nix {
|
||||||
extraLibs = lib.attrValues python27.modules;
|
extraLibs = lib.attrValues python27.modules;
|
||||||
python = python27;
|
python = python27;
|
||||||
|
inherit (python27Packages) recursivePthLoader;
|
||||||
};
|
};
|
||||||
|
|
||||||
pythonhomeWrapper = callPackage ../development/interpreters/python/pythonhome-wrapper.nix { };
|
pythonhomeWrapper = callPackage ../development/interpreters/python/pythonhome-wrapper.nix { };
|
||||||
|
@ -5293,6 +5291,10 @@ let
|
||||||
|
|
||||||
pythonPackages = python27Packages;
|
pythonPackages = python27Packages;
|
||||||
|
|
||||||
|
# `nix-env -i python-nose` installs for 2.7, the default python.
|
||||||
|
# Therefore we do not recurse into attributes here, in contrast to
|
||||||
|
# python27Packages. `nix-env -iA python26Packages.nose` works
|
||||||
|
# regardless.
|
||||||
python26Packages = import ./python-packages.nix {
|
python26Packages = import ./python-packages.nix {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
python = python26;
|
python = python26;
|
||||||
|
@ -5309,13 +5311,13 @@ let
|
||||||
|
|
||||||
numeric = callPackage ../development/python-modules/numeric { };
|
numeric = callPackage ../development/python-modules/numeric { };
|
||||||
|
|
||||||
pil = python27Packages.pil;
|
pil = pythonPackages.pil;
|
||||||
|
|
||||||
psyco = callPackage ../development/python-modules/psyco { };
|
psyco = callPackage ../development/python-modules/psyco { };
|
||||||
|
|
||||||
pycairo = callPackage ../development/python-modules/pycairo { };
|
pycairo = pythonPackages.pycairo;
|
||||||
|
|
||||||
pycrypto = python27Packages.pycrypto;
|
pycrypto = pythonPackages.pycrypto;
|
||||||
|
|
||||||
pycups = callPackage ../development/python-modules/pycups { };
|
pycups = callPackage ../development/python-modules/pycups { };
|
||||||
|
|
||||||
|
@ -5323,13 +5325,11 @@ let
|
||||||
|
|
||||||
pygame = callPackage ../development/python-modules/pygame { };
|
pygame = callPackage ../development/python-modules/pygame { };
|
||||||
|
|
||||||
pygobject = callPackage ../development/python-modules/pygobject { };
|
pygobject = pythonPackages.pygobject;
|
||||||
|
|
||||||
pygtk = callPackage ../development/python-modules/pygtk { };
|
pygtk = pythonPackages.pygtk;
|
||||||
|
|
||||||
pyGtkGlade = callPackage ../development/python-modules/pygtk {
|
pyGtkGlade = pythonPackages.pyGtkGlade;
|
||||||
inherit (gnome) libglade;
|
|
||||||
};
|
|
||||||
|
|
||||||
pyopenssl = builderDefsPackage (import ../development/python-modules/pyopenssl) {
|
pyopenssl = builderDefsPackage (import ../development/python-modules/pyopenssl) {
|
||||||
inherit python openssl;
|
inherit python openssl;
|
||||||
|
|
|
@ -3,22 +3,28 @@
|
||||||
let pythonPackages = python.modules // rec {
|
let pythonPackages = python.modules // rec {
|
||||||
|
|
||||||
inherit python;
|
inherit python;
|
||||||
|
|
||||||
inherit (pkgs) fetchurl fetchsvn fetchgit stdenv;
|
inherit (pkgs) fetchurl fetchsvn fetchgit stdenv;
|
||||||
|
|
||||||
|
# helpers
|
||||||
|
|
||||||
buildPythonPackage = import ../development/python-modules/generic {
|
buildPythonPackage = import ../development/python-modules/generic {
|
||||||
inherit (pkgs) lib;
|
inherit (pkgs) lib;
|
||||||
inherit python wrapPython setuptools setuptoolsSite offlineDistutils;
|
inherit python wrapPython setuptools recursivePthLoader offlineDistutils;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wrapPython = pkgs.makeSetupHook
|
||||||
|
{ deps = pkgs.makeWrapper;
|
||||||
|
substitutions.libPrefix = python.libPrefix;
|
||||||
|
}
|
||||||
|
../development/python-modules/generic/wrap.sh;
|
||||||
|
|
||||||
|
# specials
|
||||||
|
|
||||||
recursivePthLoader = import ../development/python-modules/recursive-pth-loader {
|
recursivePthLoader = import ../development/python-modules/recursive-pth-loader {
|
||||||
inherit (pkgs) stdenv;
|
inherit (pkgs) stdenv;
|
||||||
inherit python;
|
inherit python;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
setuptools = import ../development/python-modules/setuptools {
|
setuptools = import ../development/python-modules/setuptools {
|
||||||
inherit (pkgs) stdenv fetchurl;
|
inherit (pkgs) stdenv fetchurl;
|
||||||
inherit python wrapPython;
|
inherit python wrapPython;
|
||||||
|
@ -34,6 +40,8 @@ let pythonPackages = python.modules // rec {
|
||||||
inherit python;
|
inherit python;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# packages defined elsewhere
|
||||||
|
|
||||||
ipython = import ../shells/ipython {
|
ipython = import ../shells/ipython {
|
||||||
inherit (pkgs) stdenv fetchurl;
|
inherit (pkgs) stdenv fetchurl;
|
||||||
inherit buildPythonPackage pythonPackages;
|
inherit buildPythonPackage pythonPackages;
|
||||||
|
@ -44,17 +52,37 @@ let pythonPackages = python.modules // rec {
|
||||||
inherit python buildPythonPackage;
|
inherit python buildPythonPackage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pycairo = import ../development/python-modules/pycairo {
|
||||||
|
inherit (pkgs) stdenv fetchurl pkgconfig cairo x11;
|
||||||
|
inherit python;
|
||||||
|
};
|
||||||
|
|
||||||
pycrypto = import ../development/python-modules/pycrypto {
|
pycrypto = import ../development/python-modules/pycrypto {
|
||||||
inherit (pkgs) fetchurl stdenv gmp;
|
inherit (pkgs) fetchurl stdenv gmp;
|
||||||
inherit python buildPythonPackage;
|
inherit python buildPythonPackage;
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapPython = pkgs.makeSetupHook
|
pygobject = import ../development/python-modules/pygobject {
|
||||||
{ deps = pkgs.makeWrapper;
|
inherit (pkgs) stdenv fetchurl pkgconfig glib;
|
||||||
substitutions.libPrefix = python.libPrefix;
|
inherit python;
|
||||||
}
|
};
|
||||||
../development/python-modules/generic/wrap.sh;
|
|
||||||
|
|
||||||
|
pygtk = import ../development/python-modules/pygtk {
|
||||||
|
inherit (pkgs) fetchurl stdenv pkgconfig glib gtk;
|
||||||
|
inherit python buildPythonPackage pygobject pycairo;
|
||||||
|
};
|
||||||
|
|
||||||
|
# XXX: how can we get an override here?
|
||||||
|
#pyGtkGlade = pygtk.override {
|
||||||
|
# inherit (pkgs.gnome) libglade;
|
||||||
|
#};
|
||||||
|
pyGtkGlade = import ../development/python-modules/pygtk {
|
||||||
|
inherit (pkgs) fetchurl stdenv pkgconfig glib gtk;
|
||||||
|
inherit (pkgs.gnome) libglade;
|
||||||
|
inherit python buildPythonPackage pygobject pycairo;
|
||||||
|
};
|
||||||
|
|
||||||
|
# packages defined here
|
||||||
|
|
||||||
afew = buildPythonPackage rec {
|
afew = buildPythonPackage rec {
|
||||||
rev = "6bb3915636aaf86f046a017ffffd9a4ef395e199";
|
rev = "6bb3915636aaf86f046a017ffffd9a4ef395e199";
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue