aboutsummaryrefslogtreecommitdiffstats
path: root/src/git.rs
blob: 423a01fefb282bb221f0cadcf7a49a4a6e67075f (plain)
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
use std::path::Path;


pub fn mirror<P: AsRef<Path>>(
    url: &str,
    path: P,
) -> Result<(), Box<dyn std::error::Error>> {
    let repo = git2::Repository::init_bare(path)?;

    let remote_name = "origin";

    let mut remote = repo.remote_with_fetch(
        remote_name,
        url,
        "+refs/*:refs/*",
    )?;

    let mut config = repo.config()?;
    config.set_bool(
        &format!("remote.{}.mirror", remote_name),
        true,
    )?;

    let refspecs: [&str; 0] = [];
    remote.fetch(&refspecs, None, None)?;

    Ok(())
}