History

refactor

Sebastian Thiel committed 6 years ago

Commit 0bbd87e1 parent bbce3403 files · +58 −61Browse files

Unified · Split

3 files
  1. git-transport/src/client/git/message.rs +29 −0
  2. git-transport/src/client/git/mod.rs +10 −61
  3. git-transport/src/client/git/recv.rs +19 −0
git-transport/src/client/git/message.rs+29−0
@@ -0,0 +1,29 @@
1+use crate::{Protocol, Service};
2+use bstr::{BString, ByteVec};
3+
4+pub fn connect(
5+ service: Service,
6+ version: Protocol,
7+ path: &[u8],
8+ virtual_host: Option<&(String, Option<u16>)>,
9+) -> BString {
10+ let mut out = bstr::BString::from(service.as_str());
11+ out.push(b' ');
12+ out.extend_from_slice(&path);
13+ out.push(0);
14+ if let Some((host, port)) = virtual_host {
15+ out.push_str("host=");
16+ out.extend_from_slice(host.as_bytes());
17+ if let Some(port) = port {
18+ out.push_byte(b':');
19+ out.push_str(&format!("{}", port));
20+ }
21+ out.push(0);
22+ }
23+ if version != Protocol::V1 {
24+ out.push(0);
25+ out.push_str(format!("version={}", version as usize));
26+ out.push(0);
27+ }
28+ out
29+}
git-transport/src/client/git/mod.rsrenamed from git-transport/src/client/git.rs+10−61
@@ -2,6 +2,9 @@ use crate::{client::SetServiceResponse, Protocol, Service}; · 1 unmodified line
22 use bstr::BString;
33 use std::{io, net::TcpStream};
44
5+pub mod message;
6+pub(crate) mod recv;
7+
58 pub struct Connection<R, W> {
69 write: W,
710 line_reader: git_packetline::Reader<R>,
@@ -10,67 +13,6 @@ pub struct Connection<R, W> { · 2 unmodified lines
1013 protocol: Protocol,
1114 }
1215
13−impl<R, W> crate::client::Transport for Connection<R, W>
14−where
15− R: io::Read,
16− W: io::Write,
17−{
18−}
19−
20−pub mod message {
21− use crate::{Protocol, Service};
22− use bstr::{BString, ByteVec};
23−
24− pub fn connect(
25− service: Service,
26− version: Protocol,
27− path: &[u8],
28− virtual_host: Option<&(String, Option<u16>)>,
29− ) -> BString {
30− let mut out = bstr::BString::from(service.as_str());
31− out.push(b' ');
32− out.extend_from_slice(&path);
33− out.push(0);
34− if let Some((host, port)) = virtual_host {
35− out.push_str("host=");
36− out.extend_from_slice(host.as_bytes());
37− if let Some(port) = port {
38− out.push_byte(b':');
39− out.push_str(&format!("{}", port));
40− }
41− out.push(0);
42− }
43− if version != Protocol::V1 {
44− out.push(0);
45− out.push_str(format!("version={}", version as usize));
46− out.push(0);
47− }
48− out
49− }
50−}
51−
52−pub(crate) mod recv {
53− use crate::client::Capabilities;
54− use std::io;
55−
56− pub fn capabilties_and_possibly_refs<'a, T: io::Read>(
57− rd: &'a mut git_packetline::Reader<T>,
58− ) -> Result<(Capabilities, Option<Box<dyn io::BufRead + 'a>>), crate::client::Error> {
59− rd.fail_on_err_lines(true);
60− let capabilities = rd
61− .peek_line()
62− .ok_or(crate::client::Error::ExpectedLine("capabilities or version"))???;
63− let (capabilities, delimiter_position) = Capabilities::from_bytes(
64− capabilities
65− .to_text()
66− .ok_or(crate::client::Error::ExpectedDataLine)?
67− .as_slice(),
68− )?;
69− rd.peek_buffer_replace_and_truncate(delimiter_position, b'\n');
70− Ok((capabilities, Some(Box::new(rd.as_read()))))
71− }
72−}
73−
7416 impl<R, W> crate::client::TransportSketch for Connection<R, W>
7517 where
7618 R: io::Read,
@@ -116,6 +58,13 @@ where · 39 unmodified lines
11658 }
11759 }
11860
61+impl<R, W> crate::client::Transport for Connection<R, W>
62+where
63+ R: io::Read,
64+ W: io::Write,
65+{
66+}
67+
11968 use quick_error::quick_error;
12069 quick_error! {
12170 #[derive(Debug)]
git-transport/src/client/git/recv.rs+19−0
@@ -0,0 +1,19 @@
1+use crate::client::Capabilities;
2+use std::io;
3+
4+pub fn capabilties_and_possibly_refs<'a, T: io::Read>(
5+ rd: &'a mut git_packetline::Reader<T>,
6+) -> Result<(Capabilities, Option<Box<dyn io::BufRead + 'a>>), crate::client::Error> {
7+ rd.fail_on_err_lines(true);
8+ let capabilities = rd
9+ .peek_line()
10+ .ok_or(crate::client::Error::ExpectedLine("capabilities or version"))???;
11+ let (capabilities, delimiter_position) = Capabilities::from_bytes(
12+ capabilities
13+ .to_text()
14+ .ok_or(crate::client::Error::ExpectedDataLine)?
15+ .as_slice(),
16+ )?;
17+ rd.peek_buffer_replace_and_truncate(delimiter_position, b'\n');
18+ Ok((capabilities, Some(Box::new(rd.as_read()))))
19+}