mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
mononoke: use common traits from NodeFrontier
Summary: Address aslpavel's comments from D13275471 Reviewed By: aslpavel Differential Revision: D13301218 fbshipit-source-id: 5e51dd3b19a6cd41ae9b4071ec3edb2f0c81999c
This commit is contained in:
parent
a9d81657d0
commit
bd7246dcf7
@ -4,8 +4,9 @@
|
||||
// This software may be used and distributed according to the terms of the
|
||||
// GNU General Public License version 2 or any later version.
|
||||
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::collections::{hash_map, HashMap, HashSet};
|
||||
use std::default::Default;
|
||||
use std::iter::{Extend, FromIterator};
|
||||
use std::sync::Arc;
|
||||
|
||||
use failure::Error;
|
||||
@ -38,6 +39,31 @@ impl Default for NodeFrontier {
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoIterator for NodeFrontier {
|
||||
type Item = (Generation, HashSet<ChangesetId>);
|
||||
type IntoIter = hash_map::IntoIter<Generation, HashSet<ChangesetId>>;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
self.gen_map.into_iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl Extend<(ChangesetId, Generation)> for NodeFrontier {
|
||||
fn extend<T: IntoIterator<Item = (ChangesetId, Generation)>>(&mut self, iter: T) {
|
||||
for edge_pair in iter {
|
||||
self.insert(edge_pair);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl FromIterator<(ChangesetId, Generation)> for NodeFrontier {
|
||||
fn from_iter<I: IntoIterator<Item = (ChangesetId, Generation)>>(iter: I) -> Self {
|
||||
let mut frontier = NodeFrontier::default();
|
||||
frontier.extend(iter);
|
||||
frontier
|
||||
}
|
||||
}
|
||||
|
||||
impl NodeFrontier {
|
||||
pub fn new(input: HashMap<Generation, HashSet<ChangesetId>>) -> Self {
|
||||
let mut gen_map = HashMap::new();
|
||||
@ -53,18 +79,6 @@ impl NodeFrontier {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_pairs(node_gen_pairs: Vec<(ChangesetId, Generation)>) -> Self {
|
||||
let mut frontier = NodeFrontier::default();
|
||||
frontier.insert_iter(node_gen_pairs.into_iter());
|
||||
frontier
|
||||
}
|
||||
|
||||
pub fn insert_iter(&mut self, iter: impl IntoIterator<Item = (ChangesetId, Generation)>) {
|
||||
for edge_pair in iter {
|
||||
self.insert(edge_pair);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get(&self, gen: &Generation) -> Option<&HashSet<ChangesetId>> {
|
||||
self.gen_map.get(gen)
|
||||
}
|
||||
@ -94,10 +108,6 @@ impl NodeFrontier {
|
||||
)
|
||||
}
|
||||
|
||||
pub fn into_map(self) -> HashMap<Generation, HashSet<ChangesetId>> {
|
||||
self.gen_map
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.gen_map.len()
|
||||
}
|
||||
|
@ -591,9 +591,9 @@ fn process_frontier(
|
||||
}
|
||||
})
|
||||
.map(move |gen_cs| {
|
||||
node_frontier.insert_iter(gen_cs.into_iter());
|
||||
node_frontier.extend(gen_cs);
|
||||
|
||||
for (gen, s) in skipped_frontier.into_map() {
|
||||
for (gen, s) in skipped_frontier {
|
||||
for entry in s {
|
||||
node_frontier.insert((entry, gen));
|
||||
}
|
||||
|
@ -24,7 +24,7 @@
|
||||
/// Mercurial pull to find commits that need to be sent to a client.
|
||||
use std::collections::{BTreeMap, HashSet};
|
||||
use std::collections::hash_set::IntoIter;
|
||||
use std::iter;
|
||||
use std::iter::{self, FromIterator};
|
||||
use std::sync::Arc;
|
||||
|
||||
use failure::prelude::*;
|
||||
@ -211,7 +211,7 @@ impl DifferenceOfUnionsOfAncestorsNodeStream {
|
||||
// for it (see drain below)
|
||||
current_generation: Generation::max_gen(),
|
||||
pending_changesets: SelectAll::new(),
|
||||
exclude_ancestors_future: ok(NodeFrontier::from_pairs(exclude_generations))
|
||||
exclude_ancestors_future: ok(NodeFrontier::from_iter(exclude_generations))
|
||||
.boxify(),
|
||||
current_exclude_generation,
|
||||
drain: hashset!{}.into_iter().peekable(),
|
||||
|
Loading…
Reference in New Issue
Block a user