History

refactor

Sebastian Thiel committed 6 years ago

Commit fab9f991 parent fcb4cc11 file · +17 −45Browse files

Showing the changes to git-protocol/src (1 of 1 file). Show all

Unified · Split

git-protocol/src/fetch/response.rs+17−45
@@ -103,57 +103,29 @@ impl<'a> Response<'a> { · 102 unmodified lines
103103 ) -> Result<Response<'a>, Error> {
104104 match version {
105105 Protocol::V1 => {
106− enum State {
107− AtFirstCheckClone,
108− ParseAcks(Vec<Acknowledgement>),
109− }
110− let mut state = State::AtFirstCheckClone;
111106 let mut line = String::new();
107+ let mut acks = Vec::<Acknowledgement>::new();
112108 let (acks, pack) = loop {
113109 line.clear();
114− match state {
115− State::AtFirstCheckClone => {
116− if reader.read_line(&mut line)? == 0 {
117− return Err(Error::Io(io::Error::new(
118− io::ErrorKind::UnexpectedEof,
119− "Could not read a single line",
120− )));
121− };
122− let acks = vec![Acknowledgement::from_line(&line)?];
123− match acks.last().expect("one ack present") {
124− Acknowledgement::NAK => {
125− // we are a clone (or so we think) as the first line is a NAK
126− // We expect the following to be the pack
127− break (acks, Some(reader));
128− }
129− _ => {
130− state = State::ParseAcks(acks);
131− }
132− }
133− }
134− State::ParseAcks(mut acks) => {
135− let peeked_line = match reader.peek_data_line() {
136− Some(line) => String::from_utf8_lossy(line??),
137− None => break (acks, None), // EOF
138− };
110+ let peeked_line = match reader.peek_data_line() {
111+ Some(line) => String::from_utf8_lossy(line??),
112+ None => break (acks, None), // EOF
113+ };
139114
140− // with a friendly server, we just assume that a non-ack line is a pack line
141− // which is our hint to stop here.
142− let ack = match Acknowledgement::from_line(&peeked_line) {
143− Ok(ack) => ack,
144− Err(_) => break (acks, Some(reader)),
145− };
146− assert_ne!(reader.read_line(&mut line)?, 0, "consuming a peeked line works");
147− match ack.id() {
148− Some(id) => {
149− if !acks.iter().any(|a| a.id() == Some(id)) {
150− acks.push(ack);
151− }
152− }
153− None => acks.push(ack),
115+ // with a friendly server, we just assume that a non-ack line is a pack line
116+ // which is our hint to stop here.
117+ let ack = match Acknowledgement::from_line(&peeked_line) {
118+ Ok(ack) => ack,
119+ Err(_) => break (acks, Some(reader)),
120+ };
121+ assert_ne!(reader.read_line(&mut line)?, 0, "consuming a peeked line works");
122+ match ack.id() {
123+ Some(id) => {
124+ if !acks.iter().any(|a| a.id() == Some(id)) {
125+ acks.push(ack);
154126 }
155− state = State::ParseAcks(acks)
156127 }
128+ None => acks.push(ack),
157129 }
158130 };
159131 Ok(Response { acks, pack })