From fa1ba256d20236042455abb31a92d2a1d27ee58f Mon Sep 17 00:00:00 2001 From: Felipe Baltor Date: Thu, 23 May 2024 08:59:11 -0300 Subject: [PATCH] refactor: remove custom `utc_now` in favor of `chrono::Utc:now` feature (#23888) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR removes the use of the custom `utc_now` function in favor of the `chrono` implementation. It resolves #22864. --------- Co-authored-by: Bartek IwaƄczuk --- cli/Cargo.toml | 2 +- cli/bench/main.rs | 5 ++--- cli/tools/coverage/reporter.rs | 2 +- cli/tools/upgrade.rs | 5 ++--- cli/util/mod.rs | 1 - cli/util/time.rs | 19 ------------------- ext/cron/lib.rs | 1 - ext/cron/local.rs | 10 +++++----- ext/cron/time.rs | 15 --------------- ext/kv/Cargo.toml | 2 +- ext/kv/lib.rs | 4 +--- ext/kv/time.rs | 15 --------------- tests/Cargo.toml | 2 +- tests/integration/jupyter_tests.rs | 5 +---- 14 files changed, 15 insertions(+), 73 deletions(-) delete mode 100644 cli/util/time.rs delete mode 100644 ext/cron/time.rs delete mode 100644 ext/kv/time.rs diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 9c8c4f6bd6..c2edd2b606 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -86,7 +86,7 @@ base64.workspace = true bincode = "=1.3.3" bytes.workspace = true cache_control.workspace = true -chrono.workspace = true +chrono = { workspace = true, features = ["now"] } clap = { version = "=4.4.17", features = ["env", "string"] } clap_complete = "=4.4.7" clap_complete_fig = "=4.4.2" diff --git a/cli/bench/main.rs b/cli/bench/main.rs index 8f0627558b..cfbc44e8cb 100644 --- a/cli/bench/main.rs +++ b/cli/bench/main.rs @@ -17,8 +17,6 @@ use std::process::Stdio; use std::time::SystemTime; use test_util::PathRef; -include!("../util/time.rs"); - mod http; mod lsp; @@ -442,7 +440,8 @@ async fn main() -> Result<()> { env::set_current_dir(test_util::root_path())?; let mut new_data = BenchResult { - created_at: utc_now().to_rfc3339_opts(chrono::SecondsFormat::Secs, true), + created_at: chrono::Utc::now() + .to_rfc3339_opts(chrono::SecondsFormat::Secs, true), sha1: test_util::run_collect( &["git", "rev-parse", "HEAD"], None, diff --git a/cli/tools/coverage/reporter.rs b/cli/tools/coverage/reporter.rs index f359755a92..4bb72b264e 100644 --- a/cli/tools/coverage/reporter.rs +++ b/cli/tools/coverage/reporter.rs @@ -399,7 +399,7 @@ impl CoverageReporter for HtmlCoverageReporter { fn done(&mut self, coverage_root: &Path) { let summary = self.collect_summary(&self.file_reports); - let now = crate::util::time::utc_now().to_rfc2822(); + let now = chrono::Utc::now().to_rfc2822(); for (node, stats) in &summary { let report_path = diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs index 073ebdc1c9..8379c6fd2e 100644 --- a/cli/tools/upgrade.rs +++ b/cli/tools/upgrade.rs @@ -10,7 +10,6 @@ use crate::http_util::HttpClient; use crate::standalone::binary::unpack_into_dir; use crate::util::progress_bar::ProgressBar; use crate::util::progress_bar::ProgressBarStyle; -use crate::util::time; use crate::version; use async_trait::async_trait; @@ -60,7 +59,7 @@ impl RealUpdateCheckerEnvironment { Self { cache_file_path, // cache the current time - current_time: time::utc_now(), + current_time: chrono::Utc::now(), } } } @@ -785,7 +784,7 @@ mod test { current_version: Default::default(), is_canary: Default::default(), latest_version: Rc::new(RefCell::new(Ok("".to_string()))), - time: Rc::new(RefCell::new(crate::util::time::utc_now())), + time: Rc::new(RefCell::new(chrono::Utc::now())), } } diff --git a/cli/util/mod.rs b/cli/util/mod.rs index c8155dc512..89df7bb986 100644 --- a/cli/util/mod.rs +++ b/cli/util/mod.rs @@ -15,7 +15,6 @@ pub mod progress_bar; pub mod result; pub mod sync; pub mod text_encoding; -pub mod time; pub mod unix; pub mod v8; pub mod windows; diff --git a/cli/util/time.rs b/cli/util/time.rs deleted file mode 100644 index 47306c1265..0000000000 --- a/cli/util/time.rs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -/// Identical to chrono::Utc::now() but without the system "clock" -/// feature flag. -/// -/// The "clock" feature flag pulls in the "iana-time-zone" crate -/// which links to macOS's "CoreFoundation" framework which increases -/// startup time for the CLI. -/// -/// You can simply include this file in your project using -/// `include!("path/to/cli/util/time.rs"))` and use it -/// as a drop-in replacement for chrono::Utc::now(). -pub fn utc_now() -> chrono::DateTime { - let now = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .expect("system time before Unix epoch"); - chrono::DateTime::from_timestamp(now.as_secs() as i64, now.subsec_nanos()) - .unwrap() -} diff --git a/ext/cron/lib.rs b/ext/cron/lib.rs index 4f4d0e05cd..a0f1c44e1e 100644 --- a/ext/cron/lib.rs +++ b/ext/cron/lib.rs @@ -2,7 +2,6 @@ mod interface; pub mod local; -mod time; use std::borrow::Cow; use std::cell::RefCell; diff --git a/ext/cron/local.rs b/ext/cron/local.rs index 945df07961..dd60e750a0 100644 --- a/ext/cron/local.rs +++ b/ext/cron/local.rs @@ -91,7 +91,7 @@ impl LocalCronHandler { .copied(); let sleep_fut = if let Some(earliest_deadline) = earliest_deadline { - let now = crate::time::utc_now().timestamp_millis() as u64; + let now = chrono::Utc::now().timestamp_millis() as u64; if let Some(delta) = earliest_deadline.checked_sub(now) { tokio::time::sleep(std::time::Duration::from_millis(delta)).boxed() } else { @@ -121,7 +121,7 @@ impl LocalCronHandler { { let backoff_ms = backoff_schedule[cron.current_execution_retries as usize]; - let now = crate::time::utc_now().timestamp_millis() as u64; + let now = chrono::Utc::now().timestamp_millis() as u64; cron.current_execution_retries += 1; now + backoff_ms as u64 } else { @@ -155,7 +155,7 @@ impl RuntimeState { fn get_ready_crons( &mut self, ) -> Result)>, AnyError> { - let now = crate::time::utc_now().timestamp_millis() as u64; + let now = chrono::Utc::now().timestamp_millis() as u64; let ready = { let to_remove = self @@ -301,7 +301,7 @@ impl CronHandle for CronExecutionHandle { } fn compute_next_deadline(cron_expression: &str) -> Result { - let now = crate::time::utc_now(); + let now = chrono::Utc::now(); if let Ok(test_schedule) = env::var("DENO_CRON_TEST_SCHEDULE_OFFSET") { if let Ok(offset) = test_schedule.parse::() { @@ -334,7 +334,7 @@ mod tests { #[test] fn test_compute_next_deadline() { - let now = crate::time::utc_now().timestamp_millis() as u64; + let now = chrono::Utc::now().timestamp_millis() as u64; assert!(compute_next_deadline("*/1 * * * *").unwrap() > now); assert!(compute_next_deadline("* * * * *").unwrap() > now); assert!(compute_next_deadline("bogus").is_err()); diff --git a/ext/cron/time.rs b/ext/cron/time.rs deleted file mode 100644 index 3a5565332a..0000000000 --- a/ext/cron/time.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -/// Identical to chrono::Utc::now() but without the system "clock" -/// feature flag. -/// -/// The "clock" feature flag pulls in the "iana-time-zone" crate -/// which links to macOS's "CoreFoundation" framework which increases -/// startup time for the CLI. -pub fn utc_now() -> chrono::DateTime { - let now = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .expect("system time before Unix epoch"); - chrono::DateTime::from_timestamp(now.as_secs() as i64, now.subsec_nanos()) - .unwrap() -} diff --git a/ext/kv/Cargo.toml b/ext/kv/Cargo.toml index 12a0e2c906..7349d5841a 100644 --- a/ext/kv/Cargo.toml +++ b/ext/kv/Cargo.toml @@ -17,7 +17,7 @@ path = "lib.rs" anyhow.workspace = true async-trait.workspace = true base64.workspace = true -chrono.workspace = true +chrono = { workspace = true, features = ["now"] } deno_core.workspace = true deno_fetch.workspace = true deno_node.workspace = true diff --git a/ext/kv/lib.rs b/ext/kv/lib.rs index 72e1cab304..2856143893 100644 --- a/ext/kv/lib.rs +++ b/ext/kv/lib.rs @@ -4,7 +4,6 @@ pub mod dynamic; mod interface; pub mod remote; pub mod sqlite; -mod time; use std::borrow::Cow; use std::cell::RefCell; @@ -56,7 +55,6 @@ use denokv_proto::WatchStream; use log::debug; use serde::Deserialize; use serde::Serialize; -use time::utc_now; pub use crate::interface::*; @@ -772,7 +770,7 @@ async fn op_kv_atomic_write( where DBH: DatabaseHandler + 'static, { - let current_timestamp = utc_now(); + let current_timestamp = chrono::Utc::now(); let db = { let state = state.borrow(); let resource = diff --git a/ext/kv/time.rs b/ext/kv/time.rs deleted file mode 100644 index 3a5565332a..0000000000 --- a/ext/kv/time.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. - -/// Identical to chrono::Utc::now() but without the system "clock" -/// feature flag. -/// -/// The "clock" feature flag pulls in the "iana-time-zone" crate -/// which links to macOS's "CoreFoundation" framework which increases -/// startup time for the CLI. -pub fn utc_now() -> chrono::DateTime { - let now = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .expect("system time before Unix epoch"); - chrono::DateTime::from_timestamp(now.as_secs() as i64, now.subsec_nanos()) - .unwrap() -} diff --git a/tests/Cargo.toml b/tests/Cargo.toml index af220aae7a..4b8db95647 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -33,7 +33,7 @@ required-features = ["run"] [dev-dependencies] bytes.workspace = true -chrono.workspace = true +chrono = { workspace = true, features = ["now"] } deno_ast.workspace = true deno_bench_util.workspace = true deno_cache_dir = { workspace = true } diff --git a/tests/integration/jupyter_tests.rs b/tests/integration/jupyter_tests.rs index c7b2712e88..e0733d5a30 100644 --- a/tests/integration/jupyter_tests.rs +++ b/tests/integration/jupyter_tests.rs @@ -25,9 +25,6 @@ use zeromq::SocketRecv; use zeromq::SocketSend; use zeromq::ZmqMessage; -// for the `utc_now` function -include!("../../cli/util/time.rs"); - /// Jupyter connection file format #[derive(Serialize)] struct ConnectionSpec { @@ -138,7 +135,7 @@ impl Default for MsgHeader { Self { msg_id: Uuid::new_v4(), session: Uuid::new_v4(), - date: utc_now(), + date: chrono::Utc::now(), username: "test".into(), msg_type: "kernel_info_request".into(), version: "5.3".into(),