summaryrefslogtreecommitdiff
path: root/fuzz/atom/vercmp/gencorpus.rs
blob: 6d5eeefd8634aba267d4a044e448e45155d953b9 (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use std::{
    env,
    error::Error,
    fs::{self, OpenOptions},
    io::Write,
    path::PathBuf,
};

use gentoo_utils::ebuild::repo::Repo;

fn main() -> Result<(), Box<dyn Error>> {
    let corpus_dir = PathBuf::from(
        env::args()
            .nth(1)
            .expect("expected corpus directory as first argument"),
    );

    fs::create_dir_all(&corpus_dir)?;

    let repo = Repo::new("/var/db/repos/gentoo");
    let mut versions = Vec::new();

    for category in repo.categories()? {
        for ebuild in category?.ebuilds()? {
            let version = ebuild?.version().clone();

            versions.push(version);
        }
    }

    for (i, version) in versions.iter().enumerate() {
        let path = corpus_dir.as_path().join(i.to_string());
        let mut file = OpenOptions::new()
            .write(true)
            .truncate(true)
            .create(true)
            .open(path)?;

        write!(file, "{version}")?;
    }

    Ok(())
}