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 @@
1use crate::{Protocol, Service};
2use bstr::{BString, ByteVec};
3
4pub 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
2use bstr::BString;2use bstr::BString;
3use std::{io, net::TcpStream};3use std::{io, net::TcpStream};
4 4
5pub mod message;
6pub(crate) mod recv;
7
5pub struct Connection<R, W> {8pub struct Connection<R, W> {
6 write: W,9 write: W,
7 line_reader: git_packetline::Reader<R>,10 line_reader: git_packetline::Reader<R>,
@@ -10,67 +13,6 @@ pub struct Connection<R, W> { · 2 unmodified lines
10 protocol: Protocol,13 protocol: Protocol,
11}14}
12 15
13impl<R, W> crate::client::Transport for Connection<R, W>
14where
15 R: io::Read,
16 W: io::Write,
17{
18}
19
20pub 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
52pub(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
74impl<R, W> crate::client::TransportSketch for Connection<R, W>16impl<R, W> crate::client::TransportSketch for Connection<R, W>
75where17where
76 R: io::Read,18 R: io::Read,
@@ -116,6 +58,13 @@ where · 39 unmodified lines
116 }58 }
117}59}
118 60
61impl<R, W> crate::client::Transport for Connection<R, W>
62where
63 R: io::Read,
64 W: io::Write,
65{
66}
67
119use quick_error::quick_error;68use quick_error::quick_error;
120quick_error! {69quick_error! {
121 #[derive(Debug)]70 #[derive(Debug)]
git-transport/src/client/git/recv.rs+19−0
@@ -0,0 +1,19 @@
1use crate::client::Capabilities;
2use std::io;
3
4pub 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}