| |
.map(|b| b.refname().to_string())
|
| |
.collect();
|
| |
|
| - |
let mut files: HashMap<Oid, Value> = HashMap::new();
|
| + |
let mut files: HashMap<Oid, BlobRef<'_>> = HashMap::new();
|
| |
diff.files().for_each(|file_diff| match file_diff {
|
| |
diff::FileDiff::Added(added) => {
|
| - |
if let Ok(blob) = repo.blob(commit.id, &added.path) {
|
| - |
files.insert(
|
| - |
blob.object_id(),
|
| - |
json!({
|
| - |
"binary": blob.is_binary(),
|
| - |
"content": api::json::blob_content(&blob)
|
| - |
}),
|
| - |
);
|
| + |
if let Ok(blob) = repo.blob_ref(added.new.oid) {
|
| + |
files.insert(blob.id(), blob);
|
| |
}
|
| |
}
|
| |
diff::FileDiff::Deleted(deleted) => {
|
| - |
commit
|
| - |
.parents
|
| - |
.iter()
|
| - |
.filter_map(|oid| repo.blob(oid, &deleted.path).ok())
|
| - |
.for_each(|blob| {
|
| - |
files.insert(
|
| - |
blob.object_id(),
|
| - |
json!({
|
| - |
"binary": blob.is_binary(),
|
| - |
"content": api::json::blob_content(&blob)
|
| - |
}),
|
| - |
);
|
| - |
});
|
| + |
if let Ok(old_blob) = repo.blob_ref(deleted.old.oid) {
|
| + |
files.insert(old_blob.id(), old_blob);
|
| + |
}
|
| |
}
|
| |
diff::FileDiff::Modified(modified) => {
|
| - |
if let Ok(new_blob) = repo.blob(commit.id, &modified.path) {
|
| - |
files.insert(
|
| - |
new_blob.object_id(),
|
| - |
json!({
|
| - |
"binary": new_blob.is_binary(),
|
| - |
"content": api::json::blob_content(&new_blob)
|
| - |
}),
|
| - |
);
|
| + |
if let (Ok(old_blob), Ok(new_blob)) = (
|
| + |
repo.blob_ref(modified.old.oid),
|
| + |
repo.blob_ref(modified.new.oid),
|
| + |
) {
|
| + |
files.insert(old_blob.id(), old_blob);
|
| + |
files.insert(new_blob.id(), new_blob);
|
| |
}
|
| - |
commit
|
| - |
.parents
|
| - |
.iter()
|
| - |
.filter_map(|oid| repo.blob(oid, &modified.path).ok())
|
| - |
.for_each(|blob| {
|
| - |
files.insert(
|
| - |
blob.object_id(),
|
| - |
json!({
|
| - |
"binary": blob.is_binary(),
|
| - |
"content": api::json::blob_content(&blob)
|
| - |
}),
|
| - |
);
|
| - |
});
|
| |
}
|
| |
diff::FileDiff::Moved(moved) => {
|
| - |
if let (Ok(old_blob), Ok(new_blob)) = (
|
| - |
repo.blob(moved.old.oid, &moved.old_path),
|
| - |
repo.blob(moved.new.oid, &moved.new_path),
|
| - |
) {
|
| - |
files.insert(
|
| - |
old_blob.object_id(),
|
| - |
json!({
|
| - |
"binary": old_blob.is_binary(),
|
| - |
"content": api::json::blob_content(&old_blob)
|
| - |
}),
|
| - |
);
|
| - |
files.insert(
|
| - |
new_blob.object_id(),
|
| - |
json!({
|
| - |
"binary": new_blob.is_binary(),
|
| - |
"content": api::json::blob_content(&new_blob)
|
| - |
}),
|
| - |
);
|
| + |
if let (Ok(old_blob), Ok(new_blob)) =
|
| + |
(repo.blob_ref(moved.old.oid), repo.blob_ref(moved.new.oid))
|
| + |
{
|
| + |
files.insert(old_blob.id(), old_blob);
|
| + |
files.insert(new_blob.id(), new_blob);
|
| |
}
|
| |
}
|
| |
diff::FileDiff::Copied(copied) => {
|
| - |
if let (Ok(old_blob), Ok(new_blob)) = (
|
| - |
repo.blob(copied.old.oid, &copied.old_path),
|
| - |
repo.blob(copied.new.oid, &copied.new_path),
|
| - |
) {
|
| - |
files.insert(
|
| - |
old_blob.object_id(),
|
| - |
json!({
|
| - |
"binary": old_blob.is_binary(),
|
| - |
"content": api::json::blob_content(&old_blob)
|
| - |
}),
|
| - |
);
|
| - |
files.insert(
|
| - |
new_blob.object_id(),
|
| - |
json!({
|
| - |
"binary": new_blob.is_binary(),
|
| - |
"content": api::json::blob_content(&new_blob)
|
| - |
}),
|
| - |
);
|
| + |
if let (Ok(old_blob), Ok(new_blob)) =
|
| + |
(repo.blob_ref(copied.old.oid), repo.blob_ref(copied.new.oid))
|
| + |
{
|
| + |
files.insert(old_blob.id(), old_blob);
|
| + |
files.insert(new_blob.id(), new_blob);
|
| |
}
|
| |
}
|
| |
});
|
| |
let base = repo.commit(base)?;
|
| |
let commit = repo.commit(oid)?;
|
| |
let diff = repo.diff(base.id, commit.id)?;
|
| - |
let mut files: HashMap<Oid, Blob<BlobRef<'_>>> = HashMap::new();
|
| + |
let mut files: HashMap<Oid, BlobRef<'_>> = HashMap::new();
|
| |
diff.files().for_each(|file_diff| match file_diff {
|
| |
diff::FileDiff::Added(added) => {
|
| - |
if let Ok(blob) = repo.blob(commit.id, &added.path) {
|
| - |
files.insert(blob.object_id(), blob);
|
| + |
if let Ok(new_blob) = repo.blob_ref(added.new.oid) {
|
| + |
files.insert(new_blob.id(), new_blob);
|
| |
}
|
| |
}
|
| |
diff::FileDiff::Deleted(deleted) => {
|
| - |
if let Ok(old_blob) = repo.blob(base.id, &deleted.path) {
|
| - |
files.insert(old_blob.object_id(), old_blob);
|
| + |
if let Ok(old_blob) = repo.blob_ref(deleted.old.oid) {
|
| + |
files.insert(old_blob.id(), old_blob);
|
| |
}
|
| |
}
|
| |
diff::FileDiff::Modified(modified) => {
|
| |
if let (Ok(new_blob), Ok(old_blob)) = (
|
| - |
repo.blob(commit.id, &modified.path),
|
| - |
repo.blob(base.id, &modified.path),
|
| + |
repo.blob_ref(modified.old.oid),
|
| + |
repo.blob_ref(modified.new.oid),
|
| |
) {
|
| - |
files.insert(new_blob.object_id(), new_blob);
|
| - |
files.insert(old_blob.object_id(), old_blob);
|
| + |
files.insert(new_blob.id(), new_blob);
|
| + |
files.insert(old_blob.id(), old_blob);
|
| |
}
|
| |
}
|
| |
diff::FileDiff::Moved(moved) => {
|
| - |
if let (Ok(new_blob), Ok(old_blob)) = (
|
| - |
repo.blob(moved.new.oid, &moved.new_path),
|
| - |
repo.blob(moved.old.oid, &moved.old_path),
|
| - |
) {
|
| - |
files.insert(new_blob.object_id(), new_blob);
|
| - |
files.insert(old_blob.object_id(), old_blob);
|
| + |
if let (Ok(new_blob), Ok(old_blob)) =
|
| + |
(repo.blob_ref(moved.new.oid), repo.blob_ref(moved.old.oid))
|
| + |
{
|
| + |
files.insert(new_blob.id(), new_blob);
|
| + |
files.insert(old_blob.id(), old_blob);
|
| |
}
|
| |
}
|
| |
diff::FileDiff::Copied(copied) => {
|
| - |
if let (Ok(new_blob), Ok(old_blob)) = (
|
| - |
repo.blob(copied.new.oid, &copied.new_path),
|
| - |
repo.blob(copied.old.oid, &copied.old_path),
|
| - |
) {
|
| - |
files.insert(new_blob.object_id(), new_blob);
|
| - |
files.insert(old_blob.object_id(), old_blob);
|
| + |
if let (Ok(new_blob), Ok(old_blob)) =
|
| + |
(repo.blob_ref(copied.new.oid), repo.blob_ref(copied.old.oid))
|
| + |
{
|
| + |
files.insert(new_blob.id(), new_blob);
|
| + |
files.insert(old_blob.id(), old_blob);
|
| |
}
|
| |
}
|
| |
});
|
| |
}
|
| |
},
|
| |
"files": {
|
| + |
"82eb77880c693655bce074e3dbbd9fa711dc018b": {
|
| + |
"id": "82eb77880c693655bce074e3dbbd9fa711dc018b",
|
| + |
"binary": false,
|
| + |
"content": "Thank you very much!\n",
|
| + |
},
|
| |
"980a0d5f19a64b4b30a87d4206aade58726b60e3": {
|
| + |
"id": "980a0d5f19a64b4b30a87d4206aade58726b60e3",
|
| |
"binary": false,
|
| |
"content": "Hello World!\n",
|
| |
},
|
| |
"1dd5654ca2d2cf9f33b14c92b5ca9e1d21a91ae1": {
|
| + |
"id": "1dd5654ca2d2cf9f33b14c92b5ca9e1d21a91ae1",
|
| |
"binary": false,
|
| |
"content": "Hello World from dir1!\n",
|
| |
},
|
| - |
"82eb77880c693655bce074e3dbbd9fa711dc018b": {
|
| - |
"binary": false,
|
| - |
"content": "Thank you very much!\n",
|
| - |
},
|
| |
},
|
| |
"branches": [
|
| |
"refs/heads/master"
|