debian_analyzer/
salsa.rs

1//! Salsa location guessing utilities
2use std::collections::HashMap;
3use url::Url;
4
5lazy_static::lazy_static! {
6static ref MAINTAINER_EMAIL_MAP: HashMap<&'static str, &'static str> = maplit::hashmap! {
7    "pkg-javascript-devel@lists.alioth.debian.org" => "js-team",
8    "python-modules-team@lists.alioth.debian.org" => "python-team/modules",
9    "python-apps-team@lists.alioth.debian.org" => "python-team/applications",
10    "debian-science-maintainers@lists.alioth.debian.org" => "science-team",
11    "pkg-perl-maintainers@lists.alioth.debian.org" =>
12        "perl-team/modules/packages",
13    "pkg-java-maintainers@lists.alioth.debian.org" => "java-team",
14    "pkg-ruby-extras-maintainers@lists.alioth.debian.org" => "ruby-team",
15    "pkg-clamav-devel@lists.alioth.debian.org" => "clamav-team",
16    "pkg-go-maintainers@lists.alioth.debian.org" => "go-team/packages",
17    "pkg-games-devel@lists.alioth.debian.org" => "games-team",
18    "pkg-telepathy-maintainers@lists.alioth.debian.org" => "telepathy-team",
19    "debian-fonts@lists.debian.org" => "fonts-team",
20    "pkg-gnustep-maintainers@lists.alioth.debian.org" => "gnustep-team",
21    "pkg-gnome-maintainers@lists.alioth.debian.org" => "gnome-team",
22    "pkg-multimedia-maintainers@lists.alioth.debian.org" => "multimedia-team",
23    "debian-ocaml-maint@lists.debian.org" => "ocaml-team",
24    "pkg-php-pear@lists.alioth.debian.org" => "php-team/pear",
25    "pkg-mpd-maintainers@lists.alioth.debian.org" => "mpd-team",
26    "pkg-cli-apps-team@lists.alioth.debian.org" => "dotnet-team",
27    "pkg-mono-group@lists.alioth.debian.org" => "dotnet-team",
28    "team+python@tracker.debian.org" => "python-team/packages",
29};
30}
31
32/// Guess the repository URL for a package hosted on Salsa.
33///
34/// # Arguments:
35/// * `package`: Package name
36/// * `maintainer_email`: The maintainer's email address (e.g. team list address)
37///
38/// # Returns:
39/// A guessed repository URL
40pub fn guess_repository_url(package: &str, maintainer_email: &str) -> Option<Url> {
41    let team_name = if maintainer_email.ends_with("@debian.org") {
42        maintainer_email.split('@').next().unwrap()
43    } else if let Some(team_name) = MAINTAINER_EMAIL_MAP.get(maintainer_email) {
44        team_name
45    } else {
46        return None;
47    };
48
49    format!("https://salsa.debian.org/{}/{}.git", team_name, package)
50        .parse()
51        .ok()
52}
53
54#[cfg(test)]
55mod guess_repository_url_tests {
56    use super::*;
57
58    #[test]
59    fn test_unknown() {
60        assert_eq!(
61            None,
62            guess_repository_url("blah", "unknown-team@lists.alioth.debian.org")
63        );
64    }
65
66    #[test]
67    fn test_individual() {
68        assert_eq!(
69            Some(
70                "https://salsa.debian.org/jelmer/lintian-brush.git"
71                    .parse()
72                    .unwrap()
73            ),
74            guess_repository_url("lintian-brush", "jelmer@debian.org")
75        );
76    }
77
78    #[test]
79    fn test_team() {
80        assert_eq!(
81            Some(
82                "https://salsa.debian.org/js-team/node-blah.git"
83                    .parse()
84                    .unwrap()
85            ),
86            guess_repository_url("node-blah", "pkg-javascript-devel@lists.alioth.debian.org")
87        );
88    }
89}