aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository/vcs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-09 00:00:12 +0900
committernsfisis <nsfisis@gmail.com>2026-06-09 00:00:49 +0900
commit1c0eb589741de4aa52ef941ff9315b34dbe48aa0 (patch)
tree8d821cf3a7fb3f8c753dec7861ad9597f6948493 /crates/shirabe/src/repository/vcs
parente5b789616ec4c1cbd152c5ccbefe2d27ced4a18f (diff)
downloadphp-shirabe-1c0eb589741de4aa52ef941ff9315b34dbe48aa0.tar.gz
php-shirabe-1c0eb589741de4aa52ef941ff9315b34dbe48aa0.tar.zst
php-shirabe-1c0eb589741de4aa52ef941ff9315b34dbe48aa0.zip
feat(datetime): resolve datetime TODOs
Introduce shim functions and constants, replacing the ad-hoc chrono format strings and parse helpers used as phase-b placeholders. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/repository/vcs')
-rw-r--r--crates/shirabe/src/repository/vcs/forgejo_driver.rs9
-rw-r--r--crates/shirabe/src/repository/vcs/fossil_driver.rs20
-rw-r--r--crates/shirabe/src/repository/vcs/git_bitbucket_driver.rs20
-rw-r--r--crates/shirabe/src/repository/vcs/git_driver.rs16
-rw-r--r--crates/shirabe/src/repository/vcs/github_driver.rs23
-rw-r--r--crates/shirabe/src/repository/vcs/gitlab_driver.rs22
-rw-r--r--crates/shirabe/src/repository/vcs/hg_driver.rs18
-rw-r--r--crates/shirabe/src/repository/vcs/perforce_driver.rs4
-rw-r--r--crates/shirabe/src/repository/vcs/svn_driver.rs16
-rw-r--r--crates/shirabe/src/repository/vcs/vcs_driver.rs13
-rw-r--r--crates/shirabe/src/repository/vcs/vcs_driver_interface.rs7
11 files changed, 99 insertions, 69 deletions
diff --git a/crates/shirabe/src/repository/vcs/forgejo_driver.rs b/crates/shirabe/src/repository/vcs/forgejo_driver.rs
index a40f6a9..73975cd 100644
--- a/crates/shirabe/src/repository/vcs/forgejo_driver.rs
+++ b/crates/shirabe/src/repository/vcs/forgejo_driver.rs
@@ -5,7 +5,7 @@ use anyhow::Result;
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
- PhpMixed, RuntimeException, base64_decode, explode, extension_loaded, urlencode,
+ DATE_RFC3339, PhpMixed, RuntimeException, base64_decode, explode, extension_loaded, urlencode,
};
use crate::cache::Cache;
@@ -185,7 +185,7 @@ impl ForgejoDriver {
pub fn get_change_date(
&mut self,
identifier: &str,
- ) -> Result<Option<chrono::DateTime<chrono::Utc>>> {
+ ) -> Result<Option<chrono::DateTime<chrono::FixedOffset>>> {
if let Some(ref mut git_driver) = self.git_driver {
return git_driver.get_change_date(identifier);
}
@@ -218,8 +218,7 @@ impl ForgejoDriver {
code: 0,
})?;
- let date = chrono::DateTime::parse_from_rfc3339(&date_str)
- .map(|d| d.with_timezone(&chrono::Utc))?;
+ let date: chrono::DateTime<chrono::FixedOffset> = shirabe_php_shim::date_create(&date_str)?;
Ok(Some(date))
}
@@ -725,7 +724,7 @@ impl crate::repository::vcs::VcsDriverInterface for ForgejoDriver {
fn get_change_date(
&mut self,
identifier: &str,
- ) -> anyhow::Result<Option<chrono::DateTime<chrono::Utc>>> {
+ ) -> anyhow::Result<Option<chrono::DateTime<chrono::FixedOffset>>> {
ForgejoDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/fossil_driver.rs b/crates/shirabe/src/repository/vcs/fossil_driver.rs
index 0ee20da..15328c0 100644
--- a/crates/shirabe/src/repository/vcs/fossil_driver.rs
+++ b/crates/shirabe/src/repository/vcs/fossil_driver.rs
@@ -1,10 +1,12 @@
//! ref: composer/src/Composer/Repository/Vcs/FossilDriver.php
use crate::io::io_interface;
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset, Utc};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::Preg;
-use shirabe_php_shim::{PhpMixed, RuntimeException, dirname, is_dir, is_file, is_writable};
+use shirabe_php_shim::{
+ DATE_RFC3339, PhpMixed, RuntimeException, dirname, is_dir, is_file, is_writable,
+};
use crate::cache::Cache;
use crate::config::Config;
@@ -256,7 +258,10 @@ impl FossilDriver {
Ok(Some(content))
}
- pub fn get_change_date(&self, _identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ pub fn get_change_date(
+ &self,
+ _identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
let mut output = String::new();
self.inner.process.borrow_mut().execute_args(
&["fossil", "finfo", "-b", "-n", "1", "composer.json"]
@@ -268,8 +273,8 @@ impl FossilDriver {
let parts: Vec<&str> = output.trim().splitn(3, ' ').collect();
let date = parts.get(1).copied().unwrap_or("");
- let date = DateTime::parse_from_rfc3339(date).map(|d| d.with_timezone(&Utc))?;
- Ok(Some(date))
+ let date: DateTime<Utc> = shirabe_php_shim::date_create(date)?;
+ Ok(Some(date.fixed_offset()))
}
pub fn get_tags(&mut self) -> anyhow::Result<IndexMap<String, String>> {
@@ -383,7 +388,10 @@ impl crate::repository::vcs::VcsDriverInterface for FossilDriver {
FossilDriver::get_file_content(self, file, identifier)
}
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
FossilDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/git_bitbucket_driver.rs b/crates/shirabe/src/repository/vcs/git_bitbucket_driver.rs
index f8cfd7a..de1f814 100644
--- a/crates/shirabe/src/repository/vcs/git_bitbucket_driver.rs
+++ b/crates/shirabe/src/repository/vcs/git_bitbucket_driver.rs
@@ -2,13 +2,13 @@
use crate::io::io_interface;
use anyhow::Result;
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
- InvalidArgumentException, LogicException, PhpMixed, RuntimeException, array_key_exists,
- array_search_mixed, extension_loaded, http_build_query_mixed, implode, in_array, is_array,
- sprintf, strpos,
+ DATE_RFC3339, InvalidArgumentException, LogicException, PhpMixed, RuntimeException,
+ array_key_exists, array_search_mixed, extension_loaded, http_build_query_mixed, implode,
+ in_array, is_array, sprintf, strpos,
};
use crate::cache::Cache;
@@ -461,7 +461,7 @@ impl GitBitbucketDriver {
}
/// @inheritDoc
- pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<Utc>>> {
+ pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<FixedOffset>>> {
if let Some(fallback) = self.fallback_driver.as_mut() {
return fallback.get_change_date(identifier);
}
@@ -486,11 +486,8 @@ impl GitBitbucketDriver {
.fetch_with_oauth_credentials(&resource, false)?
.decode_json()?;
- // TODO(phase-b): port PHP `new \DateTimeImmutable($commit['date'])`
let date_str = commit.get("date").and_then(|v| v.as_string()).unwrap_or("");
- let date: DateTime<Utc> = chrono::DateTime::parse_from_rfc3339(date_str)
- .map_err(|e| anyhow::anyhow!(e))?
- .with_timezone(&Utc);
+ let date: DateTime<FixedOffset> = shirabe_php_shim::date_create(date_str)?;
Ok(Some(date))
}
@@ -920,7 +917,10 @@ impl crate::repository::vcs::VcsDriverInterface for GitBitbucketDriver {
GitBitbucketDriver::get_file_content(self, file, identifier)
}
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
GitBitbucketDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/git_driver.rs b/crates/shirabe/src/repository/vcs/git_driver.rs
index 4878ffe..7f8c206 100644
--- a/crates/shirabe/src/repository/vcs/git_driver.rs
+++ b/crates/shirabe/src/repository/vcs/git_driver.rs
@@ -2,7 +2,7 @@
use crate::io::io_interface;
use chrono::TimeZone;
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset, Utc};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
@@ -281,7 +281,10 @@ impl GitDriver {
Ok(Some(content))
}
- pub fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ pub fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
if identifier.starts_with('-') {
return Err(RuntimeException {
message: format!(
@@ -310,7 +313,9 @@ impl GitDriver {
let timestamp_str = GitUtil::parse_rev_list_output(&output, &self.inner.process);
let timestamp: i64 = timestamp_str.trim().parse().unwrap_or(0);
- Ok(Some(Utc.timestamp_opt(timestamp, 0).unwrap()))
+ Ok(Some(
+ Utc.timestamp_opt(timestamp, 0).unwrap().fixed_offset(),
+ ))
}
pub fn get_tags(&mut self) -> anyhow::Result<IndexMap<String, String>> {
@@ -514,7 +519,10 @@ impl crate::repository::vcs::VcsDriverInterface for GitDriver {
GitDriver::get_file_content(self, file, identifier)
}
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
GitDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/github_driver.rs b/crates/shirabe/src/repository/vcs/github_driver.rs
index 45ba7b7..aa1e135 100644
--- a/crates/shirabe/src/repository/vcs/github_driver.rs
+++ b/crates/shirabe/src/repository/vcs/github_driver.rs
@@ -2,13 +2,14 @@
use crate::io::io_interface;
use anyhow::Result;
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
- InvalidArgumentException, PhpMixed, RuntimeException, array_diff, array_key_exists, array_map,
- array_search_mixed, base64_decode, basename, count, empty, explode, extension_loaded, in_array,
- parse_url_all, sprintf, strpos, strtolower, substr, trim, urlencode,
+ DATE_RFC3339, InvalidArgumentException, PhpMixed, RuntimeException, array_diff,
+ array_key_exists, array_map, array_search_mixed, base64_decode, basename, count, empty,
+ explode, extension_loaded, in_array, parse_url_all, sprintf, strpos, strtolower, substr, trim,
+ urlencode,
};
use crate::cache::Cache;
@@ -821,7 +822,7 @@ impl GitHubDriver {
Ok(Some(content))
}
- pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<Utc>>> {
+ pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<FixedOffset>>> {
if let Some(ref mut git_driver) = self.git_driver {
return git_driver.get_change_date(identifier);
}
@@ -851,11 +852,8 @@ impl GitHubDriver {
_ => String::new(),
};
- Ok(Some(
- DateTime::parse_from_rfc3339(&date_str)
- .map(|dt| dt.with_timezone(&Utc))
- .unwrap_or_else(|_| Utc::now()),
- ))
+ let date: DateTime<FixedOffset> = shirabe_php_shim::date_create(&date_str)?;
+ Ok(Some(date))
}
pub fn get_tags(&mut self) -> Result<IndexMap<String, String>> {
@@ -1364,7 +1362,10 @@ impl crate::repository::vcs::VcsDriverInterface for GitHubDriver {
GitHubDriver::get_file_content(self, file, identifier)
}
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
GitHubDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/gitlab_driver.rs b/crates/shirabe/src/repository/vcs/gitlab_driver.rs
index 97dcc30..8ab30d4 100644
--- a/crates/shirabe/src/repository/vcs/gitlab_driver.rs
+++ b/crates/shirabe/src/repository/vcs/gitlab_driver.rs
@@ -2,13 +2,13 @@
use crate::io::io_interface;
use anyhow::Result;
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
- InvalidArgumentException, LogicException, PhpMixed, RuntimeException, array_search_mixed,
- array_shift, ctype_alnum, empty, explode, extension_loaded, implode, in_array, is_array,
- is_string, ord, sprintf, strpos, strtolower,
+ DATE_RFC3339, InvalidArgumentException, LogicException, PhpMixed, RuntimeException,
+ array_search_mixed, array_shift, ctype_alnum, empty, explode, extension_loaded, implode,
+ in_array, is_array, is_string, ord, sprintf, strpos, strtolower,
};
use crate::cache::Cache;
@@ -458,7 +458,7 @@ impl GitLabDriver {
Ok(content)
}
- pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<Utc>>> {
+ pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<FixedOffset>>> {
if let Some(ref mut git_driver) = self.git_driver {
return git_driver.get_change_date(identifier);
}
@@ -468,11 +468,8 @@ impl GitLabDriver {
.get("committed_date")
.and_then(|v| v.as_string())
.unwrap_or("");
- return Ok(Some(
- DateTime::parse_from_rfc3339(committed_date)
- .map(|dt| dt.with_timezone(&Utc))
- .unwrap_or_else(|_| Utc::now()),
- ));
+ let date: DateTime<FixedOffset> = shirabe_php_shim::date_create(committed_date)?;
+ return Ok(Some(date));
}
Ok(None)
@@ -1153,7 +1150,10 @@ impl crate::repository::vcs::VcsDriverInterface for GitLabDriver {
GitLabDriver::get_file_content(self, file, identifier)
}
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
GitLabDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/hg_driver.rs b/crates/shirabe/src/repository/vcs/hg_driver.rs
index c35a574..f637437 100644
--- a/crates/shirabe/src/repository/vcs/hg_driver.rs
+++ b/crates/shirabe/src/repository/vcs/hg_driver.rs
@@ -10,10 +10,10 @@ use crate::repository::vcs::VcsDriverBase;
use crate::util::Filesystem;
use crate::util::Hg as HgUtils;
use crate::util::Url;
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset, Utc};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
-use shirabe_php_shim::{PhpMixed, RuntimeException, dirname, is_dir, is_writable};
+use shirabe_php_shim::{DATE_RFC3339, PhpMixed, RuntimeException, dirname, is_dir, is_writable};
#[derive(Debug)]
pub struct HgDriver {
@@ -197,7 +197,10 @@ impl HgDriver {
Ok(Some(content))
}
- pub fn get_change_date(&self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ pub fn get_change_date(
+ &self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
if identifier.starts_with('-') {
return Err(RuntimeException {
message: format!(
@@ -225,8 +228,8 @@ impl HgDriver {
Some(self.repo_dir.clone()),
);
- let date = DateTime::parse_from_rfc3339(output.trim()).map(|d| d.with_timezone(&Utc))?;
- Ok(Some(date))
+ let date: DateTime<Utc> = shirabe_php_shim::date_create(output.trim())?;
+ Ok(Some(date.fixed_offset()))
}
pub fn get_tags(&mut self) -> anyhow::Result<IndexMap<String, String>> {
@@ -410,7 +413,10 @@ impl crate::repository::vcs::VcsDriverInterface for HgDriver {
HgDriver::get_file_content(self, file, identifier)
}
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
HgDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/perforce_driver.rs b/crates/shirabe/src/repository/vcs/perforce_driver.rs
index 0fe0f6f..65f2856 100644
--- a/crates/shirabe/src/repository/vcs/perforce_driver.rs
+++ b/crates/shirabe/src/repository/vcs/perforce_driver.rs
@@ -113,7 +113,7 @@ impl PerforceDriver {
pub fn get_change_date(
&self,
_identifier: &str,
- ) -> anyhow::Result<Option<chrono::DateTime<chrono::Utc>>> {
+ ) -> anyhow::Result<Option<chrono::DateTime<chrono::FixedOffset>>> {
Ok(None)
}
@@ -248,7 +248,7 @@ impl crate::repository::vcs::VcsDriverInterface for PerforceDriver {
fn get_change_date(
&mut self,
identifier: &str,
- ) -> anyhow::Result<Option<chrono::DateTime<chrono::Utc>>> {
+ ) -> anyhow::Result<Option<chrono::DateTime<chrono::FixedOffset>>> {
PerforceDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/svn_driver.rs b/crates/shirabe/src/repository/vcs/svn_driver.rs
index ef8787a..f4e2bba 100644
--- a/crates/shirabe/src/repository/vcs/svn_driver.rs
+++ b/crates/shirabe/src/repository/vcs/svn_driver.rs
@@ -1,7 +1,7 @@
//! ref: composer/src/Composer/Repository/Vcs/SvnDriver.php
use anyhow::Result;
-use chrono::{DateTime, TimeZone, Utc};
+use chrono::{DateTime, FixedOffset, Utc};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
@@ -296,7 +296,7 @@ impl SvnDriver {
Ok(Some(output))
}
- pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<Utc>>> {
+ pub fn get_change_date(&mut self, identifier: &str) -> Result<Option<DateTime<FixedOffset>>> {
let identifier = format!("/{}/", trim(identifier, Some("/")));
let (path, rev) = if let Ok(Some(m)) =
@@ -329,10 +329,9 @@ impl SvnDriver {
.unwrap_or(false)
{
let date_str = m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default();
- // PHP: new \DateTimeImmutable($match[1], new \DateTimeZone('UTC'))
- return Ok(Utc
- .datetime_from_str(date_str.trim(), "%Y-%m-%d %H:%M:%S %z")
- .ok());
+ return Ok(shirabe_php_shim::date_create::<Utc>(date_str.trim())
+ .ok()
+ .map(|d| d.fixed_offset()));
}
}
}
@@ -638,7 +637,10 @@ impl crate::repository::vcs::VcsDriverInterface for SvnDriver {
SvnDriver::get_file_content(self, file, identifier)
}
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>> {
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>> {
SvnDriver::get_change_date(self, identifier)
}
diff --git a/crates/shirabe/src/repository/vcs/vcs_driver.rs b/crates/shirabe/src/repository/vcs/vcs_driver.rs
index 94c3ff8..dc88387 100644
--- a/crates/shirabe/src/repository/vcs/vcs_driver.rs
+++ b/crates/shirabe/src/repository/vcs/vcs_driver.rs
@@ -1,9 +1,9 @@
//! ref: composer/src/Composer/Repository/Vcs/VcsDriver.php
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::Preg;
-use shirabe_php_shim::{PhpMixed, extension_loaded};
+use shirabe_php_shim::{DATE_RFC3339, PhpMixed, extension_loaded};
use crate::cache::Cache;
use crate::config::Config;
@@ -94,7 +94,7 @@ impl VcsDriverBase {
pub fn finish_base_composer_information(
identifier: &str,
composer_file_content: Option<String>,
- change_date: impl FnOnce() -> anyhow::Result<Option<DateTime<Utc>>>,
+ change_date: impl FnOnce() -> anyhow::Result<Option<DateTime<FixedOffset>>>,
) -> anyhow::Result<Option<IndexMap<String, PhpMixed>>> {
let content = match composer_file_content {
None => return Ok(None),
@@ -123,7 +123,10 @@ impl VcsDriverBase {
.map_or(true, |v| v.as_string().map_or(true, |s| s.is_empty()))
{
if let Some(d) = change_date()? {
- composer.insert("time".to_string(), PhpMixed::String(d.to_rfc3339()));
+ composer.insert(
+ "time".to_string(),
+ PhpMixed::String(d.format(DATE_RFC3339).to_string()),
+ );
}
}
@@ -284,7 +287,7 @@ pub trait VcsDriver: VcsDriverInterface {
if let Some(change_date) = self.get_change_date(identifier)? {
composer.insert(
"time".to_string(),
- PhpMixed::String(change_date.to_rfc3339()),
+ PhpMixed::String(change_date.format(DATE_RFC3339).to_string()),
);
}
}
diff --git a/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs b/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
index e845300..5d2be04 100644
--- a/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
+++ b/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
@@ -2,7 +2,7 @@
use crate::config::Config;
use crate::io::IOInterface;
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, FixedOffset};
use indexmap::IndexMap;
use shirabe_php_shim::PhpMixed;
use std::cell::RefCell;
@@ -18,7 +18,10 @@ pub trait VcsDriverInterface: std::fmt::Debug {
fn get_file_content(&mut self, file: &str, identifier: &str) -> anyhow::Result<Option<String>>;
- fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>>;
+ fn get_change_date(
+ &mut self,
+ identifier: &str,
+ ) -> anyhow::Result<Option<DateTime<FixedOffset>>>;
fn get_root_identifier(&mut self) -> anyhow::Result<String>;