| Commit message (Collapse) | Author | Age |
| |
|
|
|
| |
That helps remove duplicated code and rustc/cargo will now also show
dead code correctly.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The `fn into_utc` was defined in both `atuin-server-postgres` and
`atuin-server-sqlite`, with tests being in the postgres crate. This
pulls the function into the `atuin-server-database` crate along with the
tests and references it from both crates.
## Checks
- [X] I am happy for maintainers to push small adjustments to this PR,
to speed up the review cycle
- [X] I have checked that there are no existing pull requests for the
same thing
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the database crates for atuin-server, there is `fn fix_error`. This
PR implements `From<sqlx::Error>` on `DbError` which makes it possible
to mostly use `?` to bubble up the errors.
There are cases where `?` is not being used e.g.
```rust
async fn get_session(&self, token: &str) -> DbResult<Session> {
sqlx::query_as("select id, user_id, token from sessions where token = $1")
.bind(token)
.fetch_one(&self.pool)
.await
.map_err(fix_error)
.map(|DbSession(session)| session)
}
```
There are two options
## 1. Use `Into::into`
```rust
async fn get_session(&self, token: &str) -> DbResult<Session> {
sqlx::query_as("select id, user_id, token from sessions where token = $1")
.bind(token)
.fetch_one(&self.pool)
.await
.map_err(fix_error)
.map(|DbSession(session)| session)
}
```
## 2. Create a variable and use `?`
```rust
async fn get_session(&self, token: &str) -> DbResult<Session> {
let session = sqlx::query_as("select id, user_id, token from sessions where token = $1")
.bind(token)
.fetch_one(&self.pool)
.await
.map(|DbSession(session)| session)?;
Ok(session)
}
```
I chose to do option 1 as it was just a find/replace but say the word
and I'll convert them all to option 2
## Checks
- [X] I am happy for maintainers to push small adjustments to this PR,
to speed up the review cycle
- [X] I have checked that there are no existing pull requests for the
same thing
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
<!-- Thank you for making a PR! Bug fixes are always welcome, but if
you're adding a new feature or changing an existing one, we'd really
appreciate if you open an issue, post on the forum, or drop in on
Discord -->
## Checks
- [ ] I am happy for maintainers to push small adjustments to this PR,
to speed up the review cycle
- [ ] I have checked that there are no existing pull requests for the
same thing
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Remove the expensive and inaccurate `total_history` field from the API
index endpoint. The query `select sum(total) from
total_history_count_user` ran on every request but is no longer
relevant. The underlying table remains for per-user cached counts used
by `/sync/count`.
## Checks
- [x] I am happy for maintainers to push small adjustments to this PR,
to speed up the review cycle
- [x] I have checked that there are no existing pull requests for the
same thing
|
| |
|
|
|
|
|
|
|
|
|
| |
Support for routing read queries to read replicas for Postgres
We have very high database usage these days, and now run shell history
sync off of [Planetscale](https://planetscale.com/)
This setup gives us 2x read replicas, meaning we can reduce load on the
primary
I doubt this is required for anyone else's setup - lmk if so.
|
| |
|
|
|
|
|
|
|
|
| |
Only really useful for Atuin cloud
Given a % chance, either use the idx cache or use the old aggregation
query
This is to enable us to test rollout the idx cache, without breaking all
queries in weird ways. Can monitor for a change in http codes/etc, and
easily roll back.
|
| |
|
|
| |
inserted (#2841)
|
| | |
|
| |
|
|
|
|
|
|
|
| |
* chore: update to rust 1.88
* clippy + fmt
* update ci version
* update flake
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Move db_uri setting to DbSettings
* WIP: sqlite crate framework
* WIP: Migrations
* WIP: sqlite implementation
* Add sqlite3 to Docker image
* verified_at needed for user query
* chore(deps): bump debian (#2772)
Bumps debian from bookworm-20250428-slim to bookworm-20250520-slim.
---
updated-dependencies:
- dependency-name: debian
dependency-version: bookworm-20250520-slim
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix(doctor): mention the required ble.sh version (#2774)
References:
https://forum.atuin.sh/t/1047
* fix: Don't print errors in `zsh_autosuggest` helper (#2780)
Previously, this would result in long multi-line errors when typing,
making it hard to see the shell prompt:
```
$ Error: could not load client settings
Caused by:
0: could not create config file
1: failed to create file `/home/jyn/.config/atuin/config.toml`
2: Required key not available (os error 126)
Location:
atuin-client/src/settings.rs:675:54
fError: could not load client settings
Caused by:
0: could not create config file
1: failed to create file `/home/jyn/.config/atuin/config.toml`
2: Required key not available (os error 126)
Location:
atuin-client/src/settings.rs:675:54
faError: could not load client settings
```
Silence these in autosuggestions, such that they only show up when
explicitly invoking atuin.
* fix: `atuin.nu` enchancements (#2778)
* PR feedback
* Remove sqlite3 package
* fix(search): prevent panic on malformed format strings (#2776) (#2777)
* fix(search): prevent panic on malformed format strings (#2776)
- Wrap format operations in panic catcher for graceful error handling
- Improve error messages with context-aware guidance for common issues
- Let runtime-format parser handle validation to avoid blocking valid formats
Fixes crash when using malformed format strings by catching formatting
errors gracefully and providing actionable guidance without restricting
legitimate format patterns like {command} or {time}.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Satisfy cargo fmt
* test(search): add regression tests for format string panic (#2776)
- Add test for malformed JSON format strings that previously caused panics
- Add test to ensure valid format strings continue to work
- Prevent future regressions of the format string panic issue
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Koichi Murase <myoga.murase@gmail.com>
Co-authored-by: jyn <github@jyn.dev>
Co-authored-by: Tyarel8 <98483313+Tyarel8@users.noreply.github.com>
Co-authored-by: Brian Cosgrove <cosgroveb@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
| |
* chore: upgrade to 2024 edition
* ugh unsafe
* format
* nixxxxxxxxxxx why
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* add verified column to users table
* add database functions to check if verified, or to verify
* getting there
* verification check
* use base64 urlsafe no pad
* add verification client
* clippy
* correct docs
* fix integration tests
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, in the event that there was a configuration issue and the
atuin server failed to connect to PostgreSQL, it would log the password.
For example, if the password authentication failed the following log
message would be printed:
Error: failed to connect to db: PostgresSettings { db_uri:
"postgres://atuin:definitelymypassword@db.example.com/atuin" }
This change sets the password to "****" when printing it via Debug:
Error: failed to connect to db: PostgresSettings { db_uri:
"postgres://atuin:****@db.example.com/atuin" }
Hopefully few people use **** as the actual password.
|
|
|
I'd like to tidy up the root a little, and it's nice to have all the
rust crates in one place
|