Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Memoize env-keyed subprocess probes through one helper: composer, python and ruby each define the same env key and drifted on when an answer is kept

Offen
#1,888 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@mikolalysenko arbeitet bereits daran.

Seit 30.10.2026.

  • #1895 von @mikolalysenko — offen

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
25/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
rust
Bereich
tooling

Rechercherichtung

Read crates/socket-patch-core/src/crawlers/composer_crawler.rs, python_crawler.rs, and ruby_crawler.rs, then inspect the shared process utilities in utils/process.rs. Compare the memoization rules and tests named in the issue, especially the environment-change keep rule. Done when the three crawlers use the shared helper and the listed tests, including a test for changed environments, pass; pull request #1895 is already open.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

agent:claimed agent:triaged arch-audit priority:p1 refactor

[agent] Filed by the scheduled architecture audit (audit-core). Register: register.

Kind: refactor. Register ID: A32.

Problem

Three crawlers memoize a subprocess answer (composer config, the Python site query, gem env), keyed on the sorted process environment plus the cwd. The key function is byte-identical in all three:

let mut vars: Vec<_> = std::env::vars_os().collect();
vars.sort();
(vars, std::env::current_dir().ok())
  • composer: EnvKeyedMemo + env_key, composer_crawler.rs L477-L550.`` It is a single slot, and it keeps an answer only if the environment is unchanged after the subprocess returns.
  • python: KeyedMemo<K, V> + site_query_key, python_crawler.rs L2765-L2817.```` It is a single slot and stores every answer (let value = run()?; *lock() = Some((key, value.clone()))). It has no env-unchanged check, so an answer computed while another thread changed the environment is filed under the old key.
  • ruby: GemEnvMemo (a HashMap of OnceCells) + gem_env_key, ruby_crawler.rs L1012-L1023 and L1625-L1650.`````` It keeps every key it has ever seen, never evicts, single-flights per key, and has composer's env-unchanged check.

The drift (python's missing env-unchanged check) comes from reading the code; I did not execute it. It only matters when tests or the CLI change env concurrently.

Proposed change
  • Add one utils::process::EnvKeyedMemo<V> with an env_key(). Use a single slot and composer's rule: keep an answer only when the env is unchanged after the run.
  • Composer and python use it directly.
  • Ruby's async single-flight can wrap the same key type and keep-rule. Alternatively, ruby's map can become the single slot, since no caller needs more than one environment at a time.
  • Delete the three key functions and the two memo structs.
Size

3 files plus utils/process.rs, about −60 lines.

Acceptance criteria
  • Behavior is unchanged. Composer's get_or_run_keyed tests, python's memo test (python_crawler.rs ~L8126) and ruby's memoize_gem_env_homes tests must stay green and move to the shared helper.
  • One test covers the keep rule: an answer computed while the env changed is not cached.
Vorherrschende Sprache
Rust
Sterne
8
Forks
2
Ø Merge
19 Std. 12 Min.
Gemergte PRs (30 T.)
709

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus SocketDev/socket-patch

Alle Issues in SocketDev/socket-patch

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.