Skip to content

fix(env): honor detected shell in env activate output#10716

Open
LouisLau-art wants to merge 1 commit intopython-poetry:mainfrom
LouisLau-art:fix/env-activate-bash-on-windows
Open

fix(env): honor detected shell in env activate output#10716
LouisLau-art wants to merge 1 commit intopython-poetry:mainfrom
LouisLau-art:fix/env-activate-bash-on-windows

Conversation

@LouisLau-art
Copy link

@LouisLau-art LouisLau-art commented Feb 6, 2026

Summary

  • make env activate decide output format by detected shell instead of host OS
  • keep shell-prefixed output (source ...) for POSIX shells even on Windows
  • preserve direct invocation output for cmd, powershell, and pwsh
  • add a regression test for Windows + bash shell detection

Fixes #10395.

Testing

  • pytest -q -o addopts='' tests/console/commands/env/test_activate.py

@sourcery-ai
Copy link

sourcery-ai bot commented Feb 6, 2026

Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Adjusts env activation command generation to respect the detected shell rather than the host OS, ensuring POSIX-style shell prefixes are used for bash even on Windows, and adds a regression test for this behavior.

Class diagram for updated env activation command generation

classDiagram
    class EnvActivateCommand {
        +_get_activate_command(env, shell) str
        +_quote(path, shell) str
    }

    class Env {
        +bin_dir
    }

    class PathLike {
        +exists() bool
        +__truediv__(other) PathLike
    }

    EnvActivateCommand ..> Env : uses
    Env "1" --> "1" PathLike : bin_dir

    note for EnvActivateCommand "_get_activate_command now always builds 'command quoted' and applies strip so behavior depends on shell-specific quoting rather than host OS"
Loading

File-Level Changes

Change Details Files
Normalize activate command formatting to always use the shell-appropriate prefix while still supporting Windows-specific quoting.
  • Refactor activate command construction to always prepend the appropriate command (e.g., 'source' or '.') when an activation script exists.
  • Use a temporary quoted variable for the activation script path and apply .strip() to handle cases where no command prefix is required.
  • Remove the explicit WINDOWS-based branch in favor of shell-aware command formatting.
src/poetry/console/commands/env/activate.py
Add a regression test ensuring that bash on Windows uses a shell-prefixed activate command.
  • Patch shell detection to simulate bash being used on Windows in the test environment.
  • Force the WINDOWS flag to True and mock EnvManager.get to return the temporary virtualenv.
  • Execute the env activate command and assert that the output is a bash-style 'source <bin_dir>/activate' line.
tests/console/commands/env/test_activate.py

Assessment against linked issues

Issue Objective Addressed Explanation
#10395 Make poetry env activate output use the appropriate shell prefix (., source, etc.) for POSIX-like shells (e.g., bash) even when running on Windows.
#10395 Base the poetry env activate output format on the detected shell rather than the host operating system, while preserving the existing direct-invocation behavior for PowerShell and cmd.

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

poetry env activate does not work in Bash for Windows

1 participant