From 313a03e2b7afae34d83ec677d83d766eb3ffceeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Grythe=20St=C3=B8dle?= Date: Thu, 16 Jan 2020 05:47:56 +0100 Subject: fix(bug-report): Fix status code 414 when generated bug report is too long (#750) --- src/bug_report.rs | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/bug_report.rs b/src/bug_report.rs index e78644ac9..8e53c4e14 100644 --- a/src/bug_report.rs +++ b/src/bug_report.rs @@ -40,6 +40,7 @@ const UNKNOWN_SHELL: &str = ""; const UNKNOWN_TERMINAL: &str = ""; const UNKNOWN_VERSION: &str = ""; const UNKNOWN_CONFIG: &str = ""; +const GITHUB_CHAR_LIMIT: usize = 8100; // Magic number accepted by Github struct Environment { os_type: os_info::Type, @@ -50,18 +51,7 @@ struct Environment { } fn make_github_issue_link(starship_version: &str, environment: Environment) -> String { - let template_filename = urlencoding::encode("Bug_report.md"); - - let body = urlencoding::encode(&format!(" - -## Bug Report - -#### Current Behavior + let body = urlencoding::encode(&format!("#### Current Behavior #### Expected Behavior @@ -99,12 +89,17 @@ fn make_github_issue_link(starship_version: &str, environment: Environment) -> S os_version = environment.os_version, shell_config = environment.shell_info.config, starship_config = environment.starship_config, - )); + )) + .replace("%20", "+"); format!( "https://github.com/starship/starship/issues/new?template={}&body={}", - template_filename, body + urlencoding::encode("Bug_report.md"), + body ) + .chars() + .take(GITHUB_CHAR_LIMIT) + .collect() } #[derive(Debug)] @@ -184,8 +179,16 @@ fn get_config_path(shell: &str) -> Option { } fn get_starship_config() -> String { - dirs::home_dir() - .and_then(|home_dir| fs::read_to_string(home_dir.join(".config/starship.toml")).ok()) + std::env::var("STARSHIP_CONFIG") + .map(PathBuf::from) + .ok() + .or_else(|| { + dirs::home_dir().map(|mut home_dir| { + home_dir.push(".config/starship.toml"); + home_dir + }) + }) + .and_then(|config_path| fs::read_to_string(config_path).ok()) .unwrap_or_else(|| UNKNOWN_CONFIG.to_string()) } @@ -196,7 +199,7 @@ mod tests { use std::env; #[test] - fn test_make_github_issue_link() { + fn test_make_github_link() { let starship_version = "0.1.2"; let environment = Environment { os_type: os_info::Type::Linux, @@ -220,8 +223,8 @@ mod tests { assert!(link.contains("1.2.3")); assert!(link.contains("test_shell")); assert!(link.contains("2.3.4")); - assert!(link.contains("No%20config")); - assert!(link.contains("No%20Starship%20config")); + assert!(link.contains("No+config")); + assert!(link.contains("No+Starship+config")); } #[test] -- cgit v1.2.3