mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
dag: add a test about excessive fetches for add_heads
Summary: Currently the "contains vertex" check can trigger excessive fetches for add_heads (and add_heads_and_flush used by flush). Add a test to demonstrate the problem. Reviewed By: sfilipco Differential Revision: D27630091 fbshipit-source-id: ce3639c2a13226ba5681b4e8696edd7acbcb57f9
This commit is contained in:
parent
8d4f17ea82
commit
1ffc1824c1
@ -6,7 +6,9 @@
|
||||
*/
|
||||
|
||||
use super::TestDag;
|
||||
use crate::ops::DagAddHeads;
|
||||
use crate::ops::DagAlgorithm;
|
||||
use crate::ops::DagPersistent;
|
||||
use crate::ops::IdConvert;
|
||||
use crate::Id;
|
||||
use crate::VertexName;
|
||||
@ -103,3 +105,70 @@ async fn test_negative_cache() {
|
||||
client.drawdag("B-C-D", &[]);
|
||||
assert!(client.dag.vertex_id("C".into()).await.is_ok());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_add_heads() {
|
||||
let server = TestDag::draw("A-B # master: B");
|
||||
let mut client = server.client().await;
|
||||
|
||||
let pending = TestDag::draw("A-C B-C-D-E-F-G E-H-K I-J-K");
|
||||
let parents = pending.dag.dag_snapshot().unwrap();
|
||||
client
|
||||
.dag
|
||||
.add_heads(&parents, &["G".into(), "K".into()])
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
client.output(),
|
||||
[
|
||||
"resolve names: [G], heads: [B]",
|
||||
"resolve names: [F], heads: [B]",
|
||||
"resolve names: [E], heads: [B]",
|
||||
"resolve names: [D], heads: [B]",
|
||||
"resolve names: [C], heads: [B]",
|
||||
"resolve names: [A], heads: [B]",
|
||||
"resolve names: [K], heads: [B]",
|
||||
"resolve names: [J], heads: [B]",
|
||||
"resolve names: [H], heads: [B]",
|
||||
"resolve names: [I], heads: [B]"
|
||||
]
|
||||
);
|
||||
|
||||
client.dag.flush(&["G".into()]).await.unwrap();
|
||||
assert_eq!(
|
||||
client.output(),
|
||||
[
|
||||
"resolve names: [G], heads: [B]",
|
||||
"resolve names: [F], heads: [B]",
|
||||
"resolve names: [E], heads: [B]",
|
||||
"resolve names: [D], heads: [B]",
|
||||
"resolve names: [C], heads: [B]",
|
||||
"resolve names: [K], heads: [B]",
|
||||
"resolve names: [J], heads: [B]",
|
||||
"resolve names: [H], heads: [B]",
|
||||
"resolve names: [I], heads: [B]"
|
||||
]
|
||||
);
|
||||
|
||||
let mut client = server.client().await;
|
||||
client
|
||||
.dag
|
||||
.add_heads_and_flush(&parents, &["K".into()], &["G".into()])
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
client.output(),
|
||||
[
|
||||
"resolve names: [K], heads: [B]",
|
||||
"resolve names: [J], heads: [B]",
|
||||
"resolve names: [H], heads: [B]",
|
||||
"resolve names: [E], heads: [B]",
|
||||
"resolve names: [D], heads: [B]",
|
||||
"resolve names: [C], heads: [B]",
|
||||
"resolve names: [A], heads: [B]",
|
||||
"resolve names: [I], heads: [B]",
|
||||
"resolve names: [G], heads: [B]",
|
||||
"resolve names: [F], heads: [B]"
|
||||
]
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user