Skip to content

refactor!: Use different Id types#256

Merged
simonsan merged 18 commits intomainfrom
differentiate-ids
Sep 23, 2024
Merged

refactor!: Use different Id types#256
simonsan merged 18 commits intomainfrom
differentiate-ids

Conversation

@aawsome
Copy link
Copy Markdown
Member

@aawsome aawsome commented Sep 5, 2024

Breaking change:
Use different Id types for all places where Ids play a role. This makes the source code much more understandable.

This also prevents some nasty kind of bugs. This was possible before:

let snap = repo.get_snapshot_from_str("latest", |_| true)?;
let node = repo.node_from_path(snap.id, "/my/path".into())?;

But this wasn't working as snap.id is a snapshot id and node_from_path requires a tree id. This code will now fail at compile time.

@codecov
Copy link
Copy Markdown

codecov bot commented Sep 5, 2024

Codecov Report

Attention: Patch coverage is 48.83721% with 66 lines in your changes missing coverage. Please review.

Project coverage is 48.4%. Comparing base (59bd3e5) to head (eb15129).

Files with missing lines Patch % Lines
crates/core/src/repository.rs 31.5% 13 Missing ⚠️
crates/core/src/id.rs 35.2% 11 Missing ⚠️
crates/core/src/commands/prune.rs 50.0% 6 Missing ⚠️
crates/core/src/index.rs 40.0% 6 Missing ⚠️
crates/core/src/repofile/packfile.rs 16.6% 5 Missing ⚠️
crates/core/src/blob/packer.rs 57.1% 3 Missing ⚠️
crates/core/src/commands/copy.rs 0.0% 3 Missing ⚠️
crates/core/src/commands/merge.rs 0.0% 3 Missing ⚠️
crates/core/src/repofile/snapshotfile.rs 40.0% 3 Missing ⚠️
crates/core/src/blob.rs 33.3% 2 Missing ⚠️
... and 7 more
Additional details and impacted files
Files with missing lines Coverage Δ
crates/backend/src/opendal.rs 93.5% <ø> (ø)
crates/core/src/archiver.rs 66.1% <100.0%> (ø)
crates/core/src/archiver/file_archiver.rs 79.1% <100.0%> (ø)
crates/core/src/archiver/parent.rs 66.6% <100.0%> (ø)
crates/core/src/archiver/tree_archiver.rs 73.2% <100.0%> (ø)
crates/core/src/backend.rs 56.1% <100.0%> (-1.4%) ⬇️
crates/core/src/backend/cache.rs 72.7% <100.0%> (-0.7%) ⬇️
crates/core/src/backend/decrypt.rs 67.6% <100.0%> (+0.9%) ⬆️
crates/core/src/backend/node.rs 68.9% <ø> (+5.1%) ⬆️
crates/core/src/blob/tree.rs 66.5% <100.0%> (-1.1%) ⬇️
... and 29 more

... and 6 files with indirect coverage changes

@simonsan simonsan changed the title chore!: Use different Id types refactor!: Use different Id types Sep 8, 2024
@aawsome aawsome added the M-breaking Meta: Breaking change label Sep 20, 2024
aawsome and others added 4 commits September 21, 2024 22:35
Co-authored-by: simonsan <14062932+simonsan@users.noreply.github.com>
@aawsome aawsome marked this pull request as ready for review September 21, 2024 20:59
@aawsome
Copy link
Copy Markdown
Member Author

aawsome commented Sep 21, 2024

@simonsan I think this is ready for a review. I did not finish changing all internals where PackedId can be used, but the interface should now just use the Id newtypes.

@aawsome aawsome requested a review from simonsan September 21, 2024 21:01
Copy link
Copy Markdown
Contributor

@simonsan simonsan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job! That looks so much cleaner now! A few nits:

@aawsome aawsome requested a review from simonsan September 23, 2024 06:12
@simonsan simonsan enabled auto-merge September 23, 2024 14:33
@simonsan simonsan disabled auto-merge September 23, 2024 14:38
@simonsan simonsan merged commit 483e777 into main Sep 23, 2024
@simonsan simonsan deleted the differentiate-ids branch September 23, 2024 14:43
@simonsan simonsan mentioned this pull request Sep 23, 2024
@rustic-release-plz rustic-release-plz bot mentioned this pull request Sep 23, 2024
simonsan pushed a commit that referenced this pull request Sep 23, 2024
## 🤖 New release
* `rustic_backend`: 0.2.1 -> 0.3.0 (⚠️ API breaking changes)
* `rustic_core`: 0.3.1 -> 0.4.0 (⚠️ API breaking changes)
* `rustic_config`: 0.2.0 -> 0.2.1 (✓ API compatible changes)

### ⚠️ `rustic_backend` breaking changes

```
--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/enum_variant_missing.ron

Failed in:
  variant LocalBackendErrorKind::FromSplitError, previously in file /tmp/.tmpAmQX0r/rustic_backend/src/error.rs:109
```

### ⚠️ `rustic_core` breaking changes

```
--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field LocalSourceFilterOptions.globs in /tmp/.tmpyfzyFf/rustic_core/crates/core/src/backend/ignore.rs:73
  field LocalSourceFilterOptions.iglobs in /tmp/.tmpyfzyFf/rustic_core/crates/core/src/backend/ignore.rs:78
  field LocalSourceFilterOptions.glob_files in /tmp/.tmpyfzyFf/rustic_core/crates/core/src/backend/ignore.rs:83
  field LocalSourceFilterOptions.iglob_files in /tmp/.tmpyfzyFf/rustic_core/crates/core/src/backend/ignore.rs:88
  field LocalSourceFilterOptions.custom_ignorefiles in /tmp/.tmpyfzyFf/rustic_core/crates/core/src/backend/ignore.rs:106

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/inherent_method_missing.ron

Failed in:
  SnapshotOptions::tag, previously in file /tmp/.tmpAmQX0r/rustic_core/src/repofile/snapshotfile.rs:46
  LocalSourceFilterOptions::glob, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:65
  LocalSourceFilterOptions::iglob, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:65
  LocalSourceFilterOptions::glob_file, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:65
  LocalSourceFilterOptions::iglob_file, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:65
  LocalSourceFilterOptions::custom_ignorefile, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:65

--- failure method_parameter_count_changed: pub method parameter count changed ---

Description:
A publicly-visible method now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/method_parameter_count_changed.ron

Failed in:
  rustic_core::Repository::list now takes 1 parameters instead of 2, in /tmp/.tmpyfzyFf/rustic_core/crates/core/src/repository.rs:689
  rustic_core::Repository::get_index_entry now takes 2 parameters instead of 3, in /tmp/.tmpyfzyFf/rustic_core/crates/core/src/repository.rs:1480

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field tag of struct SnapshotOptions, previously in file /tmp/.tmpAmQX0r/rustic_core/src/repofile/snapshotfile.rs:59
  field glob of struct LocalSourceFilterOptions, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:74
  field iglob of struct LocalSourceFilterOptions, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:80
  field glob_file of struct LocalSourceFilterOptions, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:86
  field iglob_file of struct LocalSourceFilterOptions, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:92
  field custom_ignorefile of struct LocalSourceFilterOptions, previously in file /tmp/.tmpAmQX0r/rustic_core/src/backend/ignore.rs:108

--- failure trait_associated_type_added: non-sealed public trait added associated type without default value ---

Description:
A non-sealed trait has gained an associated type without a default value, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-item-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/trait_associated_type_added.ron

Failed in:
  trait associated type rustic_core::repofile::RepoFile::Id in file /tmp/.tmpyfzyFf/rustic_core/crates/core/src/repofile.rs:16

--- failure trait_no_longer_object_safe: trait no longer object safe ---

Description:
Trait is no longer object safe, which breaks `dyn Trait` usage.
        ref: https://doc.rust-lang.org/stable/reference/items/traits.html#object-safety
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/trait_no_longer_object_safe.ron

Failed in:
  trait IndexedIds in file /tmp/.tmpyfzyFf/rustic_core/crates/core/src/repository.rs:1300
  trait IndexedTree in file /tmp/.tmpyfzyFf/rustic_core/crates/core/src/repository.rs:1287
```

<details><summary><i><b>Changelog</b></i></summary><p>

## `rustic_backend`
<blockquote>

##
[0.3.0](rustic_backend-v0.2.1...rustic_backend-v0.3.0)
- 2024-09-23

### Added

- [**breaking**] Use CommandInput for commands
([#269](#269))

### Other

- remove readme versions in usage section for easier release due to
release PR ([#271](#271))
- [**breaking**] Use different Id types
([#256](#256))
- *(deps)* Update opendal
([#268](#268))
</blockquote>

## `rustic_core`
<blockquote>

##
[0.4.0](rustic_core-v0.3.1...rustic_core-v0.4.0)
- 2024-09-23

### Added

- make IndexPack::pack_size() public
- Add Repository::drop_index and ::drop_data_from_index
([#166](#166))
- *(commands)* Add option stdin_command to be used in CLI and config
file ([#266](#266))
- [**breaking**] Use CommandInput for commands
([#269](#269))
- Add CommandInput
([#252](#252))

### Fixed

- de/serialize tags as DisplayFromStr
([#270](#270))
- [**breaking**] use plural names for options
([#267](#267))
- fix clippy lint
- *(test)* shorten snapshot names for windows environment
- [**breaking**] improve password-command error reporting
([#265](#265))
- properly finish progress bar in Repository::get_snapshot_group
([#263](#263))

### Other

- remove readme versions in usage section for easier release due to
release PR ([#271](#271))
- [**breaking**] Use different Id types
([#256](#256))
- Use serde_with::skip_serializing_none instead of manual mapping
([#251](#251))
</blockquote>

## `rustic_config`
<blockquote>

##
[0.2.1](rustic_config-v0.2.0...rustic_config-v0.2.1)
- 2024-09-23

### Other

- remove readme versions in usage section for easier release due to
release PR ([#271](#271))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

Co-authored-by: rustic-release-plz[bot] <182542030+rustic-release-plz[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

M-breaking Meta: Breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants