diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 74 | 
1 files changed, 47 insertions, 27 deletions
| diff --git a/src/main.rs b/src/main.rs index 4e4d580..87b2320 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,6 +23,8 @@ use filetime;  // use futures::{self, executor, future};  use getopts::Options;  use parse_size::parse_size; +use r2d2_sqlite::SqliteConnectionManager; +use rayon::iter::{IntoParallelRefIterator, ParallelIterator};  use rusqlite;  use reflectub::{database, git, github}; @@ -112,8 +114,12 @@ fn run() -> anyhow::Result<()> {      let repos = github::fetch_repos(username)?; -    let mut db = database::Db::connect(&database_file) -        .context("unable to connect to database")?; +    let db = //Arc::new( +        // Mutex::new( +            database::Db::connect(&database_file) +                .context("unable to connect to database")?; +        // ) +    // );      db.create()          .context("unable to create database")?; @@ -121,31 +127,46 @@ fn run() -> anyhow::Result<()> {      // let mut joins = futures::stream::FuturesUnordered::new();      // let mut joins = Vec::with_capacity(repos.len()); -    let mut i = 0; -    for repo in repos { -        // let db = db.clone(); -        let mirror_root = mirror_root.clone(); -        let base_cgitrc = base_cgitrc.clone(); - -        // let join = tokio::runtime::Handle::current().spawn(async move { -        // let mut db = db.lock()?; - -        process_repo( -            &repo, -            &mut db, -            &mirror_root, -            base_cgitrc, -            max_repo_size_bytes, -        )?; -        // }); +    // let mut i = 0; +    // for repo in repos { +    //     // let db = db.clone(); +    //     let mirror_root = mirror_root.clone(); +    //     let base_cgitrc = base_cgitrc.clone(); +    // +    //     // let join = tokio::runtime::Handle::current().spawn(async move { +    //     // let mut db = db.lock()?; +    // +    //     process_repo( +    //         &repo, +    //         &mut db, +    //         &mirror_root, +    //         base_cgitrc, +    //         max_repo_size_bytes, +    //     )?; +    //     // }); +    // +    //     // joins.push(join); +    // +    //     if i == 2 { +    //         break; +    //     } +    //     i += 1; +    // } -        // joins.push(join); +    let _results: anyhow::Result<()> = repos[..2].par_iter() +        .map(|repo| { +            dbg!("Thread", std::thread::current().id()); -        if i == 5 { -            break; -        } -        i += 1; -    } +            process_repo( +                &repo, +                &db, +                &mirror_root, +                base_cgitrc.clone(), // TODO: Can we avoid cloning +                max_repo_size_bytes, +            ) +        }) +        .collect(); +    // TODO: Return errors      // executor::block_on(future::join_all(joins));      // let mut joins = tokio_stream::iter(&mut joins); @@ -172,12 +193,11 @@ fn run() -> anyhow::Result<()> {  /// Mirror or update `repo`.  fn process_repo(      repo: &github::Repo, -    db: &mut database::Db, +    db: &database::Db,      mirror_root: &str,      base_cgitrc: Option<PathBuf>,      max_repo_size_bytes: Option<u64>,  ) -> anyhow::Result<()> { -    return anyhow::bail!("test");      if let Some(max_repo_size_bytes) = max_repo_size_bytes {          if is_repo_oversize(repo.size, max_repo_size_bytes) {              return Ok(()); | 
