Commit Graph

37 Commits

Author SHA1 Message Date
Kat Marchán dd077116ef
feat(errors): integrate miette and generally improve error reporting 2023-01-28 18:59:53 -08:00
Kat Marchán 2767a6a671
misc: clippy fixes 2023-01-28 15:55:01 -08:00
C J Silverio e34dcfdc25
feature(async): Add tokio as an executor option (#36)
This PR is based on the work @alexschrod did in PR #29. All
I did was carry it over the finish line.

This PR adds a feature to the crate named `tokio-runtime`. If
you disable default features and enable this new one, cacache
uses tokio as its async executor. This makes integrating cacache
with tokio-using projects easier, because the file types leak out
if you use anything more than the top-level convenience functions.

The PR implements the feature using shims in a new submodule named
`async_lib`. This module conditionally uses either async-std
or tokio based on feature selection, and hides some differences with
convenience functions.

This change should not be a breaking change, because the default is
still async-std.

There are a few other small changes in this PR worth noting.

- The README shows how to switch runtimes.
- There's a justfile to run common tasks, including those in makefile.toml.
  The default shell is `sh`, so this might not work out of the box for
  Windows users.
- The tests can now run under either runtime. The justfile has a recipe
  that runs them both.
- The benchmarks can also run under either runtime. The justfile has two
  recipe for this, one using bench and the other using criterion's runner.
- The dependencies now pull in async-attributes by default along with
  async-std. This made it easier to swap runtimes in the tests.
- All dependency versions have been bumped.

Co-authored-by: @alexschrod
2023-01-28 13:01:59 -08:00
C J Silverio 6d84ff0aed
fix(write): set tmpfile length in async writer (#35)
Fixes: https://github.com/zkat/cacache-rs/issues/34

The async `poll_write()` implementation was creating a tempfile as
a backing for its inner mmap, but it was failing to set the length
on the file to match the incoming data. Compare with the sync
implementation!

This bug was exposed when the `memmap2` crate was swapped in
for `memmap`. The older crate was likely more lax about this.

Wrote a pair of new tests for `cacache::write_hash_sync` and
`cacache::write_hash`. The async test fails without this change, as
does any benchmarks run. Everything passes with it.

BREAKING CHANGE: This commit also bumps the MSRV for cacache to 1.66.1.
2023-01-23 17:37:34 -08:00
Kat Marchán 684a3e8a68
fix(mmap): mmap needs equal buffer lengths (#33)
Fixes: https://github.com/zkat/cacache-rs/issues/32
2022-02-25 09:04:28 -08:00
Kat Marchán 9163a58481
fix(cleanup): general house cleaning, bumping deps, etc 2021-09-15 20:23:00 -07:00
Kat Marchán 8d08e45298
fix(clippy): appease the paperclip 2021-09-15 19:57:58 -07:00
Florian Albertz bb815f5f22 feat(errors): remove anyhow and use custom error types (#24)
Co-authored-by: Florian Albertz <git@albertz.io>

BREAKING CHANGE: This changes the exported error type(s) for cacache, making it way easier to do error handling when something goes kaput.
2020-04-29 19:34:43 -07:00
Kat Marchán a9f8e4e6f4
cleanup: some reorganizing and reformatting of stuff 2019-11-06 23:03:14 -08:00
Kat Marchán d5bb0dffb6
feat(chown): stop changing owner/group on unix platforms
Fixes: #16

BREAKING CHANGE: If you were relying on the chown functionality for the index (which you probably weren't), then your index will no longer be updated that way.
2019-11-06 20:59:24 -08:00
Kat Marchán 743476b274
feat(api): rewrite entire API to be like std::fs (#21)
Fixes: #13

BREAKING CHANGE: The entire API surface has been rewritten and overhauled. Instead of breaking up the package into get/put/rm/ls modules, everything is now available mostly through the toplevel module, following the same conventions as std:fs for its operations. Associated structs and other types have also been renamed. Please refer to the documentation for the new API, and I hope you find it more ergonomic!
2019-10-23 21:17:57 -07:00
Kat Marchán 62298cdf35
feat(errors): improved errors messaging and context (#20)
Fixes: #19

BREAKING CHANGE: Error values have changed. If you were inspecting or
matching against actual return values, you'll need to change your code
to use the new enums.
2019-10-20 23:47:56 -04:00
Kat Marchán ee149a70ca
feat(errors): Replace failure with anyhow crate (#17)
Fixes: #14

BREAKING CHANGE: Result functions now return anyhow::Error
2019-10-20 00:25:28 -04:00
Kat Marchán fde3521cce
deps: bump async_std 2019-10-18 22:24:42 -04:00
Kat Marchán 4d9404b9a6
feat(license): relicense to Parity+Apache 2019-10-15 12:15:34 -04:00
Kat Marchán 18190bfc35
feat(async): add extra async versions of APIs (#6) 2019-10-13 20:06:20 -04:00
Kat Marchán 473473e6b2
feat(license): relicense under MPL-2.0 (#8)
BREAKING CHANGE: The license terms have changed. Please refer to LICENSE in the root of this repository for details. Future use of this library may require release of source code for any changes applied to it.
2019-09-06 21:39:36 -07:00
Kat Marchán 97f44573d5
fix(windows): add windows support 2019-08-31 22:38:37 -07:00
Félix Saparelli ad74518a9d refactor(index): idiomatise various iterators (#1)
* chore(index): idiomatise variously

* chore(index): exploit hashset to dedupe entries

* chore(index): format
2019-07-01 08:46:08 -07:00
Kat Marchán 982f8ee51a
doc(index): document Entry 2019-06-30 20:13:40 -07:00
Kat Marchán bc56a1b3fe
fix(fmt): cargo fmt 2019-06-26 21:41:44 -07:00
Kat Marchán 15f017fe21
feat(put): Add put::Put and put::PutOpts 2019-06-26 21:40:15 -07:00
Kat Marchán b0f351ea26
feat(ls): implemented cacache::ls::all() 2019-06-05 23:58:32 +02:00
Kat Marchán 261f190e4e
doc: added some basic top-level documentation. 2019-06-05 14:00:25 +02:00
Kat Marchán 22c4b3010f
fix(index): get rid of last compiler warning 2019-06-05 13:50:26 +02:00
Kat Marchán 815d7a3c9e
feat(put): initial implementation of cacache::put 2019-06-05 11:44:29 +02:00
Kat Marchán e5aeb669b4
nit: use if let Some() here 2019-06-04 23:56:45 +02:00
Kat Marchán 257fc9b6d0
feat(index): make inserter.commit() return integrity 2019-06-04 23:56:25 +02:00
Kat Marchán 6504048181
fix(index): make fields public, too 2019-06-04 20:29:23 +02:00
Kat Marchán 6f78e00c42
fix(index): switch to using new error module 2019-06-04 00:00:30 +02:00
Kat Marchán 7ad0633c43
fix(index): make Entry use actual Integrity objects 2019-06-03 15:27:31 +02:00
Kat Marchán fc067e95d9
fix(index): pass references instead of using .as_path() 2019-06-03 10:56:45 +02:00
Kat Marchán b579be617f
fix(index): remove unneeded integrity() method 2019-06-03 10:53:43 +02:00
Kat Marchán 33a5dbbd51
feat(index): implement delete() 2019-06-03 10:46:28 +02:00
Kat Marchán 44eb2acc98
feat(index): implemented find() 2019-06-03 10:46:13 +02:00
Kat Marchán 322e68ffaa
feat(index): implemented index::insert() 2019-06-02 21:38:36 +02:00
Kat Marchán 9ffc090b3b
feat(index): port index::insert() 2019-05-28 23:08:33 -07:00