mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 16:51:55 +00:00
Fixes DINF-82; This was very much a rabbithole. A few things: - The race that @bobheadxi mentioned here https://github.com/sourcegraph/sourcegraph/pull/63405#discussion_r1648180713 wasn't from `*output.Output` being unsafe, but `outputtest.Buffer` as it happened again (see [DINF-82](https://linear.app/sourcegraph/issue/DINF-82/devsgsg-test-failed-with-a-detected-race-condition)) - There something messed up with `cmds.start()`, which sometimes ends up printing the command output _after_ the exit message instead of before. - The crude `sort.Strings(want|have)` that was there already fixes that. - And without the sleep, it's possible to read the output from the `outputtest.Buffer` before the command outputs get written to it. - The `time.Sleep(300 * time.Milliseconds)` _mitigates/hides_ that problem. At least, this shouldn't blow up in CI and buys us time to fix the whole thing. We're tracking this in DINF-104. And out of 200 runs, I also stumbled on a race in `progress_tty`, tracked in DINF-105 (that packages is originally meant to be used by `src-cli` and was re-used for `sg` 3 years ago). I'm pretty unhappy about the solution, but a bandage is better than nothing. While ideally, we should really reconsider dropping `std.Output` entirely in `sg` and use the good stuff from github.com/charmbracelet instead because we don't want to spend too much time on arcane terminal things ourselves, I'm much more about concerned the concurrency issues mentioned above. ## Test plan CI + `sg bazel test //dev/sg:sg_test --runs_per_test=100` |
||
|---|---|---|
| .. | ||
| _examples | ||
| outputtest | ||
| block.go | ||
| BUILD.bazel | ||
| capabilities.go | ||
| emoji.go | ||
| line.go | ||
| logger.go | ||
| noop_writer.go | ||
| output_unix_test.go | ||
| output_unix.go | ||
| output_windows.go | ||
| output.go | ||
| pending_simple.go | ||
| pending_tty.go | ||
| pending.go | ||
| progress_simple.go | ||
| progress_tty.go | ||
| progress_with_status_bars_simple.go | ||
| progress_with_status_bars_tty.go | ||
| progress_with_status_bars.go | ||
| progress.go | ||
| spinner.go | ||
| status_bar.go | ||
| style.go | ||
| visible_string_width.go | ||