Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
bbba21392b
|
|||
|
dc707f48ae
|
|||
|
e9ff73bbfb
|
|||
|
618cb34523
|
|||
|
facb8dfc8c
|
|||
|
1f9aa708b0
|
|||
|
9541e69ed1
|
1414
Cargo.lock
generated
1414
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@ edition = "2021"
|
|||||||
anyhow = "1.0.75"
|
anyhow = "1.0.75"
|
||||||
clap = { version = "4.4.2", features = ["derive"] }
|
clap = { version = "4.4.2", features = ["derive"] }
|
||||||
futures = "0.3.30"
|
futures = "0.3.30"
|
||||||
git2 = "0.20.0"
|
gix = "0.72.1"
|
||||||
lazy-regex = "3.1.0"
|
lazy-regex = "3.1.0"
|
||||||
rbx_asset = { path = "rbx_asset" }
|
rbx_asset = { path = "rbx_asset" }
|
||||||
rbx_binary = "1.0.0"
|
rbx_binary = "1.0.0"
|
||||||
|
|||||||
65
src/main.rs
65
src/main.rs
@@ -1463,7 +1463,7 @@ struct WriteCommitConfig{
|
|||||||
write_scripts:bool,
|
write_scripts:bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,rox_compiler::DecompiledContext)>,tokio::task::JoinError>,repo:&git2::Repository)->AResult<()>{
|
async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,rox_compiler::DecompiledContext)>,tokio::task::JoinError>,repo:&gix::Repository)->AResult<()>{
|
||||||
let (asset_version,context)=b??;
|
let (asset_version,context)=b??;
|
||||||
println!("writing files for version {}",asset_version.assetVersionNumber);
|
println!("writing files for version {}",asset_version.assetVersionNumber);
|
||||||
|
|
||||||
@@ -1494,12 +1494,17 @@ async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,ro
|
|||||||
write_scripts:config.write_scripts,
|
write_scripts:config.write_scripts,
|
||||||
}).await?;
|
}).await?;
|
||||||
|
|
||||||
let date=asset_version.created;
|
let time=gix::date::Time::new(asset_version.created.timestamp(),0);
|
||||||
//let sig=repo.signature()?; //this pulls default name and email
|
let sig=gix::actor::Signature{
|
||||||
let sig=git2::Signature::new(config.git_committer_name.as_str(),config.git_committer_email.as_str(),&git2::Time::new(date.timestamp(),0)).unwrap();
|
name:config.git_committer_name.into(),
|
||||||
|
email:config.git_committer_email.into(),
|
||||||
|
time,
|
||||||
|
};
|
||||||
let tree_id={
|
let tree_id={
|
||||||
let mut tree_index = repo.index()?;
|
let mut tree_index = repo.index()?;
|
||||||
match tree_index.add_all(std::iter::once("*"),git2::IndexAddOption::DEFAULT,None){
|
tree.index()?.
|
||||||
|
tree.peel_to_entry(path);
|
||||||
|
match tree_index.add_all(std::iter::once("*"),gix::IndexAddOption::DEFAULT,None){
|
||||||
Ok(_)=>(),
|
Ok(_)=>(),
|
||||||
Err(e)=>println!("tree_index.add_all error: {}",e),
|
Err(e)=>println!("tree_index.add_all error: {}",e),
|
||||||
}
|
}
|
||||||
@@ -1510,34 +1515,38 @@ async fn write_commit(config:WriteCommitConfig,b:Result<AResult<(AssetVersion,ro
|
|||||||
tree_index.write()?;
|
tree_index.write()?;
|
||||||
tree_index.write_tree()?
|
tree_index.write_tree()?
|
||||||
};
|
};
|
||||||
let tree=repo.find_tree(tree_id)?;
|
let tree=repo.tree(tree_id)?;
|
||||||
|
|
||||||
let mut parents=Vec::new();
|
let mut parents=Vec::new();
|
||||||
|
|
||||||
match repo.head(){
|
match repo.head_commit(){
|
||||||
Ok(reference)=>{
|
Ok(commit)=>{
|
||||||
let commit=reference.peel_to_commit()?;
|
|
||||||
|
|
||||||
//test tree against commit tree to see if there is any changes
|
//test tree against commit tree to see if there is any changes
|
||||||
let commit_tree=commit.tree()?;
|
let commit_tree=commit.tree()?;
|
||||||
let diff=repo.diff_tree_to_tree(Some(&commit_tree),Some(&tree),None)?;
|
let diff=repo.diff_tree_to_tree(Some(&commit_tree),Some(&tree),None)?;
|
||||||
if diff.get_delta(0).is_none(){
|
if diff.is_empty(){
|
||||||
println!("no changes");
|
println!("no changes");
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
parents.push(commit);
|
parents.push(commit.id());
|
||||||
},
|
},
|
||||||
Err(e)=>println!("repo head error {:?}",e),
|
//If the repo head is not found, great, continue and make the first commit
|
||||||
|
Err(gix::reference::head_commit::Error::Head(gix::reference::find::existing::Error::NotFound{..}))=>(),
|
||||||
|
//for other errors
|
||||||
|
Err(e)=>Err(e)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
repo.commit(
|
let mut timebuf=gix::date::parse::TimeBuf::default();
|
||||||
Some("HEAD"),//update_ref
|
let sig_ref=sig.to_ref(&mut timebuf);
|
||||||
&sig,//author
|
|
||||||
&sig,//commiter
|
repo.commit_as(
|
||||||
&format!("v{}", asset_version.assetVersionNumber),//message
|
sig_ref,//commiter
|
||||||
|
sig_ref,//author
|
||||||
|
"HEAD",
|
||||||
|
&format!("v{}",asset_version.assetVersionNumber),//message
|
||||||
&tree,//tree (basically files)
|
&tree,//tree (basically files)
|
||||||
parents.iter().collect::<Vec<&git2::Commit<'_>>>().as_slice(),//parents
|
parents,//parents
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
//commit
|
//commit
|
||||||
@@ -1561,7 +1570,14 @@ async fn decompile_history_into_git(config:DecompileHistoryConfig)->AResult<()>{
|
|||||||
versions_path.push("versions.json");
|
versions_path.push("versions.json");
|
||||||
let asset_list:Vec<AssetVersion>=serde_json::from_reader(std::fs::File::open(versions_path)?)?;
|
let asset_list:Vec<AssetVersion>=serde_json::from_reader(std::fs::File::open(versions_path)?)?;
|
||||||
|
|
||||||
let repo=git2::Repository::init(config.output_folder.as_path())?;
|
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
|
//decompile all versions
|
||||||
futures::stream::iter(asset_list.into_iter()
|
futures::stream::iter(asset_list.into_iter()
|
||||||
@@ -1611,7 +1627,14 @@ async fn download_and_decompile_history_into_git(config:DownloadAndDecompileHist
|
|||||||
//poll paged list of all asset versions
|
//poll paged list of all asset versions
|
||||||
let asset_list=get_version_history(&context,config.asset_id).await?;
|
let asset_list=get_version_history(&context,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
|
//download all versions
|
||||||
let asset_id=config.asset_id;
|
let asset_id=config.asset_id;
|
||||||
|
|||||||
Reference in New Issue
Block a user