mirror of
https://github.com/shimunn/gitredditor.git
synced 2023-11-17 18:42:43 +01:00
use current time to commit votes
This commit is contained in:
parent
64d1b721ca
commit
e830ac588d
54
src/main.rs
54
src/main.rs
@ -10,7 +10,7 @@ use std::iter::IntoIterator;
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::time::UNIX_EPOCH;
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
mod opts;
|
mod opts;
|
||||||
@ -53,10 +53,11 @@ fn update<'a>(
|
|||||||
let git = Repository::open(&repo)?;
|
let git = Repository::open(&repo)?;
|
||||||
let sig = Signature::now(redditor, email)?;
|
let sig = Signature::now(redditor, email)?;
|
||||||
let mut index = git.index()?;
|
let mut index = git.index()?;
|
||||||
index.read(true)?;
|
index.read(false)?;
|
||||||
let (threshold, threshold_percent) = threshold;
|
let (threshold, threshold_percent) = threshold;
|
||||||
let threshold_percent = threshold_percent as f32;
|
let threshold_percent = threshold_percent as f32;
|
||||||
let mut parent = dbg!(git.find_commit(git.head()?.target().unwrap()))?;
|
let head = || dbg!(git.find_commit(git.head()?.target().unwrap()));
|
||||||
|
let mut parent = head()?;
|
||||||
for comment in current.into_iter() {
|
for comment in current.into_iter() {
|
||||||
let path = comment_path(&comment);
|
let path = comment_path(&comment);
|
||||||
let path_rel = || {
|
let path_rel = || {
|
||||||
@ -64,15 +65,16 @@ fn update<'a>(
|
|||||||
p.set_extension("json");
|
p.set_extension("json");
|
||||||
p
|
p
|
||||||
};
|
};
|
||||||
let before = updated;
|
|
||||||
let mut commit_msg = String::new();
|
let mut commit_msg = String::new();
|
||||||
if (&path).exists() {
|
let mut commit_timestamp: Option<SystemTime> = None;
|
||||||
|
let changed = if (&path).exists() {
|
||||||
let content = read_to_string(&path)?;
|
let content = read_to_string(&path)?;
|
||||||
let old: Comment = serde_json::from_str(&content)?;
|
let old: Comment = serde_json::from_str(&content)?;
|
||||||
let delta = CommentDelta::from(&old, &comment)
|
let delta = CommentDelta::from(&old, &comment)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|d| match d {
|
.filter(|d| match d {
|
||||||
CommentDelta::Votes(change) => {
|
CommentDelta::Votes(change) => {
|
||||||
|
commit_timestamp = Some(SystemTime::now());
|
||||||
change.abs() as u32 > threshold
|
change.abs() as u32 > threshold
|
||||||
&& change.abs() as f32 > old.score as f32 * (threshold_percent / 100.0)
|
&& change.abs() as f32 > old.score as f32 * (threshold_percent / 100.0)
|
||||||
}
|
}
|
||||||
@ -84,6 +86,9 @@ fn update<'a>(
|
|||||||
commit_msg = delta.iter().map(|d| d.to_string()).collect::<Vec<_>>()[..].join("\n");
|
commit_msg = delta.iter().map(|d| d.to_string()).collect::<Vec<_>>()[..].join("\n");
|
||||||
//index.update_all(vec![&path], None)?;
|
//index.update_all(vec![&path], None)?;
|
||||||
updated += 1;
|
updated += 1;
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
create_dir_all((&path).parent().unwrap())?;
|
create_dir_all((&path).parent().unwrap())?;
|
||||||
@ -91,40 +96,22 @@ fn update<'a>(
|
|||||||
//index.add_all(vec![&path], git2::IndexAddOption::DEFAULT, None)?;
|
//index.add_all(vec![&path], git2::IndexAddOption::DEFAULT, None)?;
|
||||||
commit_msg = CommentDelta::New.to_string();
|
commit_msg = CommentDelta::New.to_string();
|
||||||
updated += 1;
|
updated += 1;
|
||||||
}
|
true
|
||||||
if before != updated {
|
};
|
||||||
|
if changed {
|
||||||
index.add_path(&path_rel())?;
|
index.add_path(&path_rel())?;
|
||||||
let tree_id = index.write_tree()?;
|
let tree_id = index.write_tree()?;
|
||||||
let tree = git.find_tree(tree_id)?;
|
let tree = git.find_tree(tree_id)?;
|
||||||
|
|
||||||
let time = {
|
let time = commit_timestamp.unwrap_or(comment.last_update());
|
||||||
let created = UNIX_EPOCH + Duration::from_secs(comment.created as u64);
|
|
||||||
let edited = comment
|
|
||||||
.edited
|
|
||||||
.filter(|e| e > &1)
|
|
||||||
.map(|e| UNIX_EPOCH + Duration::from_secs(e));
|
|
||||||
if let Some(edited) = edited {
|
|
||||||
if edited > created {
|
|
||||||
edited
|
|
||||||
} else {
|
|
||||||
created
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
created
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let sig_backdate = Signature::new(
|
let sig_backdate = Signature::new(sig.name().unwrap(), sig.email().unwrap(), &{
|
||||||
sig.name().unwrap(),
|
let dur = dbg!(time).duration_since(UNIX_EPOCH).unwrap();
|
||||||
sig.email().unwrap(),
|
GitTime::new(dur.as_secs() as i64, dur.subsec_millis() as i32)
|
||||||
&GitTime::new(
|
})?;
|
||||||
dbg!(time).duration_since(UNIX_EPOCH).unwrap().as_secs() as i64,
|
|
||||||
0,
|
|
||||||
),
|
|
||||||
)?;
|
|
||||||
|
|
||||||
println!("Commiting: {}:\n{}", comment.id, commit_msg);
|
println!("Commiting: {}:\n{}", comment.id, commit_msg);
|
||||||
let commit = git.commit(
|
let _commit = git.commit(
|
||||||
Some("HEAD"),
|
Some("HEAD"),
|
||||||
&sig_backdate,
|
&sig_backdate,
|
||||||
&sig,
|
&sig,
|
||||||
@ -132,7 +119,8 @@ fn update<'a>(
|
|||||||
&tree,
|
&tree,
|
||||||
&[&parent],
|
&[&parent],
|
||||||
)?;
|
)?;
|
||||||
parent = git.find_commit(commit)?;
|
parent = head()?; //git.find_commit(commit)?;
|
||||||
|
index.write()?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(updated)
|
Ok(updated)
|
||||||
|
21
src/model.rs
21
src/model.rs
@ -3,7 +3,7 @@ use serde_json::Value;
|
|||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
#[derive(PartialEq, Clone, Serialize, Deserialize, Debug)]
|
#[derive(PartialEq, Clone, Serialize, Deserialize, Debug)]
|
||||||
pub struct Comment {
|
pub struct Comment {
|
||||||
@ -17,6 +17,25 @@ pub struct Comment {
|
|||||||
pub edited: Option<u64>,
|
pub edited: Option<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Comment {
|
||||||
|
pub fn last_update(&self) -> SystemTime {
|
||||||
|
let created = UNIX_EPOCH + Duration::from_secs(self.created as u64);
|
||||||
|
let edited = self
|
||||||
|
.edited
|
||||||
|
.filter(|e| e > &1)
|
||||||
|
.map(|e| UNIX_EPOCH + Duration::from_secs(e));
|
||||||
|
if let Some(edited) = edited {
|
||||||
|
if edited > created {
|
||||||
|
edited
|
||||||
|
} else {
|
||||||
|
created
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
created
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub enum CommentDelta {
|
pub enum CommentDelta {
|
||||||
Votes(i32),
|
Votes(i32),
|
||||||
Content,
|
Content,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user