1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
//! anni-fetch //! //! `anni-fetch` is interact with git server and fetch pack files from it. //! It implemented git v2 protocol and PACK file uncompression, which is used in git fetch procedure. //! //! # Example //! //! ```rust //! use anni_fetch::client::Message::PackData; //! use anni_fetch::{Pack, Client}; //! use std::io::Cursor; //! use anni_fetch::client::RequestBuilder; //! //! fn main() { //! let client = Client::new("https://github.com/project-anni/repo.git"); //! let iter = client.request( //! RequestBuilder::new(true) //! .command("fetch") //! .argument("thin-pack") //! .argument("ofs-delta") //! .argument("deepen 1") //! .want(&client.ls_ref("HEAD").expect("failed to get sha1 of HEAD")) //! .argument("done") //! .build() //! ).unwrap(); //! let mut pack = Vec::new(); //! for msg in iter { //! match msg { //! PackData(mut d) => pack.append(&mut d), //! _ => {} //! } //! } //! let mut cursor = Cursor::new(pack); //! Pack::from_reader(&mut cursor).expect("invalid pack file"); //! } //! ``` //! //! You can use `match` to filter the type of message you want. //! For example, you can just receive `Message::PackData` and //! write the content to a `pak` file. pub mod io; pub mod pack; pub mod client; pub use client::Client; pub use pack::Pack;