Commit Graph

767 Commits

Author SHA1 Message Date
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
e2a4e9cf13 fix(stats): time now_local not working 2024-01-01 16:42:36 +00:00
c7db7838e3 refactor(bash): factorize __atuin_accept_line (#1476) 2024-01-01 15:20:16 +00:00
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
7fe152a8a7 fix(install): discord broken link 2023-12-31 19:15:44 +00:00
9d4fdf71d0 fix(docs): discord link expired 2023-12-31 19:14:24 +00:00
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
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
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
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
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
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
7aeea1c050 chore(deps): uuidv7 stable (#1451) 2023-12-16 19:21:04 +00:00
ec131c7c96 update basically everything (#1452) 2023-12-16 19:20:40 +00:00
d58192ff55 docs(readme): use picture element for logo 2023-12-16 09:23:31 +00:00
206157dd23 docs(readme): fix light/dark mode logo 2023-12-16 09:20:57 +00:00
7fe96ff2b7 docs: correct link 2023-12-14 09:02:15 +00:00
1d0f05b6fb docs: add fish install script (#1447) 2023-12-14 08:19:51 +00:00
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
57b5b03c11 docs: align setup links in docs and readme (#1446) 2023-12-14 08:04:54 +00:00
1945c9fb3a chore: remove issue template (#1444) 2023-12-12 23:46:41 +00:00
2d922d4069 docs: add link to forum 2023-12-12 23:42:14 +00:00
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
901459b805 fix(shell): respect ZSH's $ZDOTDIR environment variable (#1441) 2023-12-12 10:03:22 +00:00
7019697fae Update README.md logo height 2023-12-12 09:43:22 +00:00
c77b749e62 Update README.md logo 2023-12-12 09:42:49 +00:00
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
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
3c7f6991e3 fix(docs): fix typo (#1439) 2023-12-11 20:16:11 +00:00
9ca8f10bf3 fix blocking for #1381 (#1438) 2023-12-11 18:06:14 +00:00
04903bf526 chore(repo): remove issue config (#1433) 2023-12-10 13:26:19 +00:00
da2e58fbb1 chore(release): prepare for release v17.1.0 (#1432) v17.1.0 2023-12-10 13:00:59 +00:00
3db71f2c1c chore: setup git cliff (#1431) 2023-12-10 12:26:28 +00:00
913c5a0d94 chore(readme): add contributor image to README (#1430) 2023-12-10 11:13:43 +00:00
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
de6221942a chore: don't group deps (#1424) 2023-12-09 17:44:10 +00:00
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
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
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
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
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
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
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
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
839965a8d7 chore: update rusty_paseto and rusty_paserk (#1420) 2023-12-02 22:47:41 +00:00
1ce88c9d17 fix(fish): accept multiline commands (#1418) 2023-12-02 11:14:56 +00:00
1c3d6c6ce8 chore: cargo update (#1419) 2023-12-02 11:12:14 +00:00
e55b34b816 chore: update to sqlx 0.7.3 (#1416) 2023-11-29 09:30:34 +00:00
e09571153c feat: allow spaces in stats prefixes (#1414) 2023-11-29 09:01:43 +00:00
b530d39c3f docs: new stats config (#1412) 2023-11-23 09:59:56 +00:00