Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix https://github.com/cmderdev/cmder/issues/2789 #2791

Merged
merged 1 commit into from
Dec 5, 2022

Conversation

chrisant996
Copy link
Contributor

Holding ^C made git.exe hang while cmd.exe (Clink) updated the prompt.

The prompt script had three problems:

  1. It invoked git config every time a prompt was displayed, to figure out where to skip invoking git status. But it even did that if the current directory wasn't part of a git repo.
  2. It invoked git config two times for every single prompt, to attempt to improve performance if the user disables git status coloring. But two times for every single prompt is expensive, so it has the opposite effect in the general case, and noticeably degrades performance.
  3. It invoked git config using a blocking call, instead of using the async prompt support in Clink. That significantly reduced the benefit of having used async prompt filtering for git status.

Now the git config invocations use async prompt filtering, which lets the prompt display instantaneously. It also now uses a timer to avoid invoking git config repeatedly when new prompts show up in rapid succession.

Also, the cmderGitStatusOptIn variable is no longer leaked into the Lua global namespace.

These changes resolve the issue: holding ^C is very fast and no longer causes git.exe to hang.

Holding ^C made git.exe hang while cmd.exe (Clink) updated the prompt.

The prompt script had three problems:

1.  It invoked `git config` every time a prompt was displayed, to
    figure out where to skip invoking `git status`.  But it even did
    that if the current directory wasn't part of a git repo.
2.  It invoked `git config` two times for every single prompt, to
    attempt to improve performance if the user disables `git status`
    coloring.  But two times for every single prompt is expensive, so
    it has the opposite effect in the general case, and noticeably
    degrades performance.
3.  It invoked `git config` using a blocking call, instead of using the
    async prompt support in Clink.  That significantly reduced the
    benefit of having used async prompt filtering for `git status`.

Now the `git config` invocations use async prompt filtering, which lets
the prompt display instantaneously.  It also now uses a timer to avoid
invoking `git config` repeatedly when new prompts show up in rapid
succession.

Also, the `cmderGitStatusOptIn` variable is no longer leaked into the
Lua global namespace.

These changes resolve the issue: holding ^C is very fast and no longer
causes git.exe to hang.
@DRSDavidSoft
Copy link
Contributor

👍🏻 LGTM!

@DRSDavidSoft DRSDavidSoft merged commit 24ba9c3 into cmderdev:master Dec 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
👆 clink Upstream issue in clink. 🎨 Type: Enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants