aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-29 00:43:25 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-29 00:43:25 +0300
commit1bb2676388a3541360ca106354075d67376a6843 (patch)
tree6dca6401bac8ad3364e25f9d4fc2b432b88f4661 /src
parentf4f17803c6c5b413ef6b43308cb6e0cfcb68224e (diff)
fix: clarify gh star prompt
Diffstat (limited to 'src')
-rw-r--r--src/update.rs42
1 files changed, 39 insertions, 3 deletions
diff --git a/src/update.rs b/src/update.rs
index 81cfb848..135fccfd 100644
--- a/src/update.rs
+++ b/src/update.rs
@@ -1628,6 +1628,25 @@ fn gh_auth_succeeds() -> bool {
command_succeeds("gh", &["auth", "status", "--hostname", "github.com"])
}
+fn gh_viewer_login() -> Option<String> {
+ let mut command = Command::new("gh");
+ command
+ .args(["api", "user", "--jq", ".login"])
+ .stdin(Stdio::null())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::null());
+
+ let Ok(Some(output)) = command_output_with_timeout(&mut command, GH_COMMAND_TIMEOUT) else {
+ return None;
+ };
+ if !output.status.success() {
+ return None;
+ }
+
+ let login = String::from_utf8_lossy(&output.stdout).trim().to_string();
+ (!login.is_empty()).then_some(login)
+}
+
fn gh_viewer_star_status() -> GithubStarStatus {
let mut command = Command::new("gh");
command
@@ -1666,9 +1685,14 @@ fn parse_star_prompt_response(input: &str) -> Option<bool> {
}
}
-fn prompt_to_star_repository() -> io::Result<bool> {
+fn star_prompt_message(viewer_login: &str) -> String {
+ format!("If herdr has been useful, star it using gh account {viewer_login}? [Y/n] ")
+}
+
+fn prompt_to_star_repository(viewer_login: &str) -> io::Result<bool> {
+ let prompt = star_prompt_message(viewer_login);
loop {
- eprint!("If herdr has been useful, would you like to star it? [Y/n] ");
+ eprint!("{prompt}");
io::stderr().flush()?;
let mut input = String::new();
@@ -1732,13 +1756,17 @@ fn maybe_offer_star_after_successful_update() {
GithubStarStatus::Unknown => return,
}
+ let Some(viewer_login) = gh_viewer_login() else {
+ return;
+ };
+
record_star_prompt_shown(&mut state);
if let Err(err) = save_star_prompt_state_to_path(&path, &state) {
tracing::warn!(err = %err, "failed to save GitHub star prompt state");
return;
}
- match prompt_to_star_repository() {
+ match prompt_to_star_repository(&viewer_login) {
Ok(true) => {
if star_repository_with_gh() {
state.known_starred = true;
@@ -2767,6 +2795,14 @@ mod tests {
}
#[test]
+ fn star_prompt_mentions_gh_account_when_known() {
+ assert_eq!(
+ star_prompt_message("ogulcancelik"),
+ "If herdr has been useful, star it using gh account ogulcancelik? [Y/n] "
+ );
+ }
+
+ #[test]
fn star_prompt_is_due_five_times_with_increasing_intervals() {
let mut state = StarPromptState::default();