History

Improve error handling of encode::header_field_multi_line & simplify

`EmptyValue` is already used by `header_field` and seems suitable for the same case here. Also swap `lines()` for `split_str()` this way there's no need to handle the terminal edge case. And "deoptimise" `Commit[Ref]::write_to`: `header_field_multi_line` should work fine for single values, it *might* be slightly less efficient but I assume it's a pretty rare case anyway and the simplicity is more valuable, as well as avoiding redundant work.

Xavier Morel committed 5 years ago

Commit bab9fb51 parent 23040d32 files · +4 −23Browse files

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

Unified · Split

git-object/src/commit/write.rs+2−14
@@ -1,7 +1,5 @@
11 use std::io;
22
3−use bstr::ByteSlice;
4−
53 use crate::{encode, encode::NL, Commit, CommitRef, Kind};
64
75 impl crate::WriteTo for Commit {
@@ -17,12 +15,7 @@ impl crate::WriteTo for Commit { · 9 unmodified lines
1715 encode::header_field(b"encoding", encoding, &mut out)?;
1816 }
1917 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− }
18+ encode::header_field_multi_line(name, value, &mut out)?;
2619 }
2720 out.write_all(NL)?;
2821 out.write_all(&self.message)
@@ -46,12 +39,7 @@ impl<'a> crate::WriteTo for CommitRef<'a> { · 17 unmodified lines
4639 encode::header_field(b"encoding", encoding, &mut out)?;
4740 }
4841 for (name, value) in &self.extra_headers {
49− let has_newline = value.find_byte(b'\n').is_some();
50− if has_newline {
51− encode::header_field_multi_line(name, value, &mut out)?;
52− } else {
53− encode::trusted_header_field(name, value, &mut out)?;
54− }
42+ encode::header_field_multi_line(name, value, &mut out)?;
5543 }
5644 out.write_all(NL)?;
5745 out.write_all(self.message)