ostree/rust-bindings/rust/sample/src/main.rs

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();
}
}
}