Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docs: How to Write a Data Pipeline? #247

Merged
merged 159 commits into from
Dec 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
64e19ad
Add How to Create a Data Pipeline document
iesahin Nov 16, 2023
418d770
debug
iesahin Nov 16, 2023
0b42110
fix hierarchical directories error
iesahin Nov 17, 2023
9f8612e
updated command
iesahin Nov 17, 2023
17f77f5
update permissions handling
iesahin Nov 17, 2023
ce7dc02
debug carry_in
iesahin Nov 17, 2023
f008a2d
debug
iesahin Nov 17, 2023
5ff5298
debug
iesahin Nov 17, 2023
eb0baa4
debug
iesahin Nov 17, 2023
38d9978
debug
iesahin Nov 17, 2023
f5a72a9
debug
iesahin Nov 17, 2023
1c790c3
debug
iesahin Nov 17, 2023
f73d283
debug
iesahin Nov 17, 2023
af8cf81
update
iesahin Nov 17, 2023
8f48316
debugged
iesahin Nov 17, 2023
25482a0
Adding Chinese MNIST
iesahin Nov 17, 2023
98ad203
Update commands
iesahin Nov 17, 2023
a34ccd4
fix `
iesahin Nov 17, 2023
8fe3920
as
iesahin Nov 17, 2023
57be37c
added unzip commands
iesahin Nov 17, 2023
a56b3fe
add ls
iesahin Nov 17, 2023
ec13327
add unzip to commands
iesahin Nov 17, 2023
f322c07
unzip q
iesahin Nov 17, 2023
e05c7b5
update
iesahin Nov 17, 2023
808ac7f
update xfl
iesahin Nov 17, 2023
817573a
update
iesahin Nov 17, 2023
fb20e4f
update
iesahin Nov 17, 2023
acc6746
update
iesahin Nov 17, 2023
a131f67
added copy
iesahin Nov 17, 2023
c1d398f
increase command timeout
iesahin Nov 17, 2023
b500fb5
update
iesahin Nov 17, 2023
ff08594
update
iesahin Nov 17, 2023
a9855c5
update
iesahin Nov 17, 2023
4f80e44
update
iesahin Nov 17, 2023
9c6b72d
update
iesahin Nov 17, 2023
3b59b61
update
iesahin Nov 17, 2023
b7c4539
update
iesahin Nov 17, 2023
dc19d09
update
iesahin Nov 17, 2023
b9bd28c
shell script
iesahin Nov 17, 2023
7c2b0b2
add script
iesahin Nov 17, 2023
942e7b9
update
iesahin Nov 17, 2023
3697e9e
update
iesahin Nov 17, 2023
d1373f3
debug
iesahin Nov 17, 2023
a1a2c1b
debug flag
iesahin Nov 17, 2023
ac5333b
update
iesahin Nov 17, 2023
85cb109
update
iesahin Nov 17, 2023
560dbe8
added name only option to copy
iesahin Nov 17, 2023
f2e854b
fix compilation
iesahin Nov 17, 2023
983459f
update script
iesahin Nov 17, 2023
d646abb
update
iesahin Nov 17, 2023
cdd0952
fix flag
iesahin Nov 17, 2023
7d28e60
update copy debug
iesahin Nov 17, 2023
5eca5c7
update script
iesahin Nov 17, 2023
b753db0
update script
iesahin Nov 17, 2023
25d2582
update
iesahin Nov 17, 2023
ce77ea7
update
iesahin Nov 17, 2023
9ef79b7
update
iesahin Nov 17, 2023
e3ac24c
upd
iesahin Nov 17, 2023
c43a538
loop
iesahin Nov 17, 2023
1dee99d
up
iesahin Nov 17, 2023
0fc67ea
update cmd
iesahin Nov 17, 2023
b8e8ed3
update
iesahin Nov 17, 2023
437863c
update
iesahin Nov 17, 2023
1900ff6
update
iesahin Nov 17, 2023
0e6e1df
Update commands
iesahin Nov 18, 2023
069ca87
update
iesahin Nov 18, 2023
e610c8c
update
iesahin Nov 18, 2023
48cc391
update command
iesahin Nov 18, 2023
812c873
added pipeline steps
iesahin Nov 19, 2023
bac9ea7
update
iesahin Nov 19, 2023
21ba65b
update
iesahin Nov 19, 2023
675b9e8
try once more
iesahin Nov 19, 2023
b167bd7
update
iesahin Nov 19, 2023
614d049
Updated to handle symlinks
iesahin Nov 21, 2023
1d6b567
updating recheck
iesahin Nov 22, 2023
03c5393
better error handling in walker
iesahin Nov 22, 2023
0a50fb5
update
iesahin Nov 22, 2023
27c8911
Update data pipeline
iesahin Nov 22, 2023
c7f813f
update recheck cmd
iesahin Nov 22, 2023
5cbb7c6
watch
iesahin Nov 22, 2023
7ca837a
Update recheck
iesahin Nov 22, 2023
2a12478
recheck
iesahin Nov 22, 2023
bb9ef49
update commands
iesahin Nov 22, 2023
9c6a0bc
debug recheck
iesahin Nov 22, 2023
d2439d0
Fixed recheck method bug
iesahin Nov 22, 2023
3863bd9
rename
iesahin Nov 22, 2023
2190a8f
update
iesahin Nov 22, 2023
73cc285
cmd
iesahin Nov 22, 2023
9a71059
update
iesahin Nov 22, 2023
e94ee65
track all
iesahin Nov 22, 2023
731487f
update prefix
iesahin Nov 22, 2023
c97d1c7
remove inner
iesahin Nov 22, 2023
e4ebce4
update
iesahin Nov 22, 2023
e77b852
debug
iesahin Nov 22, 2023
3305488
index
iesahin Nov 22, 2023
3925ef3
Added xvc_walker::PathSync to sync operations on paths
iesahin Nov 23, 2023
fbc6a68
Test sync
iesahin Nov 23, 2023
963fc4b
Update cmd
iesahin Nov 23, 2023
ee7e220
update
iesahin Nov 23, 2023
84725c3
update cmd
iesahin Nov 23, 2023
21f27e2
remove watch in loop
iesahin Nov 23, 2023
7a5b910
update
iesahin Nov 23, 2023
4280f21
update walker notify
iesahin Nov 23, 2023
50a4823
update
iesahin Nov 23, 2023
8a6b6b3
update
iesahin Nov 23, 2023
20ccbb7
explanation
iesahin Nov 23, 2023
e697fa1
Added another sections
iesahin Nov 26, 2023
543b6c1
fix command errors
iesahin Nov 26, 2023
4102e71
update
iesahin Nov 26, 2023
4c7cd15
added requirements file
iesahin Nov 26, 2023
0097b3b
debug
iesahin Nov 26, 2023
950f4ec
update
iesahin Nov 26, 2023
132f34a
fix pipeline
iesahin Nov 28, 2023
cdb56ad
update
iesahin Nov 28, 2023
2d3a42d
update
iesahin Nov 28, 2023
9285f2a
save images and classes
iesahin Nov 28, 2023
b94144a
updated requirements
iesahin Nov 28, 2023
f6836ac
update
iesahin Nov 28, 2023
497ad1e
update python cmds
iesahin Nov 28, 2023
eb374b5
update installation command
iesahin Nov 28, 2023
80a317a
update
iesahin Nov 28, 2023
6b70587
update
iesahin Nov 29, 2023
cf41468
update
iesahin Nov 29, 2023
d899f99
update
iesahin Nov 29, 2023
35490ea
update
iesahin Nov 29, 2023
18edee4
update
iesahin Nov 29, 2023
04fb100
Update
iesahin Nov 29, 2023
bb7c266
Add training script
iesahin Nov 30, 2023
11f1b2e
fix pipeline commands
iesahin Nov 30, 2023
4669ae5
update output commands
iesahin Dec 1, 2023
16e2d70
pipeline again
iesahin Dec 1, 2023
8a5919a
fix deps and identities
iesahin Dec 1, 2023
d3758ce
update
iesahin Dec 1, 2023
dd0de8b
update
iesahin Dec 1, 2023
1c0d285
update
iesahin Dec 1, 2023
606531a
update
iesahin Dec 1, 2023
cd4c189
update
iesahin Dec 1, 2023
ff471ce
run the pipeline
iesahin Dec 1, 2023
24572ea
requirements
iesahin Dec 1, 2023
c0544e3
update requirements
iesahin Dec 1, 2023
f3725a3
update requirements
iesahin Dec 1, 2023
ef53b7d
update train command
iesahin Dec 1, 2023
ec6d350
update
iesahin Dec 1, 2023
f7c1e37
update
iesahin Dec 1, 2023
35b68c8
update
iesahin Dec 1, 2023
4cffa82
update
iesahin Dec 1, 2023
c36ef3c
Fix train.py error
iesahin Dec 1, 2023
308124b
update the train script
iesahin Dec 1, 2023
6e4547a
Updated train script
iesahin Dec 1, 2023
25d06ca
Update docs
iesahin Dec 2, 2023
2564216
remove how to from the runs
iesahin Dec 2, 2023
5702d9c
Latest version
iesahin Dec 2, 2023
5646963
Update after tests
iesahin Dec 2, 2023
2acf682
Merge remote-tracking branch 'origin/main' into how-to-create-a-data-…
iesahin Dec 2, 2023
d0f9e0b
update
iesahin Dec 2, 2023
870149c
update
iesahin Dec 3, 2023
31656b2
add images
iesahin Dec 3, 2023
46c7a4c
Update dag for sorting the stmts
iesahin Dec 4, 2023
3ce832a
added output to pipeline
iesahin Dec 4, 2023
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
4 changes: 2 additions & 2 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ jobs:
MINIO_ACCESS_KEY_ID: ${{ secrets.MINIO_ACCESS_KEY_ID }}
MINIO_SECRET_ACCESS_KEY: ${{ secrets.MINIO_SECRET_ACCESS_KEY }}
XVC_TEST_ONE_EMRESULT_COM_KEY: ${{ secrets.XVC_TEST_ONE_EMRESULT_COM_KEY }}
# We don't run xvc-storage tests here
XVC_TRYCMD_TESTS: core,file,pipeline,intro,howto,start
# We don't run xvc-storage and how-to tests here
XVC_TRYCMD_TESTS: core,file,pipeline,intro,start
steps:
- name: Checkout
uses: actions/checkout@v1
Expand Down
1 change: 1 addition & 0 deletions book/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
- [How to Compile Xvc](./how-to/compile.md)
- [Xvc with Git Branches](./how-to/git-branches.md)
- [Turn off Git Integration](./how-to/turn-off-git-automation.md)
- [Create a Data Pipeline](./how-to/create-a-data-pipeline.md)

- [Command Reference](./ref/xvc.md)
- [`xvc init`](./ref/xvc-init.md)
Expand Down
650 changes: 650 additions & 0 deletions book/src/how-to/create-a-data-pipeline.md

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions book/src/images/xvc-pipeline-dag-pipeline-1.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 6 additions & 3 deletions book/src/ref/xvc-file-copy.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ Options:
--no-recheck
Do not recheck the destination files This is useful when you want to copy only records, without updating the workspace

--name-only
When copying multiple files, by default whole path is copied to the destination. This option sets the destination to be created with the file name only

-h, --help
Print help (see a summary with '-h')

Expand Down Expand Up @@ -117,7 +120,7 @@ Total #: 3 Workspace Size: 57 Cached Size: 19

```

If the targets you specify are changed, Xvc cancels the copy operation. Please either recheck old versions or carry in new versions.
If the source files you specify are changed, Xvc cancels the copy operation. Please either recheck old versions or carry in new versions.

```console
$ perl -i -pe 's/a/ee/g' data.txt
Expand Down Expand Up @@ -164,8 +167,8 @@ FH 19 [..] c85f3e81 c85f3e81 another-set/data2.txt
FH 19 [..] c85f3e81 c85f3e81 another-set/data.txt
DX 160 [..] another-set
FX 141 [..] 3054b812 .xvcignore
FX 529 [..] [..] .gitignore
Total #: 11 Workspace Size: 1105 Cached Size: 19
FX [..] [..] [..] .gitignore
Total #: 11 Workspace Size: [..] Cached Size: 19


```
Expand Down
17 changes: 7 additions & 10 deletions book/src/ref/xvc-file-move.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,32 @@
## Synopsis

```console
$ xvc file copy --help
Copy from source to another location in the workspace
$ xvc file move --help
Move files to another location in the workspace

Usage: xvc file copy [OPTIONS] <SOURCE> <DESTINATION>
Usage: xvc file move [OPTIONS] <SOURCE> <DESTINATION>

Arguments:
<SOURCE>
Source file, glob or directory within the workspace.

If the source ends with a slash, it's considered a directory and all files in that directory are copied.

If the number of source files is more than one, the destination must be a directory.
If there are multiple source files, the destination must be a directory.

<DESTINATION>
Location we copy file(s) to within the workspace.
Location we move file(s) to within the workspace.

If the target ends with a slash, it's considered a directory and created if it doesn't exist.
If this ends with a slash, it's considered a directory and created if it doesn't exist.

If the number of source files is more than one, the destination must be a directory.

Options:
--recheck-method <RECHECK_METHOD>
How the targets should be rechecked: One of copy, symlink, hardlink, reflink.
How the destination should be rechecked: One of copy, symlink, hardlink, reflink.

Note: Reflink uses copy if the underlying file system doesn't support it.

--force
Force even if target exists

--no-recheck
Do not recheck the destination files This is useful when you want to copy only records, without updating the workspace

Expand Down
94 changes: 72 additions & 22 deletions book/src/ref/xvc-file-recheck.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,75 +39,123 @@ This command has an alias [`xvc file checkout`](/ref/xvc-file-checkout.md) if yo
Rechecking is analogous to [git checkout](https://git-scm.com/docs/git-checkout).
It copies or links a cached file to the workspace.

Start by tracking a file.
Let's create an example directory hierarchy as a showcase.

```console
$ xvc-test-helper create-directory-tree --directories 2 --files 3 --seed 231123
$ tree
.
├── dir-0001
│   ├── file-0001.bin
│   ├── file-0002.bin
│   └── file-0003.bin
└── dir-0002
├── file-0001.bin
├── file-0002.bin
└── file-0003.bin

3 directories, 6 files

```

Start by tracking files.

```console
$ git init
...
$ xvc init

$ xvc file track data.txt

$ lsd -l
.rw-rw-rw- [..] data.txt
$ xvc file track dir-*

```

Once you added the file to the cache, you can delete the workspace copy.

```console
$ rm data.txt
$ ls -l
$ rm dir-0001/file-0001.bin
$ lsd -l dir-0001/file-*
total[..]
drwxr-xr-x [..] dir-0001
drwxr-xr-x [..] dir-0002

```

Then, recheck the file. By default, it makes a copy of the file.

```console
$ xvc file recheck data.txt
$ xvc file recheck dir-0001/file-0001.bin

$ lsd -l
.rw-rw-rw- [..] data.txt

```

Xvc only updates the recheck method if the file is not changed.
You can track and recheck complete directories

```console
$ xvc file recheck data.txt --as symlink
$ xvc file track dir-0002/
$ rm -rf dir-0002/
$ xvc -v file recheck dir-0002/
$ ls -l dir-0002/
total 24
-rw-rw-rw- 1 [..] file-0001.bin
-rw-rw-rw- 1 [..] file-0002.bin
-rw-rw-rw- 1 [..] file-0003.bin

$ ls -l data.txt
l[..] data.txt -> [CWD]/.xvc/b3/c85/f3e/8108a0d53da6b4869e5532a3b72301ed58d5824ed1394d52dbcabe9496/0.txt
```
You can use glob patterns to recheck files.
```console
```console
$ xvc file track 'dir-*'


You can update the recheck method of a file. Otherwise it will be kept as same before.

```console
$ rm -rf dir-0002/
$ xvc -v file recheck dir-0002/ --as symlink
$ ls -l dir-0002/
total 0
lrwxr-xr-x 1 [..] file-0001.bin -> [CWD]/.xvc/b3/3c9/255/424e13d9c38a37c5ddd376e1070cdd5de66996fbc82194c462f653856d/0.bin
lrwxr-xr-x 1 [..] file-0002.bin -> [CWD]/.xvc/b3/6bc/65f/581e3a03edb127b63b71c5690be176e2fe265266f70abc65f72613f62e/0.bin
lrwxr-xr-x 1 [..] file-0003.bin -> [CWD]/.xvc/b3/804/fb8/edbb122e735facd7f943c1bbe754e939a968f385c12f56b10411a4a015/0.bin

$ rm -rf dir-0002/
$ xvc -v file recheck dir-0002/

$ ls -l dir-0002/
total 0
lrwxr-xr-x 1 [..] file-0001.bin -> [CWD]/.xvc/b3/3c9/255/424e13d9c38a37c5ddd376e1070cdd5de66996fbc82194c462f653856d/0.bin
lrwxr-xr-x 1 [..] file-0002.bin -> [CWD]/.xvc/b3/6bc/65f/581e3a03edb127b63b71c5690be176e2fe265266f70abc65f72613f62e/0.bin
lrwxr-xr-x 1 [..] file-0003.bin -> [CWD]/.xvc/b3/804/fb8/edbb122e735facd7f943c1bbe754e939a968f385c12f56b10411a4a015/0.bin

```

Symlink and hardlinks are read-only.
You can delete the symlink, and replace with an updated copy.
(As `perl -i` does below.)
You can recheck as copy to update.

```console
$ perl -i -pe 's/a/ee/g' data.txt
$ zsh -c 'echo "120912" >> dir-0002/file-0001.bin'
? 1
zsh:1: permission denied: dir-0002/file-0001.bin

$ xvc file recheck data.txt --as copy
[ERROR] data.txt has changed on disk. Either carry in, force, or delete the target to recheck.
$ xvc file recheck dir-0002/file-0001.bin --as copy

$ rm data.txt
$ zsh -c 'echo "120912" >> dir-0002/file-0001.bin'

```
Note that, as files in the cache are kept read-only, hardlinks and symlinks are also read only. Files rechecked as copy are made read-write explicitly.

```console
$ xvc -vv file recheck data.txt --as hardlink
[INFO] [HARDLINK] [CWD]/.xvc/b3/c85/f3e/8108a0d53da6b4869e5532a3b72301ed58d5824ed1394d52dbcabe9496/0.txt -> [CWD]/data.txt

$ ls -l
total[..]
-r--r--r--[..] data.txt
drwxr-xr-x [..] dir-0001
drwxr-xr-x [..] dir-0002

```

Note that, as files in the cache are kept read-only, hardlinks and symlinks are also read only. Files rechecked as copy are made read-write explicitly.

Reflinks are supported by Xvc, but the underlying file system should also support it.
Otherwise it uses `copy`.

Expand All @@ -118,3 +166,5 @@ $ xvc file recheck data.txt --as reflink
```

The above command will create a read only link in macOS APFS and a copy in ext4 or NTFS file systems.


4 changes: 2 additions & 2 deletions book/src/ref/xvc-file-remove.md
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,8 @@ $ xvc file list
SS [..] [..] 4a2e9d7c data2.txt
FC 1024 [..] 4a2e9d7c 4a2e9d7c data.txt
FX 141 [..] 3054b812 .xvcignore
FX 274 [..] [..] .gitignore
Total #: 4 Workspace Size: 1621 Cached Size: 1024
FX [..] [..] [..] .gitignore
Total #: 4 Workspace Size: [..] Cached Size: 1024


$ xvc file remove --from-cache data.txt
Expand Down
15 changes: 9 additions & 6 deletions book/src/ref/xvc-pipeline-dag.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,23 +42,26 @@ $ xvc pipeline step new --step-name train --command "echo 'train'"
$ xvc pipeline step dependency --step-name train --step preprocess

```
It's not very readable but you can supply the result directly to dot and get a more useful output.

```console
$ xvc pipeline dag
digraph pipeline{n0[shape=box;label="preprocess";];n1[shape=box;label="train";];n0[shape=box;label="preprocess";];n1->n0;}
digraph pipeline{n0[shape=box;label="preprocess";];n1[shape=box;label="train";];n0[shape=box;label="preprocess";];n0->n1;}

```

When you add a dependency between two steps, the graph shows it as a node.
The output after `dot -Tsvg` is:

```console
$ xvc pipeline step dependency --step-name preprocess --glob 'data/*'
![pipeline-1](/images/xvc-pipeline-dag-pipeline-1.svg)

$ xvc pipeline dag
digraph pipeline{n0[shape=box;label="preprocess";];n1[shape=folder;label="data/*";];n0->n1;n2[shape=box;label="train";];n0[shape=box;label="preprocess";];n2->n0;}
When you add a dependency between two steps, the graph shows it as a node. For example,

```console
$ xvc pipeline step dependency --step-name preprocess --glob 'data/*'
```

![pipeline-2](/images/xvc-pipeline-dag-pipeline-2.svg)

You can use `--mermaid` option to get a [mermaid.js](https://mermaid.js.org) diagram.

```
Expand Down
23 changes: 23 additions & 0 deletions core/src/types/xvcpath.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,29 @@
pub fn join(&self, other: &XvcPath) -> Result<XvcPath> {
Ok(XvcPath(self.0.join(&other.0)))
}

/// Join only the file name portion of the other XvcPath
/// ```
/// use xvc_core::XvcPath;
/// use relative_path::RelativePathBuf;
///
/// let path = XvcPath::from(RelativePathBuf::from("a/b/c"));
/// let other = XvcPath::from(RelativePathBuf::from("d/e/f"));
/// let joined = path.join_file_name(&other).unwrap();
/// assert_eq!(joined, XvcPath::from(RelativePathBuf::from("a/b/c/f")));
/// ```
pub fn join_file_name(&self, other: &XvcPath) -> Result<XvcPath> {
let other_name = other
.file_name()
.ok_or_else(|| anyhow::anyhow!("other path doesn't have a file name"))?;

Check warning on line 174 in core/src/types/xvcpath.rs

View check run for this annotation

Codecov / codecov/patch

core/src/types/xvcpath.rs#L174

Added line #L174 was not covered by tests

Ok(XvcPath(self.0.join(other_name)))
}

/// Returns the file name of the path
pub fn file_name(&self) -> Option<&str> {
self.0.file_name()
}
}

/// Represents whether a file is a text file or not
Expand Down
7 changes: 6 additions & 1 deletion file/src/bring/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

use xvc_storage::XvcStorageEvent;
use xvc_storage::{storage::get_storage_record, StorageIdentifier, XvcStorageOperations};
use xvc_walker::PathSync;

/// Bring (download, pull, fetch) files from storage.
///
Expand Down Expand Up @@ -132,11 +133,15 @@
watch!(temp_dir);
watch!(event);

let path_sync = PathSync::new();
// Move the files from temp dir to cache
for (_, cp) in cache_paths {
let cache_path = cp.to_absolute_path(xvc_root);
let temp_path = temp_dir.temp_cache_path(&cp)?;
uwr!(move_to_cache(&temp_path, &cache_path), output_snd);
uwr!(
move_to_cache(&temp_path, &cache_path, &path_sync),

Check warning on line 142 in file/src/bring/mod.rs

View check run for this annotation

Codecov / codecov/patch

file/src/bring/mod.rs#L141-L142

Added lines #L141 - L142 were not covered by tests
output_snd
);
}

xvc_root.with_store_mut(|store: &mut XvcStore<XvcStorageEvent>| {
Expand Down
Loading
Loading