Commit Graph

767 Commits

Author SHA1 Message Date
Ellie Huxtable
29f4a93e30 feat: rework record sync for improved reliability
So, to tell a story

1. We introduced the record sync, intended to be the new algorithm to
   sync history.
2. On top of this, I added the KV store. This was intended as a simple
   test of the record sync, and to see if people wanted that sort of
   functionality
3. History remained syncing via the old means, as while it had issues it
   worked more-or-less OK. And we are aware of its flaws
4. If KV syncing worked ok, history would be moved across

KV syncing ran ok for 6mo or so, so I started to move across history.
For several weeks, I ran a local fork of Atuin + the server that synced
via records instead.

The record store maintained ordering via a linked list, which was a
mistake. It performed well in testing, but was really difficult to debug
and reason about. So when a few small sync issues occured, they took an
extremely long time to debug.

This PR is huge, which I regret. It involves replacing the "parent"
relationship that records once had (pointing to the previous record)
with a simple index (generally referred to as idx). This also means we
had to change the recordindex, which referenced "tails". Tails were the
last item in the chain.

Now that we use an "array" vs linked list, that logic was also replaced.
And is much simpler :D

Same for the queries that act on this data.

----

This isn't final - we still need to add

1. Proper server/client error handling, which has been lacking for a
   while
2. The actual history implementation on top
    This exists in a branch, just without deletions. Won't be much to
    add that, I just don't want to make this any larger than it already
    is

The _only_ caveat here is that we basically lose data synced via the old
record store. This is the KV data from before.

It hasn't been deleted or anything, just no longer hooked up. So it's
totally possible to write a migration script. I just need to do that.
2024-01-01 18:09:23 +00:00
Conrad Ludgate
e2a4e9cf13
fix(stats): time now_local not working 2024-01-01 16:42:36 +00:00
Koichi Murase
c7db7838e3
refactor(bash): factorize __atuin_accept_line (#1476) 2024-01-01 15:20:16 +00:00
Koichi Murase
1350d3fd74
fix(bash): fix small issues of enter_accept for the plain Bash (#1467)
* fix(bash): history should be updated before preexec

* fix(bash): properly execute "--"

With the current implementation, the user command "--" would not be
executed even if it were the intended one.  This is because it would
be confused as an option by the "eval" builtin.  We can specify "--"
to tell "eval" that the later arguments should be literally treated as
the command.

* fix(bash): correctly restore $? and $_

* fix(bash): fix the use of preexec_ret_value

The exit status of preexec_ret_value is used to suppress the execution
of the corresponding command in the extdebug mode.  The current
implementation somehow tries to set $? before the call of stty, which
does not have any effect.  Instead, we can manually turn off the
execution of the user command when the condition matches.

* feat(bash): support array PROMPT_COMMAND of Bash >= 5.1
2024-01-01 14:26:02 +00:00
Ellie Huxtable
7fe152a8a7
fix(install): discord broken link 2023-12-31 19:15:44 +00:00
Ellie Huxtable
9d4fdf71d0
fix(docs): discord link expired 2023-12-31 19:14:24 +00:00
Koichi Murase
a4122f062a
fix(bash): improve the support for enter_accept with ble.sh (#1465)
* feat(bash): check version of ble.sh

blehooks are only supported in ble.sh >= 0.4, so we require the ble.sh
version to be larger or equal to 0.4.  We also describe the version
requirement in README.md.

* fix(bash): use ble.sh's contrib/integration/bash-preexec

ble.sh provides module "contrib/integration/bash-preexec", which can
be used with the same interface as bash-preexec.  This module provides
"preexec_functions" and "precmd_functions" without requiring
bash-preexec.

This module also properly handles it when both ble.sh and bash-preexec
are loaded; the module resolves the conflicts between ble.sh and
bash-preexec, and the module also tries to support bash-preexec in the
detached state of ble.sh.

* fix(bash): use ble.sh's accept-line widget for enter_accept

In ble.sh, one can directly call the widget "accept-line" from a shell
script.  The widget "accept-line" is the actual widget that reserves
the command execution in ble.sh, so calling "accept-line" is
equivalent to the normal execution.  It includes all the necessary
adjustments and processing including stty and history.

In addition, the command will be executed at the top-level context
instead in a function scope.  For example, without ble.sh, running
"declare -A dict=()" through enter_accept will create an associative
array in the function scope unexpectedly.  With ble.sh, since the
command is executed at the top-level context, such a problem does not
happen.

When ble.sh is in a detached state, we fall back to the manual
execution of the command.  In this case, we cannot assume the
existence of the shell function "__bp_set_ret_value", so we always use
__atuin_set_ret_value.
2023-12-28 20:08:45 +00:00
Ellie Huxtable
5401ff12b7
fix(clippy): ignore struct_field_names (#1466)
In these cases, I think that's a _little_ too pedantic.
2023-12-28 20:02:11 +00:00
Koichi Murase
be1f6fd5ca
fix(bash): fix loss of the last output line with enter_accept (#1463)
With a single-line prompt, the last line of the output of the previous
command is overwritten by the prompt on the enter_accept.  In this
situation, `tput cuu` receives 0 as the argument, but `tput cuu 0`
emits the control sequence `\e[0A`, which moves the cursor above by
one line unexpectedly.  This is because the parameter 0 for CUU means
the default value, 1.  In this patch, to avoid moving the cursor when
the prompt offset is 0, we check the offset value before running `tput
cuu`.
2023-12-28 19:34:34 +00:00
Eric Hodel
d52e576129
feat: Add TLS to atuin-server (#1457)
* Add TLS to atuin-server

atuin as a project already includes most of the dependencies necessary
for server-side TLS.  This allows `atuin server start` to use a TLS
certificate when self-hosting in order to avoid the complication of
wrapping it in a TLS-aware proxy server.

Configuration is handled similar to the metrics server with its own
struct and currently accepts only the private key and certificate file
paths.

Starting a TLS server and a TCP server are divergent because the tests
need to bind to an arbitrary port to avoid collisions across tests.  The
API to accomplish this for a TLS server is much more verbose.

* Fix clippy, fmt

* Add TLS section to self-hosting
2023-12-27 14:15:48 +00:00
Ellie Huxtable
86f50e0356
feat: add semver checking to client requests (#1456)
* feat: add semver checking to client requests

This enforces that the client and the server run the same major version
in order to sync successfully.

We're using the `Atuin-Version` http header to transfer this information

If the user is not on the same MAJOR, then they will see an error like
this

> Atuin version mismatch! In order to successfully sync, the client and the server must run the same *major* version
> Client: 17.1.0
> Server: 18.1.0
> Error: could not sync records due to version mismatch

This change means two things

1. We will now only increment major versions if there is a breaking
   change for sync
2. We can now add breaking changes to sync, for any version >17.1.0.
   Clients will fail in a meaningful way.

* lint, fmt, etc

* only check for client newer than server

* Add version header to client too
2023-12-20 09:03:04 +00:00
dependabot[bot]
42ac150fe3
chore(deps): bump lukemathwalker/cargo-chef (#1425)
Bumps lukemathwalker/cargo-chef from latest-rust-1.74.0-buster to latest-rust-1.74.1-buster.

---
updated-dependencies:
- dependency-name: lukemathwalker/cargo-chef
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-19 07:58:29 +00:00
Conrad Ludgate
7aeea1c050
chore(deps): uuidv7 stable (#1451) 2023-12-16 19:21:04 +00:00
Conrad Ludgate
ec131c7c96
update basically everything (#1452) 2023-12-16 19:20:40 +00:00
Ellie Huxtable
d58192ff55
docs(readme): use picture element for logo 2023-12-16 09:23:31 +00:00
Ellie Huxtable
206157dd23
docs(readme): fix light/dark mode logo 2023-12-16 09:20:57 +00:00
Ellie Huxtable
7fe96ff2b7
docs: correct link 2023-12-14 09:02:15 +00:00
Ellie Huxtable
1d0f05b6fb
docs: add fish install script (#1447) 2023-12-14 08:19:51 +00:00
Marcin Puc
a973697724
docs: add Void Linux install instruction (#1445)
* docs(readme): add Void Linux install instruction

* docs: add Void Linux install instruction to advanced-install.md
2023-12-14 08:19:42 +00:00
Ellie Huxtable
57b5b03c11
docs: align setup links in docs and readme (#1446) 2023-12-14 08:04:54 +00:00
Ellie Huxtable
1945c9fb3a
chore: remove issue template (#1444) 2023-12-12 23:46:41 +00:00
Ellie Huxtable
2d922d4069
docs: add link to forum 2023-12-12 23:42:14 +00:00
Ellie Huxtable
8a3834f9c8
docs(readme): add actuated linkback
Thanks again for the sponsorship @alexellis

ref: https://docs.actuated.dev/faq/#is-there-a-sponsored-subscription-for-open-source-projects
2023-12-12 15:33:19 +00:00
Dennis Trautwein
901459b805
fix(shell): respect ZSH's $ZDOTDIR environment variable (#1441) 2023-12-12 10:03:22 +00:00
Ellie Huxtable
7019697fae
Update README.md logo height 2023-12-12 09:43:22 +00:00
Ellie Huxtable
c77b749e62
Update README.md logo 2023-12-12 09:42:49 +00:00
sdr135284
218521226f
fix(history): disallow deletion if the '--limit' flag is present (#1436)
Co-authored-by: sdr13528 <sdr13528@users.noreply.github.com>
2023-12-11 20:20:31 +00:00
Ramses
edc495895a
fix(stats): don't require all fields under [stats] (#1437)
Before this change, when configuring only `common_subcommands` and
not `common_prefix` (so it would take its default value),
atuin produces an error message:
```
Error: could not load client settings  Caused by:     failed to deserialize: missing field `common_prefix`  Location:     atuin-client/src/settings.rs:456:26
Error: could not load client settings

Caused by:
    failed to deserialize: missing field `common_prefix`

Location:
    atuin-client/src/settings.rs:456:26
Error:: command not found
```

With this change, the fields can be specified separately and missing
fields will take their default values.
2023-12-11 20:16:41 +00:00
Josef Friedrich
3c7f6991e3
fix(docs): fix typo (#1439) 2023-12-11 20:16:11 +00:00
Conrad Ludgate
9ca8f10bf3
fix blocking for #1381 (#1438) 2023-12-11 18:06:14 +00:00
Ellie Huxtable
04903bf526
chore(repo): remove issue config (#1433) 2023-12-10 13:26:19 +00:00
Ellie Huxtable
da2e58fbb1
chore(release): prepare for release v17.1.0 (#1432) 2023-12-10 13:00:59 +00:00
Ellie Huxtable
3db71f2c1c
chore: setup git cliff (#1431) 2023-12-10 12:26:28 +00:00
Ellie Huxtable
913c5a0d94
chore(readme): add contributor image to README (#1430) 2023-12-10 11:13:43 +00:00
Dennis Trautwein
bdd7fe661f
fix: respect ZSH's $ZDOTDIR environment variable (#942)
ZSH reads its configuration by default relative to a path that's set via $ZDOTDIR. If $ZDOTDIR is not set, then the value of $HOME is used; this is the usual case. Source:  https://zsh.sourceforge.io/Intro/intro_3.html#IDX11

Also $HOME is save to use, because "The system shall initialize this variable at the time of login to be a pathname of the user's home directory". Source: https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html

Lastly, the shell parameter expansion syntax is save to use generically: https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_02

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2023-12-09 17:52:09 +00:00
Ellie Huxtable
de6221942a
chore: don't group deps (#1424) 2023-12-09 17:44:10 +00:00
Ellie Huxtable
f35ef7459b
chore: run dependabot weekly, not daily (#1423)
* chore: run dependabot weekly, not daily

* group it all
2023-12-09 17:41:51 +00:00
dependabot[bot]
70a283a194
Bump unicode-width from 0.1.10 to 0.1.11 (#1243)
Bumps [unicode-width](https://github.com/unicode-rs/unicode-width) from 0.1.10 to 0.1.11.
- [Commits](https://github.com/unicode-rs/unicode-width/compare/v0.1.10...v0.1.11)

---
updated-dependencies:
- dependency-name: unicode-width
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 17:40:54 +00:00
dependabot[bot]
afbd249fa4
Bump futures-util from 0.3.28 to 0.3.29 (#1344)
Bumps [futures-util](https://github.com/rust-lang/futures-rs) from 0.3.28 to 0.3.29.
- [Release notes](https://github.com/rust-lang/futures-rs/releases)
- [Changelog](https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/futures-rs/compare/0.3.28...0.3.29)

---
updated-dependencies:
- dependency-name: futures-util
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 17:40:43 +00:00
dependabot[bot]
114a6a61af
Bump futures from 0.3.28 to 0.3.29 (#1345)
Bumps [futures](https://github.com/rust-lang/futures-rs) from 0.3.28 to 0.3.29.
- [Release notes](https://github.com/rust-lang/futures-rs/releases)
- [Changelog](https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/futures-rs/compare/0.3.28...0.3.29)

---
updated-dependencies:
- dependency-name: futures
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 17:40:35 +00:00
dependabot[bot]
5ce2a4a677
Bump serde_json from 1.0.107 to 1.0.108 (#1363)
Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.107 to 1.0.108.
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.107...v1.0.108)

---
updated-dependencies:
- dependency-name: serde_json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 17:40:22 +00:00
dependabot[bot]
2d9c595c13
Bump lukemathwalker/cargo-chef (#1401)
Bumps lukemathwalker/cargo-chef from latest-rust-1.73.0-buster to latest-rust-1.74.0-buster.

---
updated-dependencies:
- dependency-name: lukemathwalker/cargo-chef
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 17:40:00 +00:00
dependabot[bot]
407dca0802
Bump debian from bullseye-20231030-slim to bullseye-20231120-slim (#1406)
Bumps debian from bullseye-20231030-slim to bullseye-20231120-slim.

---
updated-dependencies:
- dependency-name: debian
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 17:39:53 +00:00
Patrick Jackson
a52568be79
fix: reenable enter_accept for bash (#1408)
* fix: reenable enter_accept for bash

* fix: Fix the shellcheck warnings
2023-12-05 17:56:47 +00:00
Ellie Huxtable
839965a8d7
chore: update rusty_paseto and rusty_paserk (#1420) 2023-12-02 22:47:41 +00:00
Patrick Jackson
1ce88c9d17
fix(fish): accept multiline commands (#1418) 2023-12-02 11:14:56 +00:00
Ellie Huxtable
1c3d6c6ce8
chore: cargo update (#1419) 2023-12-02 11:12:14 +00:00
Ellie Huxtable
e55b34b816
chore: update to sqlx 0.7.3 (#1416) 2023-11-29 09:30:34 +00:00
Patrick Jackson
e09571153c
feat: allow spaces in stats prefixes (#1414) 2023-11-29 09:01:43 +00:00
Ellie Huxtable
b530d39c3f
docs: new stats config (#1412) 2023-11-23 09:59:56 +00:00