From 77ed9181128b0b1659c628aa2383fd9028bd5973 Mon Sep 17 00:00:00 2001 From: Lynne Date: Fri, 24 Sep 2021 15:53:55 +1000 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=9A=97=EF=B8=8F=F0=9F=92=A8=20?= =?UTF-8?q?=E2=AC=86=EF=B8=8F=F0=9F=93=85=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cargo update, haha get it --- Cargo.lock | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f93d63b..48dfe93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "arrayvec" version = "0.5.2" @@ -655,9 +657,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "syn" -version = "1.0.76" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" +checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0" dependencies = [ "proc-macro2", "quote", From aeb7c05377306e90c0fcf801c69a2e762c580046 Mon Sep 17 00:00:00 2001 From: Lynne Date: Fri, 24 Sep 2021 16:34:58 +1000 Subject: [PATCH 2/3] bump msrv to 1.54.0 this entails: - updating clap to the latest version (3.0.0-beta.4) - removing the version restrictions on smartstring and bitflags - updating various config files to match the new MSRV - constifying a function that contained a match statement, and therefore couldn't be made const until now - updating the all-important readme badge --- .gitlab-ci.yml | 25 ++++++++++++------------- CHANGELOG.md | 3 +++ Cargo.lock | 34 ++++++++++++---------------------- Cargo.toml | 21 +++++---------------- README.md | 2 +- clippy.toml | 3 ++- src/parameters.rs | 20 ++++++++++---------- 7 files changed, 45 insertions(+), 63 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d93c0fd..0aaad7d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -81,15 +81,14 @@ clippy: cleanup-stable: extends: .cargo-cleanup -# commented out because cargo-sweep no longer works on our MSRV -#cleanup-msrv: -# extends: cleanup-stable -# image: "rust:1.43.0" -# cache: -# key: msrv -# paths: -# - target -# - .cargo +cleanup-msrv: + extends: cleanup-stable + image: "rust:1.54.0" + cache: + key: msrv + paths: + - target + - .cargo cleanup-nightly: extends: cleanup-stable @@ -107,8 +106,8 @@ build-base-stable: build-base-msrv: extends: build-base-stable -# needs: ["cleanup-msrv"] - image: "rust:1.43.0" + needs: ["cleanup-msrv"] + image: "rust:1.54.0" cache: key: msrv paths: @@ -134,7 +133,7 @@ build-stable: build-msrv: extends: build-stable needs: ["build-base-msrv"] - image: "rust:1.43.0" + image: "rust:1.54.0" cache: key: msrv paths: @@ -159,7 +158,7 @@ test-stable: test-msrv: extends: test-stable - image: "rust:1.43.0" + image: "rust:1.54.0" needs: ["build-msrv"] cache: key: msrv diff --git a/CHANGELOG.md b/CHANGELOG.md index 305b7e1..a0a5179 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +## Changed +- MSRV is now 1.54.0 + - A few dependencies have been updated, most notably [`clap`] ### Added - AIFF (Audio Interchange File Format, a PCM audio format like WAV) detection to [`infer`] - `--version` output now includes the (short) hash of the git commit fif was built from diff --git a/Cargo.lock b/Cargo.lock index 48dfe93..165635f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,9 +27,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "byteorder" @@ -65,9 +65,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "3.0.0-beta.2" +version = "3.0.0-beta.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142" +checksum = "fcd70aa5597dbc42f7217a543f9ef2768b2ef823ba29036072d30e1d88e98406" dependencies = [ "atty", "bitflags", @@ -78,15 +78,14 @@ dependencies = [ "termcolor", "terminal_size", "textwrap", - "unicode-width", "vec_map", ] [[package]] name = "clap_derive" -version = "3.0.0-beta.2" +version = "3.0.0-beta.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370f715b81112975b1b69db93e0b56ea4cd4e5002ac43b2da8474106a54096a1" +checksum = "0b5bb0d655624a0b8770d1c178fb8ffcb1f91cc722cb08f451e3dc72465421ac" dependencies = [ "heck", "proc-macro-error", @@ -187,11 +186,9 @@ checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193" name = "fif" version = "0.3.6" dependencies = [ - "bitflags", "cached", "cfg-if", "clap", - "clap_derive", "env_logger", "exitcode", "infer", @@ -388,9 +385,9 @@ checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "os_str_bytes" -version = "2.4.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" +checksum = "6acbef58a60fe69ab50510a55bc8cdd4d6cf2283d27ad338f54cb52747a9cf2d" [[package]] name = "phf" @@ -632,9 +629,9 @@ checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" [[package]] name = "smartstring" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29620fe111ceaba7a50fd806b5f44c1ef44a697a739f6677a4464c7ea8685997" +checksum = "31aa6a31c0c2b21327ce875f7e8952322acfcfd0c27569a6e18a647281352c9b" dependencies = [ "static_assertions", ] @@ -701,12 +698,11 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.12.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789" +checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" dependencies = [ "terminal_size", - "unicode-width", ] [[package]] @@ -744,12 +740,6 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" -[[package]] -name = "unicode-width" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - [[package]] name = "unicode-xid" version = "0.2.2" diff --git a/Cargo.toml b/Cargo.toml index 744a5f9..ab8386f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ version = "0.3.6" authors = ["Lynnesbian "] edition = "2018" license = "GPL-3.0-or-later" -rust-version = "1.43.0" # cached breaks on 1.42.0, i think it needs https://github.com/rust-lang/rust/pull/67642/ +rust-version = "1.54.0" repository = "https://gitlab.com/Lynnesbian/fif" readme = "README.md" keywords = ["mime", "mimetype", "utilities", "tools"] @@ -37,7 +37,6 @@ cfg-if = "1.0.0" itertools = "0.10.0" serde = { version = "1.0", features = ["derive"], optional = true } serde_json = { version = "1.0", optional = true } -bitflags = "~1.2.1" # 1.3+ requires Rust >= 1.46 [target.'cfg(not(unix))'.dependencies] xdg-mime = { version = "0.3.3", optional = true } @@ -49,27 +48,17 @@ infer = { version = "0.5.0", optional = true } [target.'cfg(not(all(target_endian = "big", target_pointer_width = "32")))'.dependencies] # the seemingly weird target constraint here is due to this: -# https://github.com/bodil/smartstring/blob/v0.2.7/src/config.rs#L102-L104 +# https://github.com/bodil/smartstring/blob/v0.2.9/src/config.rs#L91-L93 # essentially, smartstring is intentionally blocked from compiling on 32-bit big endian archs, so our dependency on it # needs to be too. otherwise, fif won't work on platforms like powerpc, even though this dependency is the only # blocker -- fif runs just fine on powerpc without smartstring. or at least, just fine under qemu user-mode powerpc ~u0 - -# additionally, smartstring 0.2.8 requires rust >=1.46 (due to https://github.com/rust-lang/rust/issues/49146), and -# 0.2.3 doesn't impl Display on its SmartString type. -# so, we need at least 0.2.4 so we can println! strings, and at most 0.2.7 until we bump the MSRV to at least 1.46. -# see https://github.com/bodil/smartstring/blob/master/CHANGELOG.md -smartstring = "<= 0.2.7, >= 0.2.4" +smartstring = "0.2.9" [dependencies.clap] -# beta.4 requires rust >= 1.54.0 (and beta.3 was yanked) -version = "=3.0.0-beta.2" +version = "=3.0.0-beta.4" default-features = false features = ["wrap_help", "color", "derive", "std"] -[dependencies.clap_derive] -# without this, clap beta.2 will install clap_derive beta.4 :c -version = "=3.0.0-beta.2" - [dependencies.env_logger] version = "0.9.0" default-features = false @@ -94,4 +83,4 @@ opt-level = 3 opt-level = 3 [package.metadata] -msrv = "1.43.0" \ No newline at end of file +msrv = "1.54.0" \ No newline at end of file diff --git a/README.md b/README.md index e6324b9..6ca710f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Version](https://img.shields.io/crates/v/fif.svg?logo=rust&style=flat-square) ](https://crates.io/crates/fif) -[![Minimum Supported Rust Version](https://img.shields.io/badge/msrv-1.43.0-orange?logo=rust&style=flat-square) +[![Minimum Supported Rust Version](https://img.shields.io/badge/msrv-1.54.0-orange?logo=rust&style=flat-square) ](https://gitlab.com/Lynnesbian/fif/-/blob/master/README.md#version-policy) [![License](https://img.shields.io/crates/l/fif.svg?style=flat-square) ](https://gitlab.com/Lynnesbian/fif/-/blob/master/LICENSE) diff --git a/clippy.toml b/clippy.toml index 3332aa9..840d1ad 100644 --- a/clippy.toml +++ b/clippy.toml @@ -1,2 +1,3 @@ # avoid-breaking-exported-api = false # only available on nightly for now -cognitive-complexity-threshold = 15 \ No newline at end of file +cognitive-complexity-threshold = 15 +msrv = "1.54.0" \ No newline at end of file diff --git a/src/parameters.rs b/src/parameters.rs index c20d36e..080f7bc 100644 --- a/src/parameters.rs +++ b/src/parameters.rs @@ -3,7 +3,7 @@ use crate::utils::{clap_long_version, clap_version}; use crate::String as StringType; use cfg_if::cfg_if; -use clap::{AppSettings, Clap}; +use clap::{AppSettings, ArgEnum, Clap}; use std::collections::BTreeSet; use std::path::PathBuf; @@ -15,7 +15,7 @@ cfg_if! { } } -#[derive(Clap, PartialEq, Debug)] +#[derive(ArgEnum, PartialEq, Debug)] pub enum OutputFormat { /// A Bourne shell compatible script. #[clap(alias = "shell", alias = "bash")] @@ -52,7 +52,7 @@ pub struct Parameters { /// Only examine files with these extensions. /// Multiple extensions can be specified by either using the flag multiple times (`-e jpg -e png -e gif`), or by /// separating them with commas (`-e jpg,png,gif`). - #[clap(short, long, use_delimiter = true, require_delimiter = true, value_name = "ext", validator = lowercase_exts)] + #[clap(short, long, use_delimiter = true, require_delimiter = true, value_name = "ext", takes_value = true, validator = validate_exts)] pub exts: Option>, /// Use these preset lists of extensions as the search filter (comma-separated list). @@ -70,7 +70,7 @@ pub struct Parameters { /// Don't scan files with these extensions. /// This option takes precedence over extensions specified with `-e` or `-E`. - #[clap(short = 'x', long, use_delimiter = true, require_delimiter = true, value_name = "ext", validator = lowercase_exts)] + #[clap(short = 'x', long, require_delimiter = true, use_delimiter = true, value_name = "ext", validator = validate_exts)] pub exclude: Option>, /// Exclude files using a preset list of extensions. @@ -133,7 +133,10 @@ pub struct Parameters { pub ignore_unknown_exts: bool, } -fn lowercase_exts(exts: &str) -> Result<(), String> { +fn validate_exts(exts: &str) -> Result<(), String> { + if exts.is_empty() { + return Err(String::from("Cannot specify empty extensions")); + } // TODO: i would much rather accept uppercase exts and convert them to lowercase than just rejecting lowercase exts... if exts.to_lowercase() != exts { return Err(String::from("Supplied extensions must be lowercase")); @@ -224,10 +227,7 @@ impl Parameters { } } - pub fn default_verbosity(&self) -> log::LevelFilter { - #![allow(clippy::missing_const_for_fn)] - // match was not permitted inside const functions until 1.46 - + pub const fn default_verbosity(&self) -> log::LevelFilter { use log::LevelFilter; match self.quiet { @@ -246,7 +246,7 @@ impl Parameters { } /// Sets of extensions for use with [Parameter](crate::parameters::Parameters)'s `-E` flag. -#[derive(Clap, PartialEq, Debug)] +#[derive(ArgEnum, PartialEq, Debug)] pub enum ExtensionSet { /// Extensions used for image file formats, such as `png`, `jpeg`, `webp`, etc. Images, From 35322075abf1973852c803dcd60d05d7e92547d9 Mon Sep 17 00:00:00 2001 From: Lynne Date: Fri, 24 Sep 2021 17:55:21 +1000 Subject: [PATCH 3/3] switch to edition 2021, bumping msrv to 1.56.0 unfortunately we can't use the new resolver for reasons explained in the readme --- .gitlab-ci.yml | 8 ++++---- CHANGELOG.md | 2 +- Cargo.lock | 25 +++++++++++++------------ Cargo.toml | 16 +++++++++++----- README.md | 2 +- clippy.toml | 2 +- test.py | 4 +++- 7 files changed, 34 insertions(+), 25 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0aaad7d..8275c15 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -83,7 +83,7 @@ cleanup-stable: cleanup-msrv: extends: cleanup-stable - image: "rust:1.54.0" + image: "rust:1.56.0" cache: key: msrv paths: @@ -107,7 +107,7 @@ build-base-stable: build-base-msrv: extends: build-base-stable needs: ["cleanup-msrv"] - image: "rust:1.54.0" + image: "rust:1.56.0" cache: key: msrv paths: @@ -133,7 +133,7 @@ build-stable: build-msrv: extends: build-stable needs: ["build-base-msrv"] - image: "rust:1.54.0" + image: "rust:1.56.0" cache: key: msrv paths: @@ -158,7 +158,7 @@ test-stable: test-msrv: extends: test-stable - image: "rust:1.54.0" + image: "rust:1.56.0" needs: ["build-msrv"] cache: key: msrv diff --git a/CHANGELOG.md b/CHANGELOG.md index a0a5179..f6ef523 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## Unreleased ## Changed -- MSRV is now 1.54.0 +- MSRV is now 1.56.0 - A few dependencies have been updated, most notably [`clap`] ### Added - AIFF (Audio Interchange File Format, a PCM audio format like WAV) detection to [`infer`] diff --git a/Cargo.lock b/Cargo.lock index 165635f..25a1afa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,9 +27,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "bitflags" -version = "1.3.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "byteorder" @@ -346,10 +346,11 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "new_mime_guess" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8c8e990db7ba41ce2b4b3a38380a0f3385d61c55b3d4999d6e00389562a79a2" +checksum = "b101054f57b10576d116bc0da7ce8b05362b4490b0d21c7748395eaaf9359047" dependencies = [ + "bitflags", "mime", "phf", "phf_codegen", @@ -391,18 +392,18 @@ checksum = "6acbef58a60fe69ab50510a55bc8cdd4d6cf2283d27ad338f54cb52747a9cf2d" [[package]] name = "phf" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ac8b67553a7ca9457ce0e526948cad581819238f4a9d1ea74545851fa24f37" +checksum = "b9fc3db1018c4b59d7d582a739436478b6035138b6aecbce989fc91c3e98409f" dependencies = [ "phf_shared", ] [[package]] name = "phf_codegen" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963adb11cf22ee65dfd401cf75577c1aa0eca58c0b97f9337d2da61d3e640503" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" dependencies = [ "phf_generator", "phf_shared", @@ -410,9 +411,9 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43f3220d96e0080cc9ea234978ccd80d904eafb17be31bb0f76daaea6493082" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" dependencies = [ "phf_shared", "rand", @@ -420,9 +421,9 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68318426de33640f02be62b4ae8eb1261be2efbc337b60c54d845bf4484e0d9" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" dependencies = [ "siphasher", "unicase", diff --git a/Cargo.toml b/Cargo.toml index ab8386f..fab3a45 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,16 +3,22 @@ name = "fif" description = "A command-line tool for detecting and optionally correcting files with incorrect extensions." version = "0.3.6" authors = ["Lynnesbian "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" -rust-version = "1.54.0" +rust-version = "1.56.0" repository = "https://gitlab.com/Lynnesbian/fif" readme = "README.md" keywords = ["mime", "mimetype", "utilities", "tools"] categories = ["command-line-utilities"] exclude = [".idea/", "*.toml", "!Cargo.toml", "*.sh", "*.py", "*.yml", "*.md", ".mailmap", "pkg/"] -#resolver = "2" -#license-file = "LICENSE" + +# unfortunately, we can't use resolver v2 right now, because one of the phf crates (i think it's phf_codegen) that are +# pulled in by new_mime_guess' phf-map feature doesn't enable phf_shared's unicase feature when it should. +# this causes new_mime_guess' build.rs to fail with errors about PhfHash traits and such not being implemented for +# UniCase<&str>. +# there's no way to fix this in either fif or new_mime_guess itself, short of a patch (which can't be used on +# crates.io), so we'll have to disable the new resolver for now :( +resolver = "1" [badges] maintenance = { status = "experimental" } @@ -83,4 +89,4 @@ opt-level = 3 opt-level = 3 [package.metadata] -msrv = "1.54.0" \ No newline at end of file +msrv = "1.56.0" \ No newline at end of file diff --git a/README.md b/README.md index 6ca710f..4694c7b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Version](https://img.shields.io/crates/v/fif.svg?logo=rust&style=flat-square) ](https://crates.io/crates/fif) -[![Minimum Supported Rust Version](https://img.shields.io/badge/msrv-1.54.0-orange?logo=rust&style=flat-square) +[![Minimum Supported Rust Version](https://img.shields.io/badge/msrv-1.56.0-orange?logo=rust&style=flat-square) ](https://gitlab.com/Lynnesbian/fif/-/blob/master/README.md#version-policy) [![License](https://img.shields.io/crates/l/fif.svg?style=flat-square) ](https://gitlab.com/Lynnesbian/fif/-/blob/master/LICENSE) diff --git a/clippy.toml b/clippy.toml index 840d1ad..a636165 100644 --- a/clippy.toml +++ b/clippy.toml @@ -1,3 +1,3 @@ # avoid-breaking-exported-api = false # only available on nightly for now cognitive-complexity-threshold = 15 -msrv = "1.54.0" \ No newline at end of file +msrv = "1.56.0" \ No newline at end of file diff --git a/test.py b/test.py index 79fde34..04c263c 100755 --- a/test.py +++ b/test.py @@ -24,7 +24,9 @@ def test_versions(): print("Couldn't find rust-version") exit(1) - versions = [match.group(1), "stable", "nightly"] + # versions = [match.group(1), "stable", "nightly"] + # remove this when 1.56 is released + versions = ["beta", "nightly"] backends = ["xdg-mime", "infer"] upto = 1