• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tomerfiliba / plumbum / 26772874612
88%

Build:
DEFAULT BRANCH: master
Ran 01 Jun 2026 06:09PM UTC
Jobs 0
Files 0
Run time –
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

pending completion
26772874612

push

github

web-flow
fix(async): correct remote streaming, pipeline TEE, and command binding (#806)

* fix(async): correct remote streaming, pipeline TEE, and command binding

Addresses the latent async bugs found in the pre-2.0 review (#805):

- popen()/AsyncTEE on a remote command silently ran it on the *local*
  machine (formulated without the ssh wrapper). The streaming path only
  works for local commands, so guard it: non-local commands now raise
  NotImplementedError pointing at .run() (which correctly delegates to
  the sync command in a thread). [#1]
- AsyncTEE was broken on pipelines (it fed a formulated pipe string,
  including a literal "|", to create_subprocess_exec). It now builds on
  _popen, gaining pipeline support and the local-only guard. [#2]
- Add with_env()/with_cwd() to async commands -- previously documented as
  supported via delegation but never implemented (raised AttributeError).
  The non-pipeline _popen path now also threads nested bound env/cwd
  through, so these actually take effect. [#3, #5]
- __getitem__ now preserves the concrete async subtype (e.g.
  AsyncLocalCommand) instead of downgrading to AsyncCommand; executable/
  remote unwrap bound layers so they keep working after binding. [#4]
- run(): use asyncio.get_running_loop() instead of the deprecated
  get_event_loop(). [#6]

Also make LocalEnv.expand/expanduser thread-safe: they swap the global
os.environ, and interleaved save/restore across threads could leave it
permanently replaced -- now relevant since async runs sync commands in
executor threads. [#8]

Assisted-by: ClaudeCode:claude-opus-4.8

* fix(async): drain upstream stderr in AsyncTEE pipelines

Addresses the Copilot review on #806: when AsyncTEE ran a pipeline, it only
consumed the final stage's stdout/stderr. Each upstream stage has its own
stderr pipe, so a chatty upstream stderr could fill its buffer and deadlock
the final wait() (only communicate() drained every stage, never wait()).

Drain (and display, like a shell... (continued)
Source Files on build 26772874612
Detailed source file information is not available for this build.
  • Back to Repo
  • aaefb224 on github
  • Prev Build on master (#26766755654)
  • Next Build on master (#26777652313)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc