44 lines
1.2 KiB
Rust
44 lines
1.2 KiB
Rust
extern crate gio;
|
|
extern crate libostree;
|
|
|
|
use std::io::Write;
|
|
use std::fs::File;
|
|
|
|
use gio::prelude::*;
|
|
use libostree::prelude::*;
|
|
|
|
fn main() {
|
|
let repo = libostree::Repo::new_for_path("../../../repo-bare");
|
|
|
|
repo.open(None).expect("should have opened");
|
|
|
|
let refs = repo.list_refs(None, None).unwrap();
|
|
for (refspec, checksum) in refs {
|
|
println!(" {} = {}", refspec, checksum);
|
|
}
|
|
|
|
let (file, checksum) = repo.read_commit("test", None).unwrap();
|
|
|
|
println!("path: {:?}", file.get_path());
|
|
|
|
println!("sha256: {}", checksum);
|
|
|
|
let objs = repo.traverse_commit(checksum.as_str(), -1, None).unwrap();
|
|
|
|
for obj in objs {
|
|
//let (name, obj_type) = libostree::object_name_deserialize(&obj);
|
|
println!(" {}", obj.name());
|
|
|
|
let (stream, size) = repo.load_object_stream(obj.object_type(), obj.checksum(), None).unwrap();
|
|
println!(" bytes: {}", size);
|
|
|
|
let mut file = File::create(obj.name()).unwrap();
|
|
let mut read = 1;
|
|
let mut buffer = [0 as u8; 4096];
|
|
while read != 0 {
|
|
read = stream.read(buffer.as_mut(), None).unwrap();
|
|
file.write(&buffer[0 .. read]).unwrap();
|
|
}
|
|
}
|
|
}
|