Skip to content

Commit

Permalink
devenv: remove code generation based on source code
Browse files Browse the repository at this point in the history
  • Loading branch information
sandydoo committed Feb 16, 2025
1 parent 1235cd1 commit 118c58b
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 83 deletions.
7 changes: 0 additions & 7 deletions devenv/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,13 +192,6 @@ pub enum Commands {
#[clap(long, default_value = "https://devenv.new")]
host: String,

#[arg(
long,
help = "Paths to exclude during generation.",
value_name = "PATH"
)]
exclude: Vec<PathBuf>,

// https://consoledonottrack.com/
#[clap(long, env = "DO_NOT_TRACK", action = clap::ArgAction::SetTrue)]
disable_telemetry: bool,
Expand Down
70 changes: 5 additions & 65 deletions devenv/src/devenv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,80 +203,20 @@ impl Devenv {

pub async fn generate(
&mut self,
description: Option<String>,
description: String,
host: &str,
exclude: Vec<PathBuf>,
disable_telemetry: bool,
) -> Result<()> {
let client = reqwest::Client::new();
let mut request = client
let request = client
.post(host)
.header(reqwest::header::USER_AGENT, crate_version!())
.query(&[("disable_telemetry", disable_telemetry)])
.header(reqwest::header::USER_AGENT, crate_version!());

let (asyncwriter, asyncreader) = tokio::io::duplex(256 * 1024);
let streamreader = tokio_util::io::ReaderStream::new(asyncreader);

let (body_sender, body) = match description {
Some(desc) => {
request = request.query(&[("q", desc)]);
(None, None)
}
None => {
let git_output = std::process::Command::new("git")
.args(["ls-files", "-z"])
.output()
.map_err(|_| {
miette::miette!("Failed to get list of files from git ls-files")
})?;

let files = String::from_utf8_lossy(&git_output.stdout)
.split('\0')
.filter(|s| !s.is_empty())
.filter(|s| !binaryornot::is_binary(s).unwrap_or(false))
.map(PathBuf::from)
.collect::<Vec<_>>();

if files.is_empty() {
warn!("No files found. Are you in a git repository?");
return Ok(());
}

if let Some(stderr) = String::from_utf8(git_output.stderr).ok() {
if !stderr.is_empty() {
warn!("{}", &stderr);
}
}

let body = reqwest::Body::wrap_stream(streamreader);

request = request
.body(body)
.header(reqwest::header::CONTENT_TYPE, "application/x-tar");

(Some(tokio_tar::Builder::new(asyncwriter)), Some(files))
}
};
.query(&[("q", description)]);

info!("Generating devenv.nix and devenv.yaml, this should take about a minute ...");

let response_future = request.send();

let tar_task = async {
if let (Some(mut builder), Some(files)) = (body_sender, body) {
for path in files {
if path.is_file() && !exclude.iter().any(|exclude| path.starts_with(exclude)) {
builder.append_path(&path).await?;
}
}
builder.finish().await?;
}
Ok::<(), std::io::Error>(())
};

let (response, _) = tokio::join!(response_future, tar_task);

let response = response.into_diagnostic()?;
let response = request.send().await.into_diagnostic()?;
let status = response.status();
if !status.is_success() {
let error_text = &response
Expand Down
12 changes: 1 addition & 11 deletions devenv/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,20 +135,10 @@ async fn main() -> Result<()> {
Commands::Generate {
description,
host,
exclude,
disable_telemetry,
} => {
devenv
.generate(
if description.is_empty() {
None
} else {
Some(description.join(" "))
},
&host,
exclude,
disable_telemetry,
)
.generate(description.join(" "), &host, disable_telemetry)
.await
}
Commands::Search { name } => devenv.search(&name).await,
Expand Down

0 comments on commit 118c58b

Please sign in to comment.