From be7bd3a20d82b3d5c7c511b9210b1227683536cb Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 8 Jul 2021 06:44:38 +0200 Subject: [PATCH] save --- src/main.rs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index 324c9cb..e8f8b35 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,11 +18,11 @@ use crate::ite::SuperIterator; use std::ops::Add; use std::path::{PathBuf, Path}; use serde::Deserialize; -use std::process::{Command, Stdio}; +use std::process::{Command, Stdio, Child}; use actix_web::http::{header, StatusCode}; use std::io; use std::collections::HashMap; -use std::io::{Read, BufRead, Write}; +use std::io::{Read, BufRead, Write, ErrorKind}; use futures::{StreamExt, TryStreamExt, future}; use actix_web::web::Buf; use actix_web::http::header::IntoHeaderValue; @@ -124,13 +124,13 @@ async fn git_main(web::Path((owner, reponame)): web::Path<(String, String)>, web GitMainTemplate { repo, browse : browse, root : path, user_opt : Some(user)} } //#[get("/git/{owner}/{repo}.git/{path:.*}")] -async fn git_proto(payload : web::Payload, web::Path((owner, reponame)): web::Path<(String, String)>, mut req: HttpRequest) -> impl Responder{ +async fn git_proto(payload : web::Payload, web::Path((owner, reponame)): web::Path<(String, String)>, mut req: HttpRequest) -> io::Result{ let mut cmd = Command::new("git"); cmd.arg("http-backend"); // Required environment variables cmd.env("REQUEST_METHOD", req.method().as_str()); - cmd.env("GIT_PROJECT_ROOT", "/home/hubert/test.git"); + cmd.env("GIT_PROJECT_ROOT", "/home/hubert"); cmd.env( "PATH_INFO", if req.path().starts_with('/') { @@ -146,7 +146,7 @@ async fn git_proto(payload : web::Payload, web::Path((owner, reponame)): web::Pa cmd.stderr(Stdio::inherit()) .stdout(Stdio::piped()) .stdin(Stdio::piped()); - let mut p = cmd.spawn()?; + let mut p: Child = cmd.spawn()?; //p.stdin.take().unwrap().write() payload.try_for_each(|bytes| { p.stdin.take().unwrap().write(bytes.bytes()); @@ -179,12 +179,18 @@ async fn git_proto(payload : web::Payload, web::Path((owner, reponame)): web::Pa let status_code : u16 = { let line = headers.remove("Status").unwrap_or_default(); + // println!("{:?}", &line); let line = line.into_iter().next().unwrap_or_default(); - let mut parts = line.splitn(1, ' '); - parts.next().unwrap_or("").parse().unwrap_or(200) + let parts : Vec<&str> = line.split(' ').collect(); + parts.into_iter().next().unwrap_or("").parse().unwrap_or(200) }; + // println!("{}", status_code); - let mut builder = HttpResponse::build(StatusCode::from_u16(status_code)?); + let statusCode = match StatusCode::from_u16(status_code) { + Ok(v) => {Ok(v)} + Err(ioe) => {Err(io::Error::new(ErrorKind::Other, "Invalid HTTP status code"))} + }; + let mut builder = HttpResponse::build(statusCode?); for (name, vec) in headers.iter() { for value in vec { builder.header(name, value.clone());