Skip to content

[Automated] Update pip CLI Options - #5124

Closed
thomhurst wants to merge 1 commit into
mainfrom
automated/update-cli-options-pip
Closed

thomhurst wants to merge 1 commit into
mainfrom
automated/update-cli-options-pip

Conversation

@thomhurst

@thomhurst thomhurst commented Sep 14, 2026

Copy link
Copy Markdown
Owner

Summary

This PR contains automatically generated updates to pip CLI options classes.

The generator scraped the latest CLI help output from the installed tool.

Changes

  • Updated options classes to reflect latest CLI documentation
  • Added new commands if any were detected
  • Updated option types and descriptions

Assembly-wide public API impact

Affected API families: Pip.

  • Added APIs: 8
  • Removed or changed APIs: 10
  • Members with matching names but changed signatures: 6

Breaking changes are present. Consumers may need to update method arguments, option property types or nullability, enum members, and references to removed APIs.

Representative removed or changed members:

  • ModularPipelines.Python.Options.PipUninstallOptions.Deconstruct(out System.Collections.Generic.IEnumerable<string!>! Package) -> void
  • ModularPipelines.Python.Options.PipUninstallOptions.Package.get -> System.Collections.Generic.IEnumerable<string!>!
  • ModularPipelines.Python.Options.PipUninstallOptions.Package.init -> void
  • ModularPipelines.Python.Options.PipUninstallOptions.PipUninstallOptions(System.Collections.Generic.IEnumerable<string!>! Package) -> void
  • ModularPipelines.Python.Options.PipWheelOptions.Deconstruct(out System.Collections.Generic.IEnumerable<string!>! RequirementSpecifier) -> void

Representative added members:

  • ModularPipelines.Python.Options.PipUninstallOptions.Package.get -> System.Collections.Generic.IEnumerable<string!>?
  • ModularPipelines.Python.Options.PipUninstallOptions.Package.set -> void
  • ModularPipelines.Python.Options.PipUninstallOptions.PipUninstallOptions() -> void
  • ModularPipelines.Python.Options.PipWheelOptions.PipWheelOptions() -> void
  • ModularPipelines.Python.Options.PipWheelOptions.RequirementSpecifier.get -> System.Collections.Generic.IEnumerable<string!>?

Command coverage

Command coverage report:

  • pip (pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)): 14 commands, tree a9b92993f96a5cee7b1131d5da44c679e8bd64ee6a736a1d92dc95e915bd18ac
    • Baseline comparison: 14 commands at pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12) -> 14 commands at pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)

Verification

  • Solution builds successfully

🤖 Generated with ModularPipelines.OptionsGenerator

Summary by CodeRabbit

  • API Changes
    • Updated Python package configuration options to support nullable, settable package and requirement values.
    • Removed constructor and deconstruction-based patterns for these option types.
    • Python download and install operations now require options to be provided explicitly.
    • Updated download and install results to use the standard command result type.

@thomhurst thomhurst added automated dependencies Pull requests that update a dependency file labels Sep 14, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 14, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-14T20:08:05.023125Z bfa2889 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: f5c8ecb1-0593-40eb-97da-a3ba4f85bc74

📥 Commits

Reviewing files that changed from the base of the PR and between bc4bdba and bfa2889.

⛔ Files ignored due to path filters (10)
  • src/ModularPipelines.Python/Generated/Pip.Generation.json is excluded by !**/generated/**
  • src/ModularPipelines.Python/Options/PipDownloadOptions.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Options/PipHashOptions.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Options/PipInstallOptions.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Options/PipSearchOptions.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Options/PipShowOptions.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Options/PipUninstallOptions.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Options/PipWheelOptions.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Services/IPip.Generated.cs is excluded by !**/*.generated.*
  • src/ModularPipelines.Python/Services/Pip.Generated.cs is excluded by !**/*.generated.*
📒 Files selected for processing (1)
  • src/ModularPipelines.Python/PublicAPI.Unshipped.txt

Included review availability: Your plan provides up to 4 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The public API tracking file updates two Python option types and two IPip methods. Option properties are nullable and settable. The methods require non-null options and return the top-level CommandResult type.

Changes

Python API contracts

Layer / File(s) Summary
Option model properties
src/ModularPipelines.Python/PublicAPI.Unshipped.txt
PipUninstallOptions.Package and PipWheelOptions.RequirementSpecifier are nullable and settable. Their constructors and Deconstruct members are removed.
Pip method signatures
src/ModularPipelines.Python/PublicAPI.Unshipped.txt
IPip.DownloadAsync and IPip.InstallAsync require non-null options and return Task<ModularPipelines.CommandResult>.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Feature

Merge Risk: ⚪ Minimal · up to bfa28

The Python API updates match the generated contracts, so no merge-blocking behavior is identified.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: updating the pip CLI options. The automated prefix adds minor noise but does not make the title unclear.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch automated/update-cli-options-pip

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the API track
Settable options hop back
Constructors leave the scene
Required options stand clean
Command results take the lead

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Sep 14, 2026

Copy link
Copy Markdown

Greptile Summary

This automated regeneration updates pip option requiredness, documentation, validation, service signatures, and the recorded public API.

  • Adds conditional required-input validation to download, install, and wheel options.
  • Converts uninstall and wheel positional operands into nullable mutable properties where alternative inputs are accepted.
  • Makes download and install service option objects mandatory.
  • Contains one argument-handling issue involving repeated enumeration of caller-provided sequences.

Confidence Score: 4/5

The PR is not safe to merge until validation no longer consumes potentially single-use requirement sequences before command-line rendering.

The new validators enumerate public IEnumerable inputs and the command builder enumerates them again, so supported single-use sequences can lose their operands between validation and execution.

Files Needing Attention: src/ModularPipelines.Python/Options/PipDownloadOptions.Generated.cs, src/ModularPipelines.Python/Options/PipInstallOptions.Generated.cs, src/ModularPipelines.Python/Options/PipWheelOptions.Generated.cs

Important Files Changed

Filename Overview
src/ModularPipelines.Python/Options/PipDownloadOptions.Generated.cs Adds required-input validation that can consume a single-use requirement sequence before serialization.
src/ModularPipelines.Python/Options/PipInstallOptions.Generated.cs Adds equivalent conditional validation for positional, requirements-file, and editable inputs, including the repeated-enumeration issue.
src/ModularPipelines.Python/Options/PipWheelOptions.Generated.cs Replaces the required positional constructor with conditional validation and introduces the same repeated-enumeration issue.
src/ModularPipelines.Python/Options/PipUninstallOptions.Generated.cs Makes package operands optional at the property level while preserving runtime validation against the requirements-file alternative.
src/ModularPipelines.Python/Services/IPip.Generated.cs Updates download and install interface methods to require non-null option objects.
src/ModularPipelines.Python/Services/Pip.Generated.cs Aligns service implementations with mandatory download and install option parameters.

Reviews (1): Last reviewed commit: "chore: Update pip CLI options" | Re-trigger Greptile


/// <inheritdoc />
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Validation Consumes Input Sequences

When a caller supplies a single-use IEnumerable, the new validation calls Any() before command-line serialization enumerates the same value again. The sequence can pass validation but be exhausted during rendering, causing pip to run without the required package or requirement operand. The same generated pattern appears in PipInstallOptions and PipWheelOptions; validation and rendering should share one materialized snapshot.

@github-actions

Copy link
Copy Markdown
Contributor

Code Review: PR #5124

This PR is the mechanical regeneration following the generator-logic fix in commit bc4bdbaa ("fix(generator): retain pip requirement input alternatives (#5120)"), following the exact workflow prescribed by CLAUDE.md for autogenerated CLI options PRs.

Review summary:

  • The diff only touches generated files (*.Generated.cs, PublicAPI.Unshipped.txt, Pip.Generation.json) — no hand-editing of generated options.
  • Removing Required = true from PipUninstallOptions.Package and PipWheelOptions.RequirementSpecifier (making them optional) while adding IValidatableObject.Validate() OR-checks (Package/Requirement, or RequirementSpecifier/Requirement/Editable) correctly fixes a real pre-existing inconsistency: previously Required=true forced those properties to always be non-empty even when a valid alternative like --requirement/--editable was supplied instead.
  • The new Validate() logic (De Morgan negation of the OR-condition across alternatives) is correct, and the property types referenced (Requirement: IEnumerable<string>?, Editable: string?) match the actual generated field types.
  • New <param> XML doc tags added for PipHashOptions.File, PipSearchOptions.Query, PipShowOptions.Package correctly correspond to their single primary-constructor parameter.
  • PublicAPI.Unshipped.txt changes accurately reflect every member addition/removal/signature change in the generated code, with no missing or stray entries.
  • No in-repo call sites construct PipUninstallOptions/PipWheelOptions positionally or rely on the removed defaults, so the breaking signature changes have no fallout within the repository, consistent with the PR's stated impact.

No correctness, cleanup, simplification, efficiency, or CLAUDE.md-convention issues found. Approving as a clean, faithful regeneration.

@thomhurst

Copy link
Copy Markdown
Owner Author

Closing this generated PR because review found collection inputs can be consumed during validation before command rendering: #5124 (comment). Source defect #5126 tracks the generator fix and single-use sequence regressions. Fresh pip generation will follow that fix on main; #4737 and runtime-test PR #5125 remain open. Generated output will not be patched in place.

@thomhurst

Copy link
Copy Markdown
Owner Author

Fresh replacement generated after the single-use collection source fix #5128: #5144, from latest main 1b1f082 via https://github.com/thomhurst/ModularPipelines/actions/runs/35001246869. Its generated Python integration CI passes, and runtime PR #5125 has incorporated that exact output with 20 passing local tests.

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

Labels

automated dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant