Skip to content

Commit 54a8fae

Browse files
authored
Remove log and pretty-assertions dependencies (#1325)
2 parents 7833067 + a66efca commit 54a8fae

File tree

6 files changed

+71
-152
lines changed

6 files changed

+71
-152
lines changed

Cargo.lock

Lines changed: 0 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@ path = "bin/visudo.rs"
3232
[dependencies]
3333
libc = "0.2.152"
3434
glob = "0.3.0"
35-
log = { version = "0.4.11", features = ["std"] }
36-
37-
[dev-dependencies]
38-
pretty_assertions = "1.2.1"
3935

4036
[features]
4137
default = ["sudoedit"]

src/log/mod.rs

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#![allow(unused_macros)]
22
use self::simple_logger::SimpleLogger;
33
use self::syslog::Syslog;
4-
pub use log::Level;
4+
use std::fmt;
55
use std::ops::Deref;
6+
use std::sync::OnceLock;
67

78
mod simple_logger;
89
mod syslog;
@@ -11,47 +12,51 @@ mod syslog;
1112
macro_rules! logger_macro {
1213
($name:ident is $rule_level:ident to $target:expr, $d:tt) => {
1314
macro_rules! $name {
14-
($d($d arg:tt)+) => (::log::log!(target: $target, $crate::log::Level::$rule_level, $d($d arg)+));
15+
($d($d arg:tt)+) => {
16+
if let Some(logger) = $crate::log::LOGGER.get() {
17+
logger.log($crate::log::Level::$rule_level, $target, format_args!($d($d arg)+));
18+
}
19+
};
1520
}
1621

17-
#[allow(unused)]
1822
pub(crate) use $name;
1923
};
2024
($name:ident is $rule_level:ident to $target:expr) => {
2125
logger_macro!($name is $rule_level to $target, $);
2226
};
2327
}
2428

25-
logger_macro!(auth_error is Error to "sudo::auth");
29+
// logger_macro!(auth_error is Error to "sudo::auth");
2630
logger_macro!(auth_warn is Warn to "sudo::auth");
2731
logger_macro!(auth_info is Info to "sudo::auth");
28-
logger_macro!(auth_debug is Debug to "sudo::auth");
29-
logger_macro!(auth_trace is Trace to "sudo::auth");
32+
// logger_macro!(auth_debug is Debug to "sudo::auth");
33+
// logger_macro!(auth_trace is Trace to "sudo::auth");
3034

3135
logger_macro!(user_error is Error to "sudo::user");
3236
logger_macro!(user_warn is Warn to "sudo::user");
3337
logger_macro!(user_info is Info to "sudo::user");
34-
logger_macro!(user_debug is Debug to "sudo::user");
35-
logger_macro!(user_trace is Trace to "sudo::user");
38+
// logger_macro!(user_debug is Debug to "sudo::user");
39+
// logger_macro!(user_trace is Trace to "sudo::user");
3640

37-
// TODO: dev_logger_macro has an allow_unused that should be removed
3841
macro_rules! dev_logger_macro {
3942
($name:ident is $rule_level:ident to $target:expr, $d:tt) => {
4043
macro_rules! $name {
4144
($d($d arg:tt)+) => {
4245
if std::cfg!(feature = "dev") {
43-
(::log::log!(
44-
target: $target,
45-
$crate::log::Level::$rule_level,
46-
"{}: {}",
47-
std::panic::Location::caller(),
48-
format_args!($d($d arg)+)
49-
));
46+
if let Some(logger) = $crate::log::LOGGER.get() {
47+
logger.log(
48+
$crate::log::Level::$rule_level,
49+
$target,
50+
format_args!("{}: {}",
51+
std::panic::Location::caller(),
52+
format_args!($d($d arg)+)
53+
)
54+
);
55+
}
5056
}
5157
};
5258
}
5359

54-
#[allow(unused)]
5560
pub(crate) use $name;
5661
};
5762
($name:ident is $rule_level:ident to $target:expr) => {
@@ -63,10 +68,12 @@ dev_logger_macro!(dev_error is Error to "sudo::dev");
6368
dev_logger_macro!(dev_warn is Warn to "sudo::dev");
6469
dev_logger_macro!(dev_info is Info to "sudo::dev");
6570
dev_logger_macro!(dev_debug is Debug to "sudo::dev");
66-
dev_logger_macro!(dev_trace is Trace to "sudo::dev");
71+
//dev_logger_macro!(dev_trace is Trace to "sudo::dev");
72+
73+
pub static LOGGER: OnceLock<SudoLogger> = OnceLock::new();
6774

6875
#[derive(Default)]
69-
pub struct SudoLogger(Vec<(String, Box<dyn log::Log>)>);
76+
pub struct SudoLogger(Vec<(String, Box<dyn Log>)>);
7077

7178
impl SudoLogger {
7279
pub fn new(prefix: &'static str) -> Self {
@@ -90,25 +97,16 @@ impl SudoLogger {
9097
}
9198

9299
pub fn into_global_logger(self) {
93-
log::set_boxed_logger(Box::new(self))
94-
.map(|()| log::set_max_level(log::LevelFilter::Trace))
95-
.expect("Could not set previously set logger");
100+
if LOGGER.set(self).is_err() {
101+
panic!("Could not set previously set logger");
102+
}
96103
}
97104

98105
/// Add a logger for a specific prefix to the stack
99106
fn add_logger(
100107
&mut self,
101108
prefix: impl ToString + Deref<Target = str>,
102-
logger: impl log::Log + 'static,
103-
) {
104-
self.add_boxed_logger(prefix, Box::new(logger))
105-
}
106-
107-
/// Add a boxed logger for a specific prefix to the stack
108-
fn add_boxed_logger(
109-
&mut self,
110-
prefix: impl ToString + Deref<Target = str>,
111-
logger: Box<dyn log::Log>,
109+
logger: impl Log + 'static,
112110
) {
113111
let prefix = if prefix.ends_with("::") {
114112
prefix.to_string()
@@ -117,29 +115,32 @@ impl SudoLogger {
117115
// but not `my::prefix_to_somewhere`
118116
format!("{}::", prefix.to_string())
119117
};
120-
self.0.push((prefix, logger))
118+
self.0.push((prefix, Box::new(logger)))
121119
}
122120
}
123121

124-
impl log::Log for SudoLogger {
125-
fn enabled(&self, metadata: &log::Metadata) -> bool {
126-
self.0.iter().any(|(_, l)| l.enabled(metadata))
127-
}
128-
129-
fn log(&self, record: &log::Record) {
122+
impl SudoLogger {
123+
pub fn log(&self, level: Level, target: &str, args: fmt::Arguments<'_>) {
130124
for (prefix, l) in self.0.iter() {
131-
if record.target() == &prefix[..prefix.len() - 2] || record.target().starts_with(prefix)
132-
{
133-
l.log(record);
125+
if target == &prefix[..prefix.len() - 2] || target.starts_with(prefix) {
126+
l.log(level, &args);
134127
}
135128
}
136129
}
130+
}
137131

138-
fn flush(&self) {
139-
for (_, l) in self.0.iter() {
140-
l.flush();
141-
}
142-
}
132+
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)]
133+
#[allow(unused)]
134+
pub enum Level {
135+
Error,
136+
Warn,
137+
Info,
138+
Debug,
139+
Trace,
140+
}
141+
142+
trait Log: Send + Sync {
143+
fn log(&self, level: Level, args: &fmt::Arguments<'_>);
143144
}
144145

145146
#[cfg(test)]

src/log/simple_logger.rs

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
use std::fmt;
12
use std::io::Write;
23

34
#[cfg(feature = "dev")]
45
use std::{fs::File, path::Path};
56

6-
use log::Log;
7+
use crate::log::{Level, Log};
78

89
pub struct SimpleLogger<W: Send + Sync>
910
where
@@ -17,16 +18,9 @@ impl<W: Send + Sync> Log for SimpleLogger<W>
1718
where
1819
for<'a> &'a W: Write,
1920
{
20-
fn enabled(&self, metadata: &log::Metadata) -> bool {
21-
metadata.level() <= log::max_level() && metadata.level() <= log::STATIC_MAX_LEVEL
22-
}
23-
24-
fn log(&self, record: &log::Record) {
25-
let s = format!("{}{}\n", self.prefix, record.args());
21+
fn log(&self, _level: Level, args: &fmt::Arguments<'_>) {
22+
let s = format!("{}{}\n", self.prefix, args);
2623
let _ = (&self.target).write_all(s.as_bytes());
27-
}
28-
29-
fn flush(&self) {
3024
let _ = (&self.target).flush();
3125
}
3226
}
@@ -53,13 +47,13 @@ impl SimpleLogger<File> {
5347

5448
#[cfg(test)]
5549
mod tests {
50+
5651
use std::{
5752
io,
5853
sync::{Arc, RwLock},
5954
};
6055

61-
use super::SimpleLogger;
62-
use log::{LevelFilter, Log};
56+
use super::*;
6357

6458
#[derive(Clone, Default)]
6559
struct MyString {
@@ -86,37 +80,15 @@ mod tests {
8680
}
8781
}
8882

89-
#[test]
90-
fn test_default_level() {
91-
let logger = SimpleLogger::to_stderr("test");
92-
let metadata = log::Metadata::builder().level(log::Level::Trace).build();
93-
94-
log::set_max_level(LevelFilter::Trace);
95-
assert!(logger.enabled(&metadata));
96-
97-
log::set_max_level(LevelFilter::Info);
98-
assert!(!logger.enabled(&metadata));
99-
}
100-
10183
#[test]
10284
fn test_write_and_flush() {
10385
let target = MyString::default();
10486
let logger = SimpleLogger {
10587
target: target.clone(),
10688
prefix: "[test] ",
10789
};
108-
let record = log::Record::builder()
109-
.args(format_args!("Hello World!"))
110-
.level(log::Level::Info)
111-
.build();
112-
113-
logger.log(&record);
114-
115-
let value = target.read();
116-
assert_eq!(value, "[test] Hello World!\n");
117-
drop(value);
11890

119-
logger.flush();
91+
logger.log(Level::Info, &format_args!("Hello World!"));
12092

12193
let value = target.read();
12294
assert_eq!(value, "[test] Hello World!\nflushed");

0 commit comments

Comments
 (0)