safer handling of Local DateTime objects
This commit is contained in:
parent
4dc14db293
commit
ed0c277c4b
1 changed files with 13 additions and 5 deletions
|
@ -7,9 +7,17 @@ pub(crate) mod repo;
|
|||
pub(crate) mod tree;
|
||||
|
||||
use chrono::offset::{Local, TimeZone};
|
||||
use chrono::DateTime;
|
||||
use chrono::{DateTime, NaiveDateTime};
|
||||
use git2::{Commit, Signature};
|
||||
|
||||
fn min_date() -> DateTime<Local> {
|
||||
Local.from_utc_datetime(&NaiveDateTime::MIN)
|
||||
}
|
||||
|
||||
fn timestamp_with_fallback(timestamp: i64) -> DateTime<Local> {
|
||||
Local.timestamp_opt(timestamp, 0).earliest().unwrap_or(min_date())
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct SocialSignature {
|
||||
pub when: DateTime<Local>,
|
||||
|
@ -20,7 +28,7 @@ pub struct SocialSignature {
|
|||
impl Default for SocialSignature {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
when: Local.timestamp(0, 0),
|
||||
when: min_date(),
|
||||
name: "".to_string(),
|
||||
email: "".to_string(),
|
||||
}
|
||||
|
@ -53,7 +61,7 @@ impl Default for SocialCommit {
|
|||
fn default() -> Self {
|
||||
Self {
|
||||
id: "".to_string(),
|
||||
time: Local.timestamp(0, 0),
|
||||
time: min_date(),
|
||||
message: "".to_string(),
|
||||
author: SocialSignature::default(),
|
||||
committer: SocialSignature::default(),
|
||||
|
@ -68,7 +76,7 @@ impl From<Signature<'_>> for SocialSignature {
|
|||
Self {
|
||||
name: s.name().unwrap_or("").to_owned(),
|
||||
email: s.email().unwrap_or("").to_owned(),
|
||||
when: Local.timestamp(s.when().seconds(), 0),
|
||||
when: timestamp_with_fallback(s.when().seconds()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,7 +85,7 @@ impl From<Commit<'_>> for SocialCommit {
|
|||
fn from(c: Commit<'_>) -> Self {
|
||||
Self {
|
||||
id: format!("{}", c.id()),
|
||||
time: Local.timestamp(c.time().seconds(), 0),
|
||||
time: timestamp_with_fallback(c.time().seconds()),
|
||||
message: c.message().unwrap_or("").to_owned(),
|
||||
author: c.author().into(),
|
||||
committer: c.committer().into(),
|
||||
|
|
Loading…
Add table
Reference in a new issue