Skip to content

Commit

Permalink
add support for dumping motd on session creation
Browse files Browse the repository at this point in the history
This patch adds support for one of the two motd modes
that I plan to support. In this basic "dump" mode,
we only display the message of the day when a user
first creates a session. Since we are doing it right
at the beginning, we can be confident we won't be
mangling the restore buffer. Directly injecting the
message of the day into the output stream is much more
fraught on reconnect.

I was hoping that this would be a simple change, but
it would up being quite a bit more involved than I
had hoped. The main reason for this is the interaction
between the prompt prefix injection and message of the
day injection. We need to make sure that motd injection
happens after the prompt prefix shell code has finished
executing so that it does not get clobbered, but unfortunately
this is not as easy as just doing one after the other.

With the naive approach there is a race condition
where first we write the prefix injection shell code to
the shell process, then we write out the message of the
day, then the shell finishes processing the shell code
and issues the terminal reset code emitted by the `clear`
command at the end of the prompt prefix shell code.

To deal with this, I started scanning for the control
code emitted by `clear` in the output stream. I was
able to re-use the efficient trie I wrote for the
keybindings engine to do this.

This addresses the first part of #5, but the issue
is not resolved yet. I also realized that two different
config variables to control this behavior leaves too much
room for weird states. In particular, I worried about
doing a direct dump during reattach. I decided it is better
to do everything via one variable, where the mode implies
when we actually show the motd.
  • Loading branch information
ethanpailes committed Mar 20, 2024
1 parent 510817b commit 5c3b58a
Show file tree
Hide file tree
Showing 24 changed files with 1,020 additions and 236 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: moonrepo/setup-rust@v1
- uses: moonrepo/setup-rust@b8edcc56aab474d90c7cf0bb8beeaf8334c15e9f
with:
channel: '1.74.0'
bins: cargo-deny
- run: sudo apt-get install libpam0g-dev
- run: cargo deny --all-features check

postsubmit:
Expand Down
20 changes: 13 additions & 7 deletions .github/workflows/presubmit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,19 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: moonrepo/setup-rust@v1
- uses: moonrepo/setup-rust@b8edcc56aab474d90c7cf0bb8beeaf8334c15e9f
with:
channel: '1.74.0'
- run: sudo apt-get install zsh fish
- run: cargo test --all-features
- run: sudo apt-get install zsh fish libpam0g-dev
- run: SHPOOL_LEAVE_TEST_LOGS=true cargo test --all-features
- uses: actions/upload-artifact@v4
id: upload-logs-step
with:
name: test-logs
path: /tmp/shpool-test*/*.log
- name: Output logs location
run: echo 'Artifact ID: ${{ steps.upload-logs-step.outputs.artifact-id }}'
run: echo 'Artifact URL: ${{ steps.upload-logs-step.outputs.artifact-url }}'

# miri does not handle all the IO we do, disabled for now.
#
Expand All @@ -36,32 +40,34 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: moonrepo/setup-rust@v1
- uses: moonrepo/setup-rust@b8edcc56aab474d90c7cf0bb8beeaf8334c15e9f
with:
components: rustfmt
channel: nightly
- run: sudo apt-get install libpam0g-dev
- run: cargo +nightly fmt -- --check

cranky:
name: cargo +nightly cranky --all-targets -- -D warnings
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: moonrepo/setup-rust@v1
- uses: moonrepo/setup-rust@b8edcc56aab474d90c7cf0bb8beeaf8334c15e9f
with:
components: clippy
bins: [email protected]
channel: nightly
- run: sudo apt-get install zsh fish
- run: sudo apt-get install zsh fish libpam0g-dev
- run: cargo +nightly cranky --all-targets -- -D warnings

deny:
name: cargo deny --all-features check licenses
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: moonrepo/setup-rust@v1
- uses: moonrepo/setup-rust@b8edcc56aab474d90c7cf0bb8beeaf8334c15e9f
with:
channel: '1.74.0'
bins: cargo-deny
- run: sudo apt-get install libpam0g-dev
- run: cargo deny --all-features check licenses
Loading

0 comments on commit 5c3b58a

Please sign in to comment.