mononoke: use ChangesetMetadata

Summary: Let's pass just one field instead of 4

Reviewed By: farnz

Differential Revision: D8889899

fbshipit-source-id: 8b30496a86950ed534439f5469f8740ee32345b8
This commit is contained in:
Stanislau Hlebik 2018-07-18 04:16:41 -07:00 committed by Facebook Github Bot
parent f81cf6ddd7
commit 08dd810568
7 changed files with 60 additions and 62 deletions

View File

@ -22,7 +22,7 @@ use mercurial_types::nodehash::{HgChangesetId, HgManifestId, NULL_HASH};
use mononoke_types::DateTime;
use errors::*;
use repo::RepoBlobstore;
use repo::{ChangesetMetadata, RepoBlobstore};
#[derive(Debug, Clone)]
pub struct ChangesetContent {
@ -41,22 +41,19 @@ impl ChangesetContent {
// XXX replace parents with p1 and p2
parents: HgParents,
manifestid: HgManifestId,
user: Vec<u8>,
time: DateTime,
extra: BTreeMap<Vec<u8>, Vec<u8>>,
cs_metadata: ChangesetMetadata,
files: Vec<MPath>,
comments: Vec<u8>,
) -> Self {
let (p1, p2) = parents.get_nodes();
Self {
p1: p1.cloned(),
p2: p2.cloned(),
manifestid,
user,
time,
extra: Extra::new(extra),
user: cs_metadata.user.into_bytes(),
time: cs_metadata.time,
extra: Extra::new(cs_metadata.extra),
files,
comments,
comments: cs_metadata.comments.into_bytes(),
}
}

View File

@ -68,8 +68,9 @@ pub use errors::*;
pub use changeset::{BlobChangeset, ChangesetContent};
pub use file::HgBlobEntry;
pub use manifest::BlobManifest;
pub use repo::{BlobRepo, ContentBlobInfo, ContentBlobMeta, CreateChangeset, ManifoldArgs,
UploadHgFileContents, UploadHgFileEntry, UploadHgNodeHash, UploadHgTreeEntry};
pub use repo::{BlobRepo, ChangesetMetadata, ContentBlobInfo, ContentBlobMeta, CreateChangeset,
ManifoldArgs, UploadHgFileContents, UploadHgFileEntry, UploadHgNodeHash,
UploadHgTreeEntry};
pub use repo_commit::ChangesetHandle;
// TODO: This is exported for testing - is this the right place for it?
pub use repo_commit::compute_changed_files;

View File

@ -1059,6 +1059,13 @@ pub struct ContentBlobMeta {
pub copy_from: Option<(MPath, HgNodeHash)>,
}
pub struct ChangesetMetadata {
pub user: String,
pub time: DateTime,
pub extra: BTreeMap<Vec<u8>, Vec<u8>>,
pub comments: String,
}
pub struct CreateChangeset {
/// This should always be provided, keeping it an Option for tests
pub expected_nodeid: Option<HgNodeHash>,
@ -1068,10 +1075,7 @@ pub struct CreateChangeset {
// root_manifest can be None f.e. when commit removes all the content of the repo
pub root_manifest: BoxFuture<Option<(HgBlobEntry, RepoPath)>, Error>,
pub sub_entries: BoxStream<(HgBlobEntry, RepoPath), Error>,
pub user: String,
pub time: DateTime,
pub extra: BTreeMap<Vec<u8>, Vec<u8>>,
pub comments: String,
pub cs_metadata: ChangesetMetadata,
}
impl CreateChangeset {
@ -1110,10 +1114,7 @@ impl CreateChangeset {
let blobstore = repo.blobstore.clone();
let mut scuba_logger = scuba_logger.clone();
let expected_files = self.expected_files;
let user = self.user;
let time = self.time;
let extra = self.extra;
let comments = self.comments;
let cs_metadata = self.cs_metadata;
move |((root_manifest, root_hash), (parents, p1_manifest, p2_manifest))| {
let files = if let Some(expected_files) = expected_files {
@ -1143,11 +1144,8 @@ impl CreateChangeset {
let blobcs = try_boxfuture!(make_new_changeset(
parents,
root_hash,
user,
time,
extra,
cs_metadata,
files,
comments,
));
let cs_id = blobcs.get_changeset_id().into_nodehash();

View File

@ -4,7 +4,7 @@
// 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::{BTreeMap, HashMap, HashSet};
use std::collections::{HashMap, HashSet};
use std::mem;
use std::sync::{Arc, Mutex};
@ -26,14 +26,13 @@ use mercurial_types::{Changeset, Entry, HgChangesetId, HgEntryId, HgNodeHash, Hg
use mercurial_types::manifest::{self, Content};
use mercurial_types::manifest_utils::{changed_entry_stream, EntryStatus};
use mercurial_types::nodehash::{HgFileNodeId, HgManifestId};
use mononoke_types::DateTime;
use BlobChangeset;
use BlobRepo;
use changeset::ChangesetContent;
use errors::*;
use file::HgBlobEntry;
use repo::RepoBlobstore;
use repo::{ChangesetMetadata, RepoBlobstore};
define_stats! {
prefix = "mononoke.blobrepo_commit";
@ -660,21 +659,10 @@ pub fn handle_parents(
pub fn make_new_changeset(
parents: HgParents,
root_hash: HgManifestId,
user: String,
time: DateTime,
extra: BTreeMap<Vec<u8>, Vec<u8>>,
cs_metadata: ChangesetMetadata,
files: Vec<MPath>,
comments: String,
) -> Result<BlobChangeset> {
let changeset = ChangesetContent::new_from_parts(
parents,
root_hash,
user.into_bytes(),
time,
extra,
files,
comments.into_bytes(),
);
let changeset = ChangesetContent::new_from_parts(parents, root_hash, cs_metadata, files);
BlobChangeset::new(changeset)
}

View File

@ -15,8 +15,8 @@ use futures::stream::futures_unordered;
use futures_ext::{BoxFuture, StreamExt};
use scuba_ext::ScubaSampleBuilder;
use blobrepo::{BlobRepo, ChangesetHandle, CreateChangeset, HgBlobEntry, UploadHgFileContents,
UploadHgFileEntry, UploadHgNodeHash, UploadHgTreeEntry};
use blobrepo::{BlobRepo, ChangesetHandle, ChangesetMetadata, CreateChangeset, HgBlobEntry,
UploadHgFileContents, UploadHgFileEntry, UploadHgNodeHash, UploadHgTreeEntry};
use blobstore::{EagerMemblob, LazyMemblob};
use mercurial_types::{FileType, HgBlobNode, HgNodeHash, RepoPath};
use mononoke_types::DateTime;
@ -176,6 +176,12 @@ pub fn create_changeset_no_parents(
root_manifest: BoxFuture<Option<(HgBlobEntry, RepoPath)>, Error>,
other_nodes: Vec<BoxFuture<(HgBlobEntry, RepoPath), Error>>,
) -> ChangesetHandle {
let cs_metadata = ChangesetMetadata {
user: "author <author@fb.com>".into(),
time: DateTime::from_timestamp(0, 0).expect("valid timestamp"),
extra: BTreeMap::new(),
comments: "Test commit".into(),
};
let create_changeset = CreateChangeset {
expected_nodeid: None,
expected_files: None,
@ -183,10 +189,7 @@ pub fn create_changeset_no_parents(
p2: None,
root_manifest,
sub_entries: futures_unordered(other_nodes).boxify(),
user: "author <author@fb.com>".into(),
time: DateTime::from_timestamp(0, 0).expect("valid timestamp"),
extra: BTreeMap::new(),
comments: "Test commit".into(),
cs_metadata,
};
create_changeset.create(repo, ScubaSampleBuilder::with_discard())
}
@ -197,6 +200,12 @@ pub fn create_changeset_one_parent(
other_nodes: Vec<BoxFuture<(HgBlobEntry, RepoPath), Error>>,
p1: ChangesetHandle,
) -> ChangesetHandle {
let cs_metadata = ChangesetMetadata {
user: "\u{041F}\u{0451}\u{0442}\u{0440} <peter@fb.com>".into(),
time: DateTime::from_timestamp(1234, 0).expect("valid timestamp"),
extra: BTreeMap::new(),
comments: "Child commit".into(),
};
let create_changeset = CreateChangeset {
expected_nodeid: None,
expected_files: None,
@ -204,10 +213,7 @@ pub fn create_changeset_one_parent(
p2: None,
root_manifest,
sub_entries: futures_unordered(other_nodes).boxify(),
user: "\u{041F}\u{0451}\u{0442}\u{0440} <peter@fb.com>".into(),
time: DateTime::from_timestamp(1234, 0).expect("valid timestamp"),
extra: BTreeMap::new(),
comments: "Child commit".into(),
cs_metadata,
};
create_changeset.create(repo, ScubaSampleBuilder::with_discard())
}

View File

@ -10,7 +10,8 @@ use std::ops::AddAssign;
use std::sync::Arc;
use ascii::AsciiString;
use blobrepo::{BlobRepo, ChangesetHandle, ContentBlobInfo, CreateChangeset, HgBlobEntry};
use blobrepo::{BlobRepo, ChangesetHandle, ChangesetMetadata, ContentBlobInfo, CreateChangeset,
HgBlobEntry};
use bookmarks;
use bytes::Bytes;
use failure::{Compat, FutureFailureErrorExt, StreamFailureErrorExt};
@ -477,6 +478,12 @@ impl Bundle2Resolver {
.with_context(move |_| format!("While fetching parents for Changeset {}", node))
.from_err()
.and_then(move |(p1, p2)| {
let cs_metadata = ChangesetMetadata {
user: String::from_utf8(revlog_cs.user().into())?,
time: revlog_cs.time().clone(),
extra: revlog_cs.extra().clone(),
comments: String::from_utf8(revlog_cs.comments().into())?,
};
let create_changeset = CreateChangeset {
expected_nodeid: Some(node),
expected_files: Some(Vec::from(revlog_cs.files())),
@ -485,10 +492,7 @@ impl Bundle2Resolver {
root_manifest,
sub_entries,
// XXX pass content blobs to CreateChangeset here
user: String::from_utf8(revlog_cs.user().into())?,
time: revlog_cs.time().clone(),
extra: revlog_cs.extra().clone(),
comments: String::from_utf8(revlog_cs.comments().into())?,
cs_metadata,
};
let scheduled_uploading = create_changeset.create(&repo, scuba_logger);

View File

@ -18,8 +18,9 @@ use futures::stream::{self, Stream};
use futures_ext::{BoxFuture, BoxStream, FutureExt, StreamExt};
use scuba_ext::ScubaSampleBuilder;
use blobrepo::{BlobChangeset, BlobRepo, ChangesetHandle, CreateChangeset, HgBlobEntry,
UploadHgFileContents, UploadHgFileEntry, UploadHgNodeHash, UploadHgTreeEntry};
use blobrepo::{BlobChangeset, BlobRepo, ChangesetHandle, ChangesetMetadata, CreateChangeset,
HgBlobEntry, UploadHgFileContents, UploadHgFileEntry, UploadHgNodeHash,
UploadHgTreeEntry};
use cmdlib::args;
use mercurial::{manifest, RevlogChangeset, RevlogEntry, RevlogRepo};
use mercurial_types::{HgBlob, HgChangesetId, HgManifestId, HgNodeHash, MPath, RepoPath, Type,
@ -307,6 +308,14 @@ pub fn upload_changesets<'a>(
(parents.next(), parents.next())
};
let cs_metadata = ChangesetMetadata {
user: String::from_utf8(Vec::from(cs.user()))
.expect(&format!("non-utf8 username for {}", csid)),
time: cs.time().clone(),
extra: cs.extra().clone(),
comments: String::from_utf8(Vec::from(cs.comments()))
.expect(&format!("non-utf8 comments for {}", csid)),
};
let create_changeset = CreateChangeset {
expected_nodeid: Some(csid),
expected_files: Some(Vec::from(cs.files())),
@ -314,12 +323,7 @@ pub fn upload_changesets<'a>(
p2: p2handle,
root_manifest: rootmf,
sub_entries: entries,
user: String::from_utf8(Vec::from(cs.user()))
.expect(&format!("non-utf8 username for {}", csid)),
time: cs.time().clone(),
extra: cs.extra().clone(),
comments: String::from_utf8(Vec::from(cs.comments()))
.expect(&format!("non-utf8 comments for {}", csid)),
cs_metadata,
};
let cshandle = create_changeset.create(&blobrepo, ScubaSampleBuilder::with_discard());
parent_changeset_handles.insert(csid, cshandle.clone());