dev_scripts/sync/
mod.rs

1//! Syncing of source and binary repositories.
2
3use std::{
4    collections::HashSet,
5    fs::{DirEntry, read_dir},
6    path::Path,
7};
8
9use anyhow::Result;
10use clap::ValueEnum;
11use strum::{Display, EnumIter};
12
13pub mod mirror;
14pub mod pkgsrc;
15
16/// All Arch Linux package repositories we may want to test.
17#[derive(Clone, Debug, Display, EnumIter, PartialEq, ValueEnum)]
18pub enum PackageRepositories {
19    /// The [core] repository.
20    ///
21    /// [core]: https://wiki.archlinux.org/title/Official_repositories#core
22    #[strum(to_string = "core")]
23    Core,
24
25    /// The [extra] repository.
26    ///
27    /// [extra]: https://wiki.archlinux.org/title/Official_repositories#extra
28    #[strum(to_string = "extra")]
29    Extra,
30
31    /// The [multilib] repository.
32    ///
33    /// [multilib]: https://wiki.archlinux.org/title/Official_repositories#multilib
34    #[strum(to_string = "multilib")]
35    Multilib,
36}
37
38/// A small helper function that returns a list of unique file names in a directory.
39pub fn filenames_in_dir(path: &Path) -> Result<HashSet<String>> {
40    let entries = read_dir(path)?;
41    let entries: Vec<DirEntry> = entries.collect::<Result<Vec<DirEntry>, std::io::Error>>()?;
42    let files: HashSet<String> = entries
43        .iter()
44        .map(|entry| entry.file_name().to_string_lossy().to_string())
45        .collect();
46
47    Ok(files)
48}