History

[object #164] Allow referenced objects to be serialized as well

Sebastian Thiel committed 5 years ago

Commit a98d2981 parent a65c14f11 files · +172 −27Browse files

Showing the changes to git-object/src/commit (1 of 11 files). Show all

Unified · Split

git-object/src/commit/write.rs+28−3
@@ -2,15 +2,40 @@ use std::io; · 1 unmodified line
22
33 use bstr::ByteSlice;
44
5−use crate::{encode, encode::NL, Commit};
5+use crate::{encode, encode::NL, Commit, CommitRef};
66
7−impl Commit {
7+impl crate::WriteTo for Commit {
88 /// Serializes this instance to `out` in the git serialization format.
9− pub fn write_to(&self, mut out: impl io::Write) -> io::Result<()> {
9+ fn write_to(&self, mut out: impl io::Write) -> io::Result<()> {
1010 encode::trusted_header_id(b"tree", &self.tree, &mut out)?;
1111 for parent in &self.parents {
1212 encode::trusted_header_id(b"parent", parent, &mut out)?;
1313 }
14+ encode::trusted_header_signature(b"author", &self.author.to_ref(), &mut out)?;
15+ encode::trusted_header_signature(b"committer", &self.committer.to_ref(), &mut out)?;
16+ if let Some(encoding) = self.encoding.as_ref() {
17+ encode::header_field(b"encoding", encoding, &mut out)?;
18+ }
19+ for (name, value) in &self.extra_headers {
20+ let has_newline = value.find_byte(b'\n').is_some();
21+ if has_newline {
22+ encode::header_field_multi_line(name, value, &mut out)?;
23+ } else {
24+ encode::trusted_header_field(name, value, &mut out)?;
25+ }
26+ }
27+ out.write_all(NL)?;
28+ out.write_all(&self.message)
29+ }
30+}
31+
32+impl<'a> crate::WriteTo for CommitRef<'a> {
33+ /// Serializes this instance to `out` in the git serialization format.
34+ fn write_to(&self, mut out: impl io::Write) -> io::Result<()> {
35+ encode::trusted_header_id(b"tree", &self.tree(), &mut out)?;
36+ for parent in self.parents() {
37+ encode::trusted_header_id(b"parent", &parent, &mut out)?;
38+ }
1439 encode::trusted_header_signature(b"author", &self.author, &mut out)?;
1540 encode::trusted_header_signature(b"committer", &self.committer, &mut out)?;
1641 if let Some(encoding) = self.encoding.as_ref() {