Unverified Commit 00f9b257 authored by Emily's avatar Emily Committed by GitHub
Browse files

Merge pull request #325813 from SamLukeYes/xonsh

xonsh: fix wrapper, 0.17.0 -> 0.18.2
parents 499ce2df 633da8f7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ in
      };

      package = lib.mkPackageOption pkgs "xonsh" {
        example = "xonsh.wrapper.override { extraPackages = ps: [ ps.requests ]; }";
        example = "pkgs.xonsh.override { extraPackages = ps: [ ps.requests ]; }";
      };

      config = lib.mkOption {
+18 −112
Original line number Diff line number Diff line
{
  lib,
  callPackage,
  coreutils,
  fetchFromGitHub,
  git,
  gitUpdater,
  glibcLocales,
  python3Packages,
  python3,
  runCommand,
  # configurable options
  extraPackages ? (ps: [ ]),
}:

let

  argset = {
    pname = "xonsh";
    version = "0.17.0";
    pyproject = true;

    # PyPI package ships incomplete tests
    src = fetchFromGitHub {
      owner = "xonsh";
      repo = "xonsh";
      rev = "refs/tags/${argset.version}";
      hash = "sha256-9sRY9aetWWXzCFfgdHCBCia48THIJcMxsYMnFR6Xa8A=";
    };

    nativeBuildInputs = with python3Packages; [
      setuptools
      wheel
    ];

    propagatedBuildInputs = (with python3Packages; [
      ply
      prompt-toolkit
      pygments
    ]);

    nativeCheckInputs = [
      git
      glibcLocales
    ] ++ (with python3Packages; [
      pip
      pyte
      pytest-mock
      pytest-subprocess
      pytestCheckHook
      requests
    ]);

    disabledTests = [
      # fails on sandbox
      "test_colorize_file"
      "test_loading_correctly"
      "test_no_command_path_completion"
      "test_bsd_man_page_completions"
      "test_xonsh_activator"
      # fails on non-interactive shells
      "test_capture_always"
      "test_casting"
      "test_command_pipeline_capture"
      "test_dirty_working_directory"
      "test_man_completion"
      "test_vc_get_branch"
      "test_bash_and_is_alias_is_only_functional_alias"
      "test_spec_modifier_alias_output_format"
      # flaky tests
      "test_script"
      "test_alias_stability"
      "test_alias_stability_exception"
      "test_complete_import"
      "test_subproc_output_format"
    ];

    disabledTestPaths = [
      # fails on sandbox
      "tests/completers/test_command_completers.py"
      "tests/test_ptk_highlight.py"
      "tests/test_ptk_shell.py"
      # fails on non-interactive shells
      "tests/prompt/test_gitstatus.py"
      "tests/completers/test_bash_completer.py"
    ];

    env.LC_ALL = "en_US.UTF-8";

    postPatch = ''
      sed -ie 's|/bin/ls|${lib.getExe' coreutils "ls"}|' tests/test_execer.py
      sed -ie 's|SHELL=xonsh|SHELL=$out/bin/xonsh|' tests/test_integrations.py

      for script in tests/test_integrations.py scripts/xon.sh $(find -name "*.xsh"); do
        sed -ie 's|/usr/bin/env|${lib.getExe' coreutils "env"}|' $script
      done
      patchShebangs .
    '';

    preCheck = ''
      export HOME=$TMPDIR
      export PATH=$out/bin:$PATH
    '';

    passthru = {
      shellPath = "/bin/xonsh";
      python = python3Packages.python; # To the wrapper
      wrapper = callPackage ./wrapper.nix { };
      updateScript = gitUpdater { };
    };

    meta = {
      homepage = "https://xon.sh/";
      description = "A Python-ish, BASHwards-compatible shell";
      changelog = "https://github.com/xonsh/xonsh/raw/main/CHANGELOG.rst";
      license = with lib.licenses; [ bsd3 ];
      mainProgram = "xonsh";
      maintainers = with lib.maintainers; [ samlukeyes123 ];
    };
  };
  pythonEnv = python3.withPackages
    (ps: [ ps.xonsh ] ++ extraPackages ps);
  xonsh = python3.pkgs.xonsh;
in
python3Packages.buildPythonApplication argset
runCommand
  "xonsh-${xonsh.version}"
  {
    inherit (xonsh) pname version meta passthru;
  }
  ''
    mkdir -p $out/bin
    for bin in ${lib.getBin xonsh}/bin/*; do
      ln -s ${pythonEnv}/bin/$(basename "$bin") $out/bin/
    done
  ''
+128 −0
Original line number Diff line number Diff line
{
  lib,
  coreutils,
  fetchFromGitHub,
  git,
  gitUpdater,
  glibcLocales,
  pythonPackages,
}:

let

  argset = {
    pname = "xonsh";
    version = "0.18.2";
    pyproject = true;

    # PyPI package ships incomplete tests
    src = fetchFromGitHub {
      owner = "xonsh";
      repo = "xonsh";
      rev = "refs/tags/${argset.version}";
      hash = "sha256-iTdUu2yGixWwDJICDLfzRcwgGe+xlq2CvxUeSbmDiUU=";
    };

    nativeBuildInputs = with pythonPackages; [
      setuptools
      wheel
    ];

    propagatedBuildInputs = (
      with pythonPackages;
      [
        ply
        prompt-toolkit
        pygments
      ]
    );

    nativeCheckInputs =
      [
        git
        glibcLocales
      ]
      ++ (with pythonPackages; [
        pip
        pyte
        pytest-mock
        pytest-subprocess
        pytestCheckHook
        requests
      ]);

    disabledTests = [
      # fails on sandbox
      "test_colorize_file"
      "test_loading_correctly"
      "test_no_command_path_completion"
      "test_bsd_man_page_completions"
      "test_xonsh_activator"

      # fails on non-interactive shells
      "test_capture_always"
      "test_casting"
      "test_command_pipeline_capture"
      "test_dirty_working_directory"
      "test_man_completion"
      "test_vc_get_branch"
      "test_bash_and_is_alias_is_only_functional_alias"

      # flaky tests
      "test_script"
      "test_alias_stability"
      "test_alias_stability_exception"
      "test_complete_import"
      "test_subproc_output_format"

      # https://github.com/xonsh/xonsh/issues/5569
      "test_spec_decorator_alias_output_format"
    ];

    disabledTestPaths = [
      # fails on sandbox
      "tests/completers/test_command_completers.py"
      "tests/shell/test_ptk_highlight.py"
      # fails on non-interactive shells
      "tests/prompt/test_gitstatus.py"
      "tests/completers/test_bash_completer.py"
    ];

    # https://github.com/NixOS/nixpkgs/issues/248978
    dontWrapPythonPrograms = true;

    env.LC_ALL = "en_US.UTF-8";

    postPatch = ''
      sed -ie 's|/bin/ls|${lib.getExe' coreutils "ls"}|' tests/test_execer.py
      sed -ie 's|SHELL=xonsh|SHELL=$out/bin/xonsh|' tests/test_integrations.py

      for script in tests/test_integrations.py scripts/xon.sh $(find -name "*.xsh"); do
        sed -ie 's|/usr/bin/env|${lib.getExe' coreutils "env"}|' $script
      done
      patchShebangs .
    '';

    preCheck = ''
      export HOME=$TMPDIR
      export PATH=$out/bin:$PATH
    '';

    passthru = {
      shellPath = "/bin/xonsh";
      python = pythonPackages.python; # To the wrapper
      wrapper = throw "The top-level xonsh package is now wrapped. Use it directly.";
      updateScript = gitUpdater { };
    };

    meta = {
      homepage = "https://xon.sh/";
      description = "Python-ish, BASHwards-compatible shell";
      changelog = "https://github.com/xonsh/xonsh/raw/main/CHANGELOG.rst";
      license = with lib.licenses; [ bsd3 ];
      mainProgram = "xonsh";
      maintainers = with lib.maintainers; [ samlukeyes123 ];
    };
  };
in
pythonPackages.buildPythonPackage argset

pkgs/by-name/xo/xonsh/wrapper.nix

deleted100644 → 0
+0 −25
Original line number Diff line number Diff line
{
  lib,
  runCommand,
  xonsh,
  # configurable options
  extraPackages ? (ps: [ ]),
}:

let
  inherit (xonsh.passthru) python;

  pythonEnv = python.withPackages
    (ps: [ (ps.toPythonModule xonsh) ] ++ extraPackages ps);
in
runCommand
  "xonsh-wrapped-${xonsh.version}"
  {
    inherit (xonsh) pname version meta passthru;
  }
  ''
    mkdir -p $out/bin
    for bin in ${lib.getBin xonsh}/bin/*; do
      ln -s ${pythonEnv}/bin/$(basename "$bin") $out/bin/
    done
  ''
+1 −3
Original line number Diff line number Diff line
@@ -17697,9 +17697,7 @@ self: super: with self; {
  xnd = callPackage ../development/python-modules/xnd { };
  xonsh = toPythonModule (pkgs.xonsh.override {
    python3Packages = self;
  });
  xonsh = callPackage ../by-name/xo/xonsh/unwrapped.nix { };
  xpath-expressions = callPackage ../development/python-modules/xpath-expressions { };