From 752fd7c353957169dc1041fceb11e617ff70a4f2 Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
Date: Fri, 12 Jan 2024 23:00:34 -0800
Subject: [PATCH] wip

---
 src/main.rs | 48 +++++++++++++++++++++++++++++++++---------------
 1 file changed, 33 insertions(+), 15 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 5cb0c58..66132d1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -816,7 +816,7 @@ struct WriteCommitConfig{
 	write_scripts:bool,
 }
 
-async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,DecompiledContext)>,tokio::task::JoinError>,repo:&git2::Repository)->AResult<()>{
+async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,DecompiledContext)>,tokio::task::JoinError>,repo:&gix::Repository)->AResult<()>{
 	let (asset_version,context)=b??;
 	println!("writing files for version {}",asset_version.assetVersionNumber);
 
@@ -847,12 +847,14 @@ async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,De
 		write_scripts:config.write_scripts,
 	},context).await?;
 
-	let date=asset_version.created;
-	//let sig=repo.signature()?; //this pulls default name and email
-	let sig=git2::Signature::new(config.git_committer_name.as_str(),config.git_committer_email.as_str(),&git2::Time::new(date.timestamp(),0)).unwrap();
+	let sig=gix::actor::Signature{
+		name:config.git_committer_name.into(),
+		email:config.git_committer_email.into(),
+		time:gix::date::Time::new(asset_version.created.timestamp(),0),
+	};
 	let tree_id={
 		let mut tree_index = repo.index()?;
-		tree_index.add_all([config.output_folder.as_path()].iter(),git2::IndexAddOption::DEFAULT,None)?;
+		tree_index.add_all([config.output_folder.as_path()].iter(),gix::IndexAddOption::DEFAULT,None)?;
 		if tree_index.len()==0{
 			println!("tree_index.len()==0");
 			return Ok(());
@@ -868,28 +870,30 @@ async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,De
 
 	match repo.head(){
 		Ok(reference)=>{
-			let commit=reference.peel_to_commit()?;
+			let commit=reference.peel_to_commit_in_place()?;
 
 			//test tree against commit tree to see if there is any changes
 			let commit_tree=commit.tree()?;
-			let diff=repo.diff_tree_to_tree(Some(&commit_tree),Some(&tree),None)?;
+			let diff=repo.diff_resource_cache(Some(&commit_tree),Some(&tree),None)?;
 			if diff.deltas().count()==0{
 				println!("no changes");
 				return Ok(());
 			}
 
-			parents.push(commit);
+			parents.push(commit.id());
 		},
 		Err(e)=>println!("repo head error {:?}",e),
 	};
 
-	repo.commit(
-		Some("HEAD"),//update_ref
-		&sig,//author
+
+
+	repo.commit_as(
 		&sig,//commiter
-		&format!("v{}", asset_version.assetVersionNumber),//message
+		&sig,//author
+		"HEAD",
+		&format!("v{}",asset_version.assetVersionNumber),//message
 		&tree,//tree (basically files)
-		parents.iter().collect::<Vec<&git2::Commit<'_>>>().as_slice(),//parents
+		parents,//parents
 	)?;
 
 	//commit
@@ -913,7 +917,14 @@ async fn decompile_history_into_git(config:DecompileHistoryConfig)->AResult<()>{
 	versions_path.push("versions.json");
 	let asset_list:Vec<AssetVersion>=serde_json::from_reader(std::fs::File::open(versions_path)?)?;
 
-	let repo=git2::Repository::init(config.output_folder.clone())?;
+	let repo=gix::discover(gix::create::into(
+		config.output_folder.as_path(),
+		gix::create::Kind::Bare,
+		gix::create::Options{
+			destination_must_be_empty:true,
+			fs_capabilities:None
+		}
+	)?)?;
 
 	//decompile all versions
 	futures::stream::iter(asset_list.into_iter()
@@ -962,7 +973,14 @@ async fn download_and_decompile_history_into_git(config:DownloadAndDecompileHist
 	//poll paged list of all asset versions
 	let asset_list=get_version_history(&client,&config.cookie.as_str(),config.asset_id).await?;
 
-	let repo=git2::Repository::init(config.output_folder.clone())?;
+	let repo=gix::discover(gix::create::into(
+		config.output_folder.as_path(),
+		gix::create::Kind::Bare,
+		gix::create::Options{
+			destination_must_be_empty:true,
+			fs_capabilities:None
+		}
+	)?)?;
 
 	//download all versions
 	let asset_id_string=config.asset_id.to_string();