mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
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:
parent
f81cf6ddd7
commit
08dd810568
@ -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(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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())
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user