Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f841f49
feat(linux): keep stored files before a format upgrade and open .sql …
datlechin Nov 5, 2026
d6dd814
docs(linux): changelog fragments for #4049
datlechin Nov 5, 2026
f4cdf9e
fix(linux): drop unfinished history copies and hand scripts to the ch…
datlechin Nov 5, 2026
16affd9
fix(linux): pass the header to content_type_guess as an option
datlechin Nov 5, 2026
16bdbdd
fix(linux): remote .sql files, plural forms in the catalogue check, n…
datlechin Nov 5, 2026
4b3bfb9
fix(linux): gate the PPA on complete catalogues and re-ask for script…
datlechin Nov 5, 2026
a3852c0
fix(linux): scripts handed to a window still connecting wait where it…
datlechin Nov 5, 2026
e7225e6
fix(linux): a script a restoring session holds in a saved tab waits f…
datlechin Nov 5, 2026
3c99a5d
fix(linux): ask for a connection while windows settle instead of gues…
datlechin Nov 5, 2026
6b10280
fix(linux): drop an import the routing no longer uses
datlechin Nov 5, 2026
56f73c4
fix(linux): a waiting script brings forward a tab another window rest…
datlechin Nov 5, 2026
68280c6
fix(linux): a script released after saved tabs load looks in every wi…
datlechin Nov 5, 2026
8918f17
fix(core-storage): every history and saved-query deletion, and retent…
datlechin Nov 5, 2026
f0b67b8
fix(core-storage): upgrade copies keep only what the user has not del…
datlechin Nov 5, 2026
9107bc0
fix(core-storage): scrub a new history copy's index and trim connecti…
datlechin Nov 5, 2026
a914940
fix(core-storage): remove the SQLite journals of unfinished and delet…
datlechin Nov 5, 2026
9c508af
fix(core-storage): sweep what a crash leaves of a copy, journals befo…
datlechin Nov 5, 2026
5b529f9
fix(linux): keep a script's location as handed over, and drop a histo…
datlechin Nov 5, 2026
8169278
docs(linux): what happens to a copy that cannot be trimmed
datlechin Nov 5, 2026
d16e45f
fix(core-storage): user deletes reach the upgrade copies before the d…
datlechin Nov 5, 2026
4db2662
fix(linux): scripts go to the session in front when asked, and a busy…
datlechin Nov 5, 2026
92b253f
test(linux): read a toast's title as the optional it is
datlechin Nov 5, 2026
1e7ed07
refactor(linux): script inputs in one enum, so the window's input han…
datlechin Nov 5, 2026
a4a22be
fix(linux): read the import preview's list-item rows in its test, and…
datlechin Nov 5, 2026
9f70cc6
Merge remote-tracking branch 'origin/main' into fix/linux-beta-fixes
datlechin Nov 6, 2026
8fab653
Merge remote-tracking branch 'origin/main' into fix/linux-beta-fixes
datlechin Nov 6, 2026
97a7279
Merge remote-tracking branch 'origin/main' into fix/linux-beta-fixes
datlechin Nov 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/build-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,18 @@ jobs:
# checks in every rust-format entry.
- name: Check the catalogues
run: meson test -C _build --no-rebuild --suite po --print-errorlogs
# Reported, never failed: strings land before the translation run
# after the string freeze. A release refuses the gap
# (release-linux.yml, po/README.md).
- name: Report untranslated entries
run: |
status=0
po/check-complete.sh >> "$GITHUB_STEP_SUMMARY" || status=$?
case "$status" in
0) ;;
1) echo "::warning title=Translations::a language in po/LINGUAS has untranslated or fuzzy entries, which a release refuses (linux/po/README.md)" ;;
*) exit "$status" ;;
esac
# Translators start from this template (po/README.md), since few
# distributions ship gettext 1.0 yet.
- name: Publish tablepro.pot
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/release-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,9 @@ jobs:
run: |
meson setup _build --fatal-meson-warnings
meson compile -C _build tablepro-pot
# A language in po/LINGUAS ships complete (po/README.md).
- name: Every shipped catalogue is complete
run: po/check-complete.sh >> "$GITHUB_STEP_SUMMARY"
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: linux-pot
Expand Down
5 changes: 5 additions & 0 deletions core/crates/storage/src/connections/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,11 @@ impl ConnectionStore {
// A connection saved with a tag deleted meanwhile drops it here.
document.tidy();
let bytes = crate::document::encode_document(&document)?;
crate::upgrade_copies::keep_before_write_blocking::<ConnectionsDocument>(&self.inner.path)?;
// Before the list itself, so a deleted connection is never gone from the list but kept in a
// copy, and a failed trim leaves both as they were for the next write to try again.
let kept = document.connections.iter().map(|saved| saved.id.to_string()).collect();
crate::upgrade_copies::trim_connection_copies_blocking(&self.inner.path, &kept)?;
crate::fs::write_private_blocking(&self.inner.path, &bytes)?;
*state = StoreState::Ready(document);
self.publish(state);
Expand Down
12 changes: 12 additions & 0 deletions core/crates/storage/src/document.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use serde::de::DeserializeOwned;
use serde_json::Value;

use crate::document_problem::{DocumentProblem, DocumentProblemKind};
use crate::error::StorageError;

/// One step of a document's upgrade chain: a file at one version
/// rewritten into the shape of the next. Its `version` field is left for
Expand Down Expand Up @@ -97,6 +98,17 @@ fn corrupt(path: &Path, error: &serde_json::Error) -> DocumentProblem {
)
}

pub(crate) fn stored_version(bytes: &[u8]) -> Option<u32> {
serde_json::from_slice::<VersionProbe>(bytes).ok()?.version
}

// A file an older build wrote is copied aside first, and a failed copy leaves it as it was.
pub fn write_document_blocking<D: VersionedDocument>(path: &Path, document: &D) -> Result<(), StorageError> {
let bytes = encode_document(document)?;
crate::upgrade_copies::keep_before_write_blocking::<D>(path)?;
crate::fs::write_private_blocking(path, &bytes)
}

pub fn encode_document<D: VersionedDocument>(document: &D) -> Result<Vec<u8>, serde_json::Error> {
#[derive(Serialize)]
struct Versioned<'a, D> {
Expand Down
1 change: 1 addition & 0 deletions core/crates/storage/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ pub mod query_history;
pub mod saved_queries;
mod tag_name_error;
mod unix_time;
pub mod upgrade_copies;

pub use connection_color::ConnectionColor;
pub use connection_group::ConnectionGroup;
Expand Down
Loading
Loading