Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/ofborg
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: a162d41fb238
Choose a base ref
...
head repository: NixOS/ofborg
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: c7d4df7bf259
Choose a head ref
  • 5 commits
  • 1 file changed
  • 1 contributor

Commits on Jan 30, 2019

  1. Copy the full SHA
    d35a5c9 View commit details
  2. Copy the full SHA
    d0bc3b0 View commit details
  3. Support bigger ranges

    grahamc committed Jan 30, 2019
    Copy the full SHA
    99cc0ce View commit details
  4. fixup: clippy

    grahamc committed Jan 30, 2019
    Copy the full SHA
    3f2b351 View commit details
  5. Merge pull request #312 from NixOS/ranges

    Support more ranges
    grahamc authored Jan 30, 2019
    Copy the full SHA
    c7d4df7 View commit details
Showing with 545 additions and 29 deletions.
  1. +545 −29 ofborg/src/tagger.rs
574 changes: 545 additions & 29 deletions ofborg/src/tagger.rs
Original file line number Diff line number Diff line change
@@ -117,24 +117,29 @@ pub struct RebuildTagger {

impl Default for RebuildTagger {
fn default() -> RebuildTagger {
let mut t = RebuildTagger {
RebuildTagger {
possible: vec![
String::from("10.rebuild-linux: 501+"),
String::from("10.rebuild-linux: 101-500"),
String::from("10.rebuild-linux: 11-100"),
String::from("10.rebuild-linux: 1-10"),
String::from("10.rebuild-linux: 0"),
String::from("10.rebuild-darwin: 501+"),
String::from("10.rebuild-darwin: 101-500"),
String::from("10.rebuild-darwin: 11-100"),
String::from("10.rebuild-darwin: 1-10"),
String::from("10.rebuild-darwin: 0"),
String::from("10.rebuild-darwin: 1-10"),
String::from("10.rebuild-darwin: 11-100"),
String::from("10.rebuild-darwin: 101-500"),
String::from("10.rebuild-darwin: 501+"),
String::from("10.rebuild-darwin: 501-1,000"),
String::from("10.rebuild-darwin: 1,001-2,500"),
String::from("10.rebuild-darwin: 2,501-5,000"),
String::from("10.rebuild-darwin: 5,001+"),
String::from("10.rebuild-linux: 0"),
String::from("10.rebuild-linux: 1-10"),
String::from("10.rebuild-linux: 11-100"),
String::from("10.rebuild-linux: 101-500"),
String::from("10.rebuild-linux: 501+"),
String::from("10.rebuild-linux: 501-1,000"),
String::from("10.rebuild-linux: 1,001-2,500"),
String::from("10.rebuild-linux: 2,501-5,000"),
String::from("10.rebuild-linux: 5,001+"),
],
selected: vec![],
};
t.possible.sort();

t
}
}
}

@@ -163,10 +168,20 @@ impl RebuildTagger {
}
}

self.selected = vec![
format!("10.rebuild-linux: {}", self.bucket(counter_linux)),
format!("10.rebuild-darwin: {}", self.bucket(counter_darwin)),
];
self.selected = vec![];
self.selected.extend(
RebuildTagger::bucket(counter_darwin)
.iter()
.map(|bucket| format!("10.rebuild-darwin: {}", bucket))
.collect::<Vec<String>>(),
);

self.selected.extend(
RebuildTagger::bucket(counter_linux)
.iter()
.map(|bucket| format!("10.rebuild-linux: {}", bucket))
.collect::<Vec<String>>(),
);

for tag in &self.selected {
if !self.possible.contains(&tag) {
@@ -183,26 +198,34 @@ impl RebuildTagger {
}

pub fn tags_to_remove(&self) -> Vec<String> {
let mut remove = self.possible.clone();
for tag in &self.selected {
let pos = remove.binary_search(&tag).unwrap();
remove.remove(pos);
let mut remove = vec![];

for tag in self.possible.clone().into_iter() {
if !self.selected.contains(&tag) {
remove.push(tag);
}
}

remove
}

fn bucket(&self, count: u64) -> &str {
if count > 500 {
"501+"
fn bucket(count: u64) -> &'static [&'static str] {
if count > 5000 {
&["501+", "5,001+"]
} else if count > 2500 {
&["501+", "2,501-5,000"]
} else if count > 1000 {
&["501+", "1,001-2,500"]
} else if count > 500 {
&["501+", "501-1,000"]
} else if count > 100 {
"101-500"
&["101-500"]
} else if count > 10 {
"11-100"
&["11-100"]
} else if count > 0 {
"1-10"
&["1-10"]
} else {
"0"
&["0"]
}
}
}
@@ -307,6 +330,499 @@ impl MaintainerPRTagger {
mod tests {
use super::*;

struct PackageArchSrc {
linux: usize,
darwin: usize,
}

impl PackageArchSrc {
pub fn linux(linux: usize) -> PackageArchSrc {
PackageArchSrc { linux, darwin: 0 }
}

pub fn darwin(darwin: usize) -> PackageArchSrc {
PackageArchSrc::linux(0).and_darwin(darwin)
}

pub fn and_linux(mut self, linux: usize) -> PackageArchSrc {
self.linux = linux;
self
}

pub fn and_darwin(mut self, darwin: usize) -> PackageArchSrc {
self.darwin = darwin;
self
}
}

impl From<PackageArchSrc> for Vec<PackageArch> {
fn from(src: PackageArchSrc) -> Vec<PackageArch> {
let darwin: Vec<PackageArch> = (0..src.darwin)
.into_iter()
.map(|_| PackageArch {
package: String::from("bogus :)"),
architecture: String::from("x86_64-darwin"),
})
.collect();
let linux: Vec<PackageArch> = (0..src.linux)
.into_iter()
.map(|_| PackageArch {
package: String::from("bogus :)"),
architecture: String::from("x86_64-linux"),
})
.collect();

let mut combined = darwin;
combined.extend(linux);
combined
}
}

#[test]
pub fn test_packages_changed() {
let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(0).and_darwin(0).into());
assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 0", "10.rebuild-linux: 0",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+",
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(1).into());

assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 0", "10.rebuild-linux: 1-10",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(1).and_darwin(1).into());
assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 1-10", "10.rebuild-linux: 1-10",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(10).and_darwin(10).into());
assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 1-10", "10.rebuild-linux: 1-10",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(11).and_darwin(11).into());
assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 11-100", "10.rebuild-linux: 11-100",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(100).and_darwin(100).into());
assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 11-100", "10.rebuild-linux: 11-100",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(101).and_darwin(101).into());
assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 101-500", "10.rebuild-linux: 101-500",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(500).and_darwin(500).into());
assert_eq!(
tagger.tags_to_add(),
vec!["10.rebuild-darwin: 101-500", "10.rebuild-linux: 101-500",]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(501).and_darwin(501).into());
assert_eq!(
tagger.tags_to_add(),
vec![
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(1000).and_darwin(1000).into());
assert_eq!(
tagger.tags_to_add(),
vec![
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 501-1,000",
]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(1001).and_darwin(1001).into());
assert_eq!(
tagger.tags_to_add(),
vec![
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 1,001-2,500"
]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(2500).and_darwin(2500).into());
assert_eq!(
tagger.tags_to_add(),
vec![
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 1,001-2,500"
]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 2,501-5,000",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(2501).and_darwin(2501).into());
assert_eq!(
tagger.tags_to_add(),
vec![
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 2,501-5,000"
]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(5000).and_darwin(5000).into());
assert_eq!(
tagger.tags_to_add(),
vec![
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 2,501-5,000"
]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 5,001+"
]
);

let mut tagger = RebuildTagger::new();
tagger.parse_attrs(PackageArchSrc::linux(5001).and_darwin(5001).into());
assert_eq!(
tagger.tags_to_add(),
vec![
"10.rebuild-darwin: 501+",
"10.rebuild-darwin: 5,001+",
"10.rebuild-linux: 501+",
"10.rebuild-linux: 5,001+"
]
);
assert_eq!(
tagger.tags_to_remove(),
vec![
"10.rebuild-darwin: 0",
"10.rebuild-darwin: 1-10",
"10.rebuild-darwin: 11-100",
"10.rebuild-darwin: 101-500",
"10.rebuild-darwin: 501-1,000",
"10.rebuild-darwin: 1,001-2,500",
"10.rebuild-darwin: 2,501-5,000",
"10.rebuild-linux: 0",
"10.rebuild-linux: 1-10",
"10.rebuild-linux: 11-100",
"10.rebuild-linux: 101-500",
"10.rebuild-linux: 501-1,000",
"10.rebuild-linux: 1,001-2,500",
"10.rebuild-linux: 2,501-5,000",
]
);
}

#[test]
pub fn test_files_changed_list() {
let mut criteria: HashMap<String, Vec<String>> = HashMap::new();