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
This commit is contained in:
Lynne Megido 2021-09-24 16:34:58 +10:00
parent 77ed918112
commit aeb7c05377
Signed by: lynnesbian
GPG Key ID: F0A184B5213D9F90
7 changed files with 45 additions and 63 deletions

View File

@ -81,15 +81,14 @@ clippy:
cleanup-stable: cleanup-stable:
extends: .cargo-cleanup extends: .cargo-cleanup
# commented out because cargo-sweep no longer works on our MSRV cleanup-msrv:
#cleanup-msrv: extends: cleanup-stable
# extends: cleanup-stable image: "rust:1.54.0"
# image: "rust:1.43.0" cache:
# cache: key: msrv
# key: msrv paths:
# paths: - target
# - target - .cargo
# - .cargo
cleanup-nightly: cleanup-nightly:
extends: cleanup-stable extends: cleanup-stable
@ -107,8 +106,8 @@ build-base-stable:
build-base-msrv: build-base-msrv:
extends: build-base-stable extends: build-base-stable
# needs: ["cleanup-msrv"] needs: ["cleanup-msrv"]
image: "rust:1.43.0" image: "rust:1.54.0"
cache: cache:
key: msrv key: msrv
paths: paths:
@ -134,7 +133,7 @@ build-stable:
build-msrv: build-msrv:
extends: build-stable extends: build-stable
needs: ["build-base-msrv"] needs: ["build-base-msrv"]
image: "rust:1.43.0" image: "rust:1.54.0"
cache: cache:
key: msrv key: msrv
paths: paths:
@ -159,7 +158,7 @@ test-stable:
test-msrv: test-msrv:
extends: test-stable extends: test-stable
image: "rust:1.43.0" image: "rust:1.54.0"
needs: ["build-msrv"] needs: ["build-msrv"]
cache: cache:
key: msrv key: msrv

View File

@ -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). [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased ## Unreleased
## Changed
- MSRV is now 1.54.0
- A few dependencies have been updated, most notably [`clap`]
### Added ### Added
- AIFF (Audio Interchange File Format, a PCM audio format like WAV) detection to [`infer`] - 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 - `--version` output now includes the (short) hash of the git commit fif was built from

34
Cargo.lock generated
View File

@ -27,9 +27,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.2.1" version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "byteorder" name = "byteorder"
@ -65,9 +65,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "clap" name = "clap"
version = "3.0.0-beta.2" version = "3.0.0-beta.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142" checksum = "fcd70aa5597dbc42f7217a543f9ef2768b2ef823ba29036072d30e1d88e98406"
dependencies = [ dependencies = [
"atty", "atty",
"bitflags", "bitflags",
@ -78,15 +78,14 @@ dependencies = [
"termcolor", "termcolor",
"terminal_size", "terminal_size",
"textwrap", "textwrap",
"unicode-width",
"vec_map", "vec_map",
] ]
[[package]] [[package]]
name = "clap_derive" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "370f715b81112975b1b69db93e0b56ea4cd4e5002ac43b2da8474106a54096a1" checksum = "0b5bb0d655624a0b8770d1c178fb8ffcb1f91cc722cb08f451e3dc72465421ac"
dependencies = [ dependencies = [
"heck", "heck",
"proc-macro-error", "proc-macro-error",
@ -187,11 +186,9 @@ checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193"
name = "fif" name = "fif"
version = "0.3.6" version = "0.3.6"
dependencies = [ dependencies = [
"bitflags",
"cached", "cached",
"cfg-if", "cfg-if",
"clap", "clap",
"clap_derive",
"env_logger", "env_logger",
"exitcode", "exitcode",
"infer", "infer",
@ -388,9 +385,9 @@ checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]] [[package]]
name = "os_str_bytes" name = "os_str_bytes"
version = "2.4.0" version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" checksum = "6acbef58a60fe69ab50510a55bc8cdd4d6cf2283d27ad338f54cb52747a9cf2d"
[[package]] [[package]]
name = "phf" name = "phf"
@ -632,9 +629,9 @@ checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b"
[[package]] [[package]]
name = "smartstring" name = "smartstring"
version = "0.2.7" version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29620fe111ceaba7a50fd806b5f44c1ef44a697a739f6677a4464c7ea8685997" checksum = "31aa6a31c0c2b21327ce875f7e8952322acfcfd0c27569a6e18a647281352c9b"
dependencies = [ dependencies = [
"static_assertions", "static_assertions",
] ]
@ -701,12 +698,11 @@ dependencies = [
[[package]] [[package]]
name = "textwrap" name = "textwrap"
version = "0.12.1" version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789" checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
dependencies = [ dependencies = [
"terminal_size", "terminal_size",
"unicode-width",
] ]
[[package]] [[package]]
@ -744,12 +740,6 @@ version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
[[package]]
name = "unicode-width"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]] [[package]]
name = "unicode-xid" name = "unicode-xid"
version = "0.2.2" version = "0.2.2"

View File

@ -5,7 +5,7 @@ version = "0.3.6"
authors = ["Lynnesbian <lynne@bune.city>"] authors = ["Lynnesbian <lynne@bune.city>"]
edition = "2018" edition = "2018"
license = "GPL-3.0-or-later" 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" repository = "https://gitlab.com/Lynnesbian/fif"
readme = "README.md" readme = "README.md"
keywords = ["mime", "mimetype", "utilities", "tools"] keywords = ["mime", "mimetype", "utilities", "tools"]
@ -37,7 +37,6 @@ cfg-if = "1.0.0"
itertools = "0.10.0" itertools = "0.10.0"
serde = { version = "1.0", features = ["derive"], optional = true } serde = { version = "1.0", features = ["derive"], optional = true }
serde_json = { version = "1.0", optional = true } serde_json = { version = "1.0", optional = true }
bitflags = "~1.2.1" # 1.3+ requires Rust >= 1.46
[target.'cfg(not(unix))'.dependencies] [target.'cfg(not(unix))'.dependencies]
xdg-mime = { version = "0.3.3", optional = true } 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] [target.'cfg(not(all(target_endian = "big", target_pointer_width = "32")))'.dependencies]
# the seemingly weird target constraint here is due to this: # 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 # 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 # 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 # blocker -- fif runs just fine on powerpc without smartstring. or at least, just fine under qemu user-mode powerpc ~u0
smartstring = "0.2.9"
# 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"
[dependencies.clap] [dependencies.clap]
# beta.4 requires rust >= 1.54.0 (and beta.3 was yanked) version = "=3.0.0-beta.4"
version = "=3.0.0-beta.2"
default-features = false default-features = false
features = ["wrap_help", "color", "derive", "std"] 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] [dependencies.env_logger]
version = "0.9.0" version = "0.9.0"
default-features = false default-features = false
@ -94,4 +83,4 @@ opt-level = 3
opt-level = 3 opt-level = 3
[package.metadata] [package.metadata]
msrv = "1.43.0" msrv = "1.54.0"

View File

@ -7,7 +7,7 @@
[![Version](https://img.shields.io/crates/v/fif.svg?logo=rust&style=flat-square) [![Version](https://img.shields.io/crates/v/fif.svg?logo=rust&style=flat-square)
](https://crates.io/crates/fif) ](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) ](https://gitlab.com/Lynnesbian/fif/-/blob/master/README.md#version-policy)
[![License](https://img.shields.io/crates/l/fif.svg?style=flat-square) [![License](https://img.shields.io/crates/l/fif.svg?style=flat-square)
](https://gitlab.com/Lynnesbian/fif/-/blob/master/LICENSE) ](https://gitlab.com/Lynnesbian/fif/-/blob/master/LICENSE)

View File

@ -1,2 +1,3 @@
# avoid-breaking-exported-api = false # only available on nightly for now # avoid-breaking-exported-api = false # only available on nightly for now
cognitive-complexity-threshold = 15 cognitive-complexity-threshold = 15
msrv = "1.54.0"

View File

@ -3,7 +3,7 @@
use crate::utils::{clap_long_version, clap_version}; use crate::utils::{clap_long_version, clap_version};
use crate::String as StringType; use crate::String as StringType;
use cfg_if::cfg_if; use cfg_if::cfg_if;
use clap::{AppSettings, Clap}; use clap::{AppSettings, ArgEnum, Clap};
use std::collections::BTreeSet; use std::collections::BTreeSet;
use std::path::PathBuf; use std::path::PathBuf;
@ -15,7 +15,7 @@ cfg_if! {
} }
} }
#[derive(Clap, PartialEq, Debug)] #[derive(ArgEnum, PartialEq, Debug)]
pub enum OutputFormat { pub enum OutputFormat {
/// A Bourne shell compatible script. /// A Bourne shell compatible script.
#[clap(alias = "shell", alias = "bash")] #[clap(alias = "shell", alias = "bash")]
@ -52,7 +52,7 @@ pub struct Parameters {
/// Only examine files with these extensions. /// 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 /// 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`). /// 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<Vec<StringType>>, pub exts: Option<Vec<StringType>>,
/// Use these preset lists of extensions as the search filter (comma-separated list). /// 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. /// Don't scan files with these extensions.
/// This option takes precedence over extensions specified with `-e` or `-E`. /// 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<Vec<StringType>>, pub exclude: Option<Vec<StringType>>,
/// Exclude files using a preset list of extensions. /// Exclude files using a preset list of extensions.
@ -133,7 +133,10 @@ pub struct Parameters {
pub ignore_unknown_exts: bool, 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... // TODO: i would much rather accept uppercase exts and convert them to lowercase than just rejecting lowercase exts...
if exts.to_lowercase() != exts { if exts.to_lowercase() != exts {
return Err(String::from("Supplied extensions must be lowercase")); return Err(String::from("Supplied extensions must be lowercase"));
@ -224,10 +227,7 @@ impl Parameters {
} }
} }
pub fn default_verbosity(&self) -> log::LevelFilter { pub const fn default_verbosity(&self) -> log::LevelFilter {
#![allow(clippy::missing_const_for_fn)]
// match was not permitted inside const functions until 1.46
use log::LevelFilter; use log::LevelFilter;
match self.quiet { match self.quiet {
@ -246,7 +246,7 @@ impl Parameters {
} }
/// Sets of extensions for use with [Parameter](crate::parameters::Parameters)'s `-E` flag. /// Sets of extensions for use with [Parameter](crate::parameters::Parameters)'s `-E` flag.
#[derive(Clap, PartialEq, Debug)] #[derive(ArgEnum, PartialEq, Debug)]
pub enum ExtensionSet { pub enum ExtensionSet {
/// Extensions used for image file formats, such as `png`, `jpeg`, `webp`, etc. /// Extensions used for image file formats, such as `png`, `jpeg`, `webp`, etc.
Images, Images,