##// END OF EJS Templates
nix: Add PATH of vcsserver derivation to wrapping of other executables....
nix: Add PATH of vcsserver derivation to wrapping of other executables. The other executables like pserve or gunicorn need the same path as the vcsserver command uses. Otherwise they e.g. find different versions of git. System git versus custom git in nix-store.

File last commit:

r87:ea99aabb default
r87:ea99aabb default
Show More
default.nix
153 lines | 4.6 KiB | text/x-nix | NixLexer
# Nix environment for the community edition
#
# This shall be as lean as possible, just producing the rhodecode-vcsserver
# derivation. For advanced tweaks to pimp up the development environment we use
# "shell.nix" so that it does not have to clutter this file.
{ pkgs ? (import <nixpkgs> {})
, pythonPackages ? "python27Packages"
, pythonExternalOverrides ? self: super: {}
, doCheck ? true
}:
let pkgs_ = pkgs; in
let
pkgs = pkgs_.overridePackages (self: super: {
# Override subversion derivation to
# - activate python bindings
subversion = let
subversionWithPython = super.subversion.override {
httpSupport = true;
pythonBindings = true;
python = self.python27Packages.python;
};
in pkgs.lib.overrideDerivation subversionWithPython (oldAttrs: {
patches = (oldAttrs.patches or []) ++
pkgs.lib.optionals pkgs.stdenv.isDarwin [
# johbo: "import svn.client" fails on darwin currently.
./pkgs/subversion-1.9.4-darwin.patch
];
});
});
inherit (pkgs.lib) fix extends;
basePythonPackages = with builtins; if isAttrs pythonPackages
then pythonPackages
else getAttr pythonPackages pkgs;
elem = builtins.elem;
basename = path: with pkgs.lib; last (splitString "/" path);
startsWith = prefix: full: let
actualPrefix = builtins.substring 0 (builtins.stringLength prefix) full;
in actualPrefix == prefix;
src-filter = path: type: with pkgs.lib;
let
ext = last (splitString "." path);
in
!elem (basename path) [
".git" ".hg" "__pycache__" ".eggs" "node_modules"
"build" "data" "tmp"] &&
!elem ext ["egg-info" "pyc"] &&
!startsWith "result" path;
rhodecode-vcsserver-src = builtins.filterSource src-filter ./.;
pythonGeneratedPackages = self: basePythonPackages.override (a: {
inherit self;
})
// (scopedImport {
self = self;
super = basePythonPackages;
inherit pkgs;
inherit (pkgs) fetchurl fetchgit;
} ./pkgs/python-packages.nix);
pythonOverrides = import ./pkgs/python-packages-overrides.nix {
inherit
basePythonPackages
pkgs;
};
version = builtins.readFile ./vcsserver/VERSION;
pythonLocalOverrides = self: super: {
rhodecode-vcsserver = super.rhodecode-vcsserver.override (attrs: {
inherit
doCheck
version;
name = "rhodecode-vcsserver-${version}";
releaseName = "RhodeCodeVCSServer-${version}";
src = rhodecode-vcsserver-src;
propagatedBuildInputs = attrs.propagatedBuildInputs ++ ([
pkgs.git
pkgs.subversion
]);
# TODO: johbo: Make a nicer way to expose the parts. Maybe
# pkgs/default.nix?
passthru = {
pythonPackages = self;
};
# Somewhat snappier setup of the development environment
# TODO: move into shell.nix
# TODO: think of supporting a stable path again, so that multiple shells
# can share it.
shellHook = ''
# Set locale
export LC_ALL="en_US.UTF-8"
tmp_path=$(mktemp -d)
export PATH="$tmp_path/bin:$PATH"
export PYTHONPATH="$tmp_path/${self.python.sitePackages}:$PYTHONPATH"
mkdir -p $tmp_path/${self.python.sitePackages}
python setup.py develop --prefix $tmp_path --allow-hosts ""
'';
# Add VCSServer bin directory to path so that tests can find 'vcsserver'.
preCheck = ''
export PATH="$out/bin:$PATH"
'';
postInstall = ''
echo "Writing meta information for rccontrol to nix-support/rccontrol"
mkdir -p $out/nix-support/rccontrol
cp -v vcsserver/VERSION $out/nix-support/rccontrol/version
echo "DONE: Meta information for rccontrol written"
ln -s ${self.pyramid}/bin/* $out/bin/
ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
# Symlink version control utilities
#
# We ensure that always the correct version is available as a symlink.
# So that users calling them via the profile path will always use the
# correct version.
ln -s ${pkgs.git}/bin/git $out/bin
ln -s ${self.mercurial}/bin/hg $out/bin
ln -s ${pkgs.subversion}/bin/svn* $out/bin
for file in $out/bin/*; do
wrapProgram $file \
--prefix PATH : $PATH \
--prefix PYTHONPATH : $PYTHONPATH \
--set PYTHONHASHSEED random
done
'';
});
};
# Apply all overrides and fix the final package set
myPythonPackages =
(fix
(extends pythonExternalOverrides
(extends pythonLocalOverrides
(extends pythonOverrides
pythonGeneratedPackages))));
in myPythonPackages.rhodecode-vcsserver