mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
new_blobimport: update a bookmark only if the changeset is present in blobstore
Summary: This should prevent new_blobimport from updating bookmarks to non-existing changesets Reviewed By: farnz Differential Revision: D8122315 fbshipit-source-id: 20bcbb6887b54a88b39f9ba375884e8b9c0143f7
This commit is contained in:
parent
86490e1ea5
commit
2bedb01d19
@ -25,15 +25,39 @@ pub fn upload_bookmarks(
|
||||
let logger = logger.clone();
|
||||
let bookmarks = Arc::new(try_boxfuture!(revlogrepo.get_bookmarks()));
|
||||
|
||||
(*bookmarks).keys().and_then({
|
||||
(*bookmarks).keys().map({
|
||||
let bookmarks = bookmarks.clone();
|
||||
let blobrepo = blobrepo.clone();
|
||||
move |key| {
|
||||
let blobrepo = blobrepo.clone();
|
||||
(*bookmarks).get(&key).and_then(move |v| {
|
||||
let (cs_id, _) = v.ok_or_else(|| format_err!("Bookmark value missing: {:?}", key))?;
|
||||
Ok((key, cs_id))
|
||||
v.ok_or_else(|| format_err!("Bookmark value missing: {:?}", key))
|
||||
.into_future()
|
||||
.and_then(move |(cs_id, _)| {
|
||||
blobrepo.changeset_exists(&DChangesetId::new(cs_id.into_nodehash().into_mononoke()))
|
||||
.map(move |exists| (key, cs_id, exists))
|
||||
})
|
||||
})
|
||||
}
|
||||
}).chunks(100) // send 100 bookmarks in a single transaction
|
||||
})
|
||||
.buffer_unordered(100)
|
||||
.filter_map({
|
||||
let logger = logger.clone();
|
||||
move |(key, cs_id, exists)| {
|
||||
if exists {
|
||||
Some((key, cs_id))
|
||||
} else {
|
||||
info!(
|
||||
logger,
|
||||
"did not update bookmark {:?}, because cs {:?} was not imported yet",
|
||||
key,
|
||||
cs_id,
|
||||
);
|
||||
None
|
||||
}
|
||||
}
|
||||
})
|
||||
.chunks(100) // send 100 bookmarks in a single transaction
|
||||
.and_then({
|
||||
let blobrepo = blobrepo.clone();
|
||||
move |vec| {
|
||||
|
Loading…
Reference in New Issue
Block a user