2020-02-27 08:43:17 +00:00
|
|
|
{ pkgs ? import <nixpkgs> {
|
|
|
|
overlays = [
|
|
|
|
(import ../overlay.nix)
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
inherit (pkgs) lib;
|
|
|
|
|
2020-02-29 13:51:02 +00:00
|
|
|
srcPath = builtins.toString ../.;
|
2020-02-27 08:43:17 +00:00
|
|
|
in
|
|
|
|
{
|
|
|
|
|
2020-04-29 14:12:59 +01:00
|
|
|
flamegraph =
|
|
|
|
let
|
|
|
|
runtimeDeps = lib.makeBinPath [
|
|
|
|
pkgs.flamegraph
|
|
|
|
pkgs.python3
|
|
|
|
pkgs.nix
|
|
|
|
];
|
|
|
|
in
|
2020-02-27 08:43:17 +00:00
|
|
|
pkgs.writeScriptBin "poetry2nix-flamegraph" ''
|
|
|
|
#!${pkgs.runtimeShell}
|
|
|
|
export PATH=${runtimeDeps}:$PATH
|
|
|
|
|
|
|
|
workdir=$(mktemp -d)
|
|
|
|
function cleanup {
|
|
|
|
rm -rf "$workdir"
|
|
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
|
|
|
|
# Run once to warm up
|
|
|
|
nix-instantiate --expr '(import <nixpkgs> { overlays = [ (import ${srcPath + "/overlay.nix"}) ]; })' -A poetry
|
|
|
|
nix-instantiate --trace-function-calls --expr '(import <nixpkgs> { overlays = [ (import ${srcPath + "/overlay.nix"}) ]; })' -A poetry 2> $workdir/traceFile
|
2021-12-25 15:55:24 -08:00
|
|
|
python3 ${pkgs.nix.src}/contrib/stack-collapse.py $workdir/traceFile > $workdir/traceFile.folded
|
2020-02-27 08:43:17 +00:00
|
|
|
flamegraph.pl $workdir/traceFile.folded > poetry2nix-flamegraph.svg
|
|
|
|
'';
|
|
|
|
|
2022-01-12 18:23:55 +13:00
|
|
|
env = pkgs.poetry2nix.mkPoetryEnv {
|
|
|
|
projectDir = ./.;
|
|
|
|
};
|
|
|
|
|
2022-01-12 18:39:52 +13:00
|
|
|
py2-astparse = pkgs.writeScriptBin "py2-astparse" ''
|
|
|
|
#!${pkgs.python2.interpreter}
|
|
|
|
# Used as a smoke test for Python2 compatibility in Python files
|
|
|
|
import sys
|
|
|
|
import ast
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
with open(sys.argv[1]) as f:
|
|
|
|
try:
|
|
|
|
ast.parse(f.read())
|
|
|
|
except Exception as e:
|
|
|
|
sys.stderr.write("Error parsing '{}':\n".format(sys.argv[1]))
|
|
|
|
sys.stderr.flush()
|
|
|
|
raise
|
|
|
|
'';
|
|
|
|
|
2020-02-27 08:43:17 +00:00
|
|
|
}
|