Compare commits
26 commits
Author | SHA1 | Date | |
---|---|---|---|
|
219c8b633f | ||
|
003cdd6f59 | ||
|
242a2730eb | ||
|
590f692094 | ||
26db7106a1 | |||
7f5af60757 | |||
|
fc7fbca090 | ||
f645c4d15e | |||
|
bf7486235f | ||
|
b2f02297e9 | ||
|
6954185ef1 | ||
|
29df35b196 | ||
21c8f0883a | |||
bef0389ce6 | |||
|
c6072d8ed3 | ||
|
52bdc5c615 | ||
4d7dcb2665 | |||
021b7ea8dd | |||
69b643309d | |||
cb9ae3ca5e | |||
430819cd81 | |||
ba6e2b0ab9 | |||
cf5833a5d6 | |||
fcb70534d5 | |||
26e4f2a503 | |||
|
ac5dedb7f9 |
9 changed files with 271 additions and 271 deletions
52
.forgejo/workflows/push-next.yml
Normal file
52
.forgejo/workflows/push-next.yml
Normal file
|
@ -0,0 +1,52 @@
|
|||
name: Rust
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["next"]
|
||||
pull_request:
|
||||
branches: ["main"]
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: docker
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
toolchain:
|
||||
- name: stable
|
||||
- name: nightly
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Format
|
||||
uses: https://git.kemitix.net/kemitix/rust@v2.3.0
|
||||
with:
|
||||
args: ${{ matrix.toolchain.name }} cargo fmt --all -- --check
|
||||
|
||||
# - name: Machete
|
||||
# uses: https://github.com/bnjbvr/cargo-machete@v0.6.2
|
||||
|
||||
- name: Clippy
|
||||
uses: https://git.kemitix.net/kemitix/rust@v2.3.0
|
||||
with:
|
||||
args: ${{ matrix.toolchain.name }} cargo clippy
|
||||
|
||||
- name: Build
|
||||
uses: https://git.kemitix.net/kemitix/rust@v2.3.0
|
||||
with:
|
||||
args: ${{ matrix.toolchain.name }} cargo build
|
||||
|
||||
- name: Test
|
||||
uses: https://git.kemitix.net/kemitix/rust@v2.3.0
|
||||
with:
|
||||
args: ${{ matrix.toolchain.name }} cargo test --no-fail-fast
|
||||
|
||||
- name: Integration
|
||||
uses: https://git.kemitix.net/kemitix/rust@v2.3.0
|
||||
with:
|
||||
args: ./test.sh
|
46
.woodpecker.yml
Normal file
46
.woodpecker.yml
Normal file
|
@ -0,0 +1,46 @@
|
|||
variables:
|
||||
- &rust_image "docker.io/rust:1.82.0"
|
||||
- &slow_check_paths
|
||||
- path:
|
||||
# rust source code
|
||||
- "crates/**"
|
||||
- "src/**"
|
||||
- "tests/**"
|
||||
- "**/Cargo.toml"
|
||||
- "Cargo.lock"
|
||||
# database migrations
|
||||
- "migrations/**"
|
||||
# config files and scripts used by ci
|
||||
- ".woodpecker.yml"
|
||||
|
||||
steps:
|
||||
toml_fmt:
|
||||
image: docker.io/tamasfe/taplo:0.9.3
|
||||
commands:
|
||||
- taplo format --check
|
||||
|
||||
cargo_machete:
|
||||
image: *rust_image
|
||||
commands:
|
||||
- wget https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
|
||||
- tar -xvf cargo-binstall-x86_64-unknown-linux-musl.tgz
|
||||
- rm cargo-binstall-x86_64-unknown-linux-musl.tgz
|
||||
- mv cargo-binstall /usr/local/cargo/bin
|
||||
- cargo binstall -y cargo-machete
|
||||
- cargo machete
|
||||
|
||||
ignored_files:
|
||||
image: docker.io/alpine:latest
|
||||
commands:
|
||||
- apk add git
|
||||
- IGNORED=$(git ls-files --cached -i --exclude-standard)
|
||||
- if [[ "$IGNORED" ]]; then echo "Ignored files present:\n$IGNORED\n"; exit 1; fi
|
||||
|
||||
publish_to_crates_io:
|
||||
image: *rust_image
|
||||
commands:
|
||||
- cargo login "$CARGO_REGISTRY_TOKEN"
|
||||
- cargo publish --registry crates-io --no-verify
|
||||
secrets: [cargo_registry_token]
|
||||
when:
|
||||
event: tag
|
287
Cargo.lock
generated
287
Cargo.lock
generated
|
@ -3,46 +3,82 @@
|
|||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
name = "anstream"
|
||||
version = "0.6.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"anstyle-parse",
|
||||
"anstyle-query",
|
||||
"anstyle-wincon",
|
||||
"colorchoice",
|
||||
"utf8parse",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.0.2"
|
||||
name = "anstyle"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1"
|
||||
checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.79"
|
||||
name = "anstyle-parse"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
|
||||
checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
|
||||
dependencies = [
|
||||
"utf8parse",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-query"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
|
||||
dependencies = [
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-wincon"
|
||||
version = "3.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.1.11"
|
||||
version = "4.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098"
|
||||
checksum = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f"
|
||||
dependencies = [
|
||||
"bitflags 2.0.2",
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
"clap_lex",
|
||||
"is-terminal",
|
||||
"once_cell",
|
||||
"strsim",
|
||||
"termcolor",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "4.1.9"
|
||||
version = "4.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644"
|
||||
checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
|
@ -50,33 +86,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_lex"
|
||||
version = "0.3.3"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646"
|
||||
dependencies = [
|
||||
"os_str_bytes",
|
||||
]
|
||||
checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.2.8"
|
||||
name = "colorchoice"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
|
||||
dependencies = [
|
||||
"errno-dragonfly",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno-dragonfly"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
]
|
||||
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
|
@ -84,88 +102,11 @@ version = "0.4.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
|
||||
|
||||
[[package]]
|
||||
name = "io-lifetimes"
|
||||
version = "1.0.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is-terminal"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"io-lifetimes",
|
||||
"rustix",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.140"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.17.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
|
||||
|
||||
[[package]]
|
||||
name = "os_str_bytes"
|
||||
version = "6.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.52"
|
||||
version = "1.0.78"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
|
||||
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
@ -179,53 +120,30 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.36.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"errno",
|
||||
"io-lifetimes",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "skip"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"clap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||
checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
version = "2.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.8"
|
||||
|
@ -233,56 +151,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
name = "utf8parse"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.45.0"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
|
||||
checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
|
@ -295,42 +182,42 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
|
||||
checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
|
||||
checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
|
||||
checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
|
||||
checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
|
||||
checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
|
||||
checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.42.2"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
|
||||
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
|
||||
|
|
12
Cargo.toml
12
Cargo.toml
|
@ -1,9 +1,17 @@
|
|||
[package]
|
||||
name = "skip"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
edition = "2021"
|
||||
authors = ["Paul Campbell <pcampbell@kemitix.net>"]
|
||||
categories = ["command-line-utilities"]
|
||||
description = "Skip lines in a file"
|
||||
license = "MIT"
|
||||
repository = "https://git.kemitix.net/kemitix/skip"
|
||||
keywords = ["skip", "lines", "file", "text", "utility"]
|
||||
rust-version = "1.74.1"
|
||||
exclude = [".cargo_home"]
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.0", features = ["derive"] }
|
||||
clap = { version = "4.5", features = ["derive"] }
|
||||
|
|
|
@ -2,13 +2,17 @@
|
|||
|
||||
Skip part of a file.
|
||||
|
||||
As `head` will show the top of a file after a number of line,
|
||||
As `head` will show the top of a file up-to a number of line,
|
||||
so `skip` will do the opposite, and not show the top of the file,
|
||||
but will show the rest.
|
||||
|
||||
Additionally, it can check for whole lines matching,
|
||||
or for a token being present on the line.
|
||||
|
||||
N.B.: The `skip` crate used to be an implementation of [Skip list](https://en.wikipedia.org/wiki/Skip_list),
|
||||
by [Luo Jia / Zhouqi Jiang](https://github.com/luojia65) ([source](https://github.com/luojia65/skip)).
|
||||
That crate will be republished as [skip-list](https://crates.io/crates/skip-list) (soon).
|
||||
|
||||
## Usage
|
||||
|
||||
### Skip a fixed number of lines
|
||||
|
|
16
justfile
16
justfile
|
@ -1,15 +1,15 @@
|
|||
dist: target-release-skip
|
||||
dist: target-release
|
||||
if test ! -d dist ; then mkdir dist ; fi
|
||||
cp target/release/skip dist/
|
||||
|
||||
inttest: target-debug-skip
|
||||
./test.sh
|
||||
|
||||
target-release-skip: unittest inttest
|
||||
target-release: unittest inttest
|
||||
cargo build --release
|
||||
|
||||
target-debug-skip:
|
||||
cargo build
|
||||
inttest: target-debug
|
||||
./test.sh
|
||||
|
||||
unittest: target-debug-skip
|
||||
unittest: target-debug
|
||||
cargo test
|
||||
|
||||
target-debug:
|
||||
cargo build
|
||||
|
|
10
renovate.json
Normal file
10
renovate.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": ["config:recommended"],
|
||||
"packageRules": [
|
||||
{
|
||||
"matchManagers": ["cargo"],
|
||||
"rangeStrategy": "replace"
|
||||
}
|
||||
]
|
||||
}
|
59
src/lib.rs
59
src/lib.rs
|
@ -39,7 +39,7 @@ pub fn skip(cli: &Cli, writer: &mut impl Write) -> Result<()> {
|
|||
None => Box::new(BufReader::new(std::io::stdin())),
|
||||
};
|
||||
if let Some(line) = &cli.line {
|
||||
skip_lines_matching(&cli, reader, writer, line)
|
||||
skip_lines_matching(cli, reader, writer, line)
|
||||
} else if let Some(ref token) = cli.token {
|
||||
skip_tokens(cli, reader, writer, token)
|
||||
} else {
|
||||
|
@ -49,13 +49,9 @@ pub fn skip(cli: &Cli, writer: &mut impl Write) -> Result<()> {
|
|||
|
||||
// skip a number of lines
|
||||
fn skip_lines(cli: &Cli, reader: Box<dyn BufRead>, writer: &mut impl Write) -> Result<()> {
|
||||
let mut counter = 0usize;
|
||||
for current_line in reader.lines() {
|
||||
if let Ok(current_line) = current_line {
|
||||
if counter >= cli.lines {
|
||||
writeln!(writer, "{}", current_line)?;
|
||||
}
|
||||
counter += 1;
|
||||
for (counter, current_line) in reader.lines().map_while(Option::Some).flatten().enumerate() {
|
||||
if counter >= cli.lines {
|
||||
writeln!(writer, "{}", current_line)?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
@ -69,14 +65,12 @@ fn skip_lines_matching(
|
|||
line: &str,
|
||||
) -> Result<()> {
|
||||
let mut counter = 0usize;
|
||||
for current_line in reader.lines() {
|
||||
if let Ok(current_line) = current_line {
|
||||
if counter >= cli.lines {
|
||||
writeln!(writer, "{}", current_line)?;
|
||||
}
|
||||
if line == current_line {
|
||||
counter += 1;
|
||||
}
|
||||
for current_line in reader.lines().map_while(Option::Some).flatten() {
|
||||
if counter >= cli.lines {
|
||||
writeln!(writer, "{}", current_line)?;
|
||||
}
|
||||
if line == current_line {
|
||||
counter += 1;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
@ -92,18 +86,16 @@ fn skip_tokens(
|
|||
) -> Result<()> {
|
||||
let mut counter = 0usize;
|
||||
|
||||
for current_line in reader.lines() {
|
||||
if let Ok(current_line) = current_line {
|
||||
if counter >= cli.lines {
|
||||
writeln!(writer, "{}", current_line)?;
|
||||
}
|
||||
if current_line.contains(&token) {
|
||||
if cli.ignore_extras {
|
||||
counter += 1;
|
||||
} else {
|
||||
let occurances = current_line.matches(&token).count();
|
||||
counter += occurances;
|
||||
}
|
||||
for current_line in reader.lines().map_while(Option::Some).flatten() {
|
||||
if counter >= cli.lines {
|
||||
writeln!(writer, "{}", current_line)?;
|
||||
}
|
||||
if current_line.contains(token) {
|
||||
if cli.ignore_extras {
|
||||
counter += 1;
|
||||
} else {
|
||||
let occurances = current_line.matches(&token).count();
|
||||
counter += occurances;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -151,10 +143,7 @@ mod tests {
|
|||
skip(&cli, &mut lines)?;
|
||||
|
||||
//then
|
||||
assert_eq!(
|
||||
String::from_utf8(lines)?,
|
||||
vec!["alpha", "gamma\n"].join("\n")
|
||||
);
|
||||
assert_eq!(String::from_utf8(lines)?, ["alpha", "gamma\n"].join("\n"));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -196,7 +185,7 @@ mod tests {
|
|||
//then
|
||||
assert_eq!(
|
||||
String::from_utf8(lines)?,
|
||||
vec![
|
||||
[
|
||||
"Or help one fainting robin",
|
||||
"Unto his nest again,",
|
||||
"I shall not live in vain.\n"
|
||||
|
@ -224,7 +213,7 @@ mod tests {
|
|||
//then
|
||||
assert_eq!(
|
||||
String::from_utf8(lines)?,
|
||||
vec![
|
||||
[
|
||||
//Lorem ipsum dolor sit amet, -- +2 = 2
|
||||
//consectetur adipiscing elit,
|
||||
//sed do eiusmod tempor incididunt -- +1 = 3
|
||||
|
@ -257,7 +246,7 @@ mod tests {
|
|||
//then
|
||||
assert_eq!(
|
||||
String::from_utf8(lines)?,
|
||||
vec![
|
||||
[
|
||||
//Lorem ipsum dolor sit amet, -- 1
|
||||
//consectetur adipiscing elit,
|
||||
//sed do eiusmod tempor incididunt -- 2
|
||||
|
|
54
test.sh
54
test.sh
|
@ -2,37 +2,41 @@
|
|||
|
||||
set -e
|
||||
|
||||
echo "PWD: $PWD"
|
||||
ls -l
|
||||
ls -l target
|
||||
SKIP="./target/debug/skip"
|
||||
DIFF="diff -u --color"
|
||||
|
||||
if test ! -x $SKIP ; then
|
||||
echo "File missing: $SKIP - try 'zig build'"
|
||||
exit 1
|
||||
if test ! -x $SKIP; then
|
||||
echo "File missing: $SKIP - try 'cargo build'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "> skip a line when reading from stdin"
|
||||
INPUT=$(cat<<EOF
|
||||
INPUT=$(
|
||||
cat <<EOF
|
||||
line 1
|
||||
line 2
|
||||
EOF
|
||||
)
|
||||
echo "line 2" > test.expect
|
||||
echo "$INPUT" | $SKIP 1 > test.out
|
||||
echo "line 2" >test.expect
|
||||
echo "$INPUT" | $SKIP 1 >test.out
|
||||
$DIFF test.expect test.out
|
||||
rm test.expect test.out
|
||||
|
||||
echo "> skip a line when reading from a file"
|
||||
cat<<EOF > test.in
|
||||
cat <<EOF >test.in
|
||||
line 1
|
||||
line 2
|
||||
EOF
|
||||
echo "line 2" > test.expect
|
||||
$SKIP 1 test.in > test.out
|
||||
echo "line 2" >test.expect
|
||||
$SKIP 1 test.in >test.out
|
||||
$DIFF test.expect test.out
|
||||
rm test.expect test.out
|
||||
|
||||
echo "> skip until 2 matching lines seen"
|
||||
cat<<EOF > test.in
|
||||
cat <<EOF >test.in
|
||||
alpha
|
||||
beta
|
||||
alpha
|
||||
|
@ -40,17 +44,17 @@ alpha
|
|||
gamma
|
||||
alpha
|
||||
EOF
|
||||
cat<<EOF > test.expect
|
||||
cat <<EOF >test.expect
|
||||
alpha
|
||||
gamma
|
||||
alpha
|
||||
EOF
|
||||
$SKIP 2 test.in --line alpha > test.out
|
||||
$SKIP 2 test.in --line alpha >test.out
|
||||
$DIFF test.expect test.out
|
||||
rm test.in test.expect test.out
|
||||
|
||||
echo "> skip lines until 2 tokens seen"
|
||||
cat<<EOF > test.in
|
||||
cat <<EOF >test.in
|
||||
Lorem ipsum dolor sit amet,
|
||||
consectetur adipiscing elit,
|
||||
sed do eiusmod tempor incididunt
|
||||
|
@ -60,37 +64,37 @@ quis nostrud exercitation ullamco
|
|||
laboris nisi ut aliquip ex ea
|
||||
commodo consequat.
|
||||
EOF
|
||||
cat<<EOF > test.expect
|
||||
cat <<EOF >test.expect
|
||||
Ut enim ad minim veniam,
|
||||
quis nostrud exercitation ullamco
|
||||
laboris nisi ut aliquip ex ea
|
||||
commodo consequat.
|
||||
EOF
|
||||
$SKIP 2 test.in --token dolor > test.out
|
||||
$SKIP 2 test.in --token dolor >test.out
|
||||
$DIFF test.expect test.out
|
||||
rm test.in test.expect test.out
|
||||
|
||||
echo "> handle unknown parameter with simple error message"
|
||||
cat<<EOF > test.expect.err
|
||||
cat <<EOF >test.expect.err
|
||||
error: unexpected argument '--foo' found
|
||||
|
||||
note: to pass '--foo' as a value, use '-- --foo'
|
||||
tip: to pass '--foo' as a value, use '-- --foo'
|
||||
|
||||
Usage: skip [OPTIONS] <LINES> [FILE]
|
||||
|
||||
For more information, try '--help'.
|
||||
EOF
|
||||
cat<<EOF > test.expect
|
||||
cat <<EOF >test.expect
|
||||
EOF
|
||||
touch test.out test.err
|
||||
$SKIP --foo > test.out 2> test.err || true
|
||||
$SKIP --foo >test.out 2>test.err || true
|
||||
$DIFF test.expect test.out
|
||||
$DIFF test.expect.err test.err
|
||||
rm test.expect test.out
|
||||
rm test.expect.err test.err
|
||||
|
||||
echo "> handle ignore-extra when token is missing"
|
||||
cat<<EOF > test.expect.err
|
||||
cat <<EOF >test.expect.err
|
||||
error: the following required arguments were not provided:
|
||||
--token <TOKEN>
|
||||
<LINES>
|
||||
|
@ -99,17 +103,17 @@ Usage: skip --ignore-extras --token <TOKEN> <LINES> [FILE]
|
|||
|
||||
For more information, try '--help'.
|
||||
EOF
|
||||
cat<<EOF > test.expect
|
||||
cat <<EOF >test.expect
|
||||
EOF
|
||||
touch test.out test.err
|
||||
$SKIP --ignore-extras > test.out 2> test.err || true
|
||||
$SKIP --ignore-extras >test.out 2>test.err || true
|
||||
$DIFF test.expect test.out
|
||||
$DIFF test.expect.err test.err
|
||||
rm test.expect test.out
|
||||
rm test.expect.err test.err
|
||||
|
||||
echo "> skip lines until 4 tokens seen - ignored extra tokens on same line"
|
||||
cat<<EOF > test.in
|
||||
cat <<EOF >test.in
|
||||
Lorem ipsum dolor sit amet,
|
||||
consectetur adipiscing elit,
|
||||
sed do eiusmod tempor incididunt
|
||||
|
@ -119,12 +123,12 @@ quis nostrud exercitation ullamco
|
|||
laboris nisi ut aliquip ex ea
|
||||
commodo consequat.
|
||||
EOF
|
||||
cat<<EOF > test.expect
|
||||
cat <<EOF >test.expect
|
||||
quis nostrud exercitation ullamco
|
||||
laboris nisi ut aliquip ex ea
|
||||
commodo consequat.
|
||||
EOF
|
||||
$SKIP 4 test.in --token m --ignore-extras > test.out
|
||||
$SKIP 4 test.in --token m --ignore-extras >test.out
|
||||
$DIFF test.expect test.out
|
||||
rm test.in test.expect test.out
|
||||
|
||||
|
|
Loading…
Reference in a new issue