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/write.rs (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
2 2
3use bstr::ByteSlice;3use bstr::ByteSlice;
4 4
5use crate::{encode, encode::NL, Commit};5use crate::{encode, encode::NL, Commit, CommitRef};
6 6
7impl Commit {7impl crate::WriteTo for Commit {
8 /// Serializes this instance to `out` in the git serialization format.8 /// 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<()> {
10 encode::trusted_header_id(b"tree", &self.tree, &mut out)?;10 encode::trusted_header_id(b"tree", &self.tree, &mut out)?;
11 for parent in &self.parents {11 for parent in &self.parents {
12 encode::trusted_header_id(b"parent", parent, &mut out)?;12 encode::trusted_header_id(b"parent", parent, &mut out)?;
13 }13 }
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
32impl<'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 }
14 encode::trusted_header_signature(b"author", &self.author, &mut out)?;39 encode::trusted_header_signature(b"author", &self.author, &mut out)?;
15 encode::trusted_header_signature(b"committer", &self.committer, &mut out)?;40 encode::trusted_header_signature(b"committer", &self.committer, &mut out)?;
16 if let Some(encoding) = self.encoding.as_ref() {41 if let Some(encoding) = self.encoding.as_ref() {