(
&self,
git_chain: &GitChain,
current_branch: &str,
show_prs: bool,
)
| 146 | } |
| 147 | |
| 148 | pub fn display_list( |
| 149 | &self, |
| 150 | git_chain: &GitChain, |
| 151 | current_branch: &str, |
| 152 | show_prs: bool, |
| 153 | ) -> Result<(), Error> { |
| 154 | println!("{}", self.name); |
| 155 | |
| 156 | let mut branches = self.branches.clone(); |
| 157 | branches.reverse(); |
| 158 | |
| 159 | for (index, branch) in branches.iter().enumerate() { |
| 160 | let (marker, branch_name) = if branch.branch_name == current_branch { |
| 161 | ("➜ ", branch.branch_name.bold().to_string()) |
| 162 | } else { |
| 163 | ("", branch.branch_name.clone()) |
| 164 | }; |
| 165 | |
| 166 | let upstream = if index == branches.len() - 1 { |
| 167 | &self.root_branch |
| 168 | } else { |
| 169 | &branches[index + 1].branch_name |
| 170 | }; |
| 171 | |
| 172 | let ahead_behind_status = |
| 173 | self.display_ahead_behind(git_chain, upstream, &branch.branch_name)?; |
| 174 | |
| 175 | let mut status_line = if ahead_behind_status.is_empty() { |
| 176 | format!("{:>6}{}", marker, branch_name) |
| 177 | } else { |
| 178 | format!("{:>6}{} ⦁ {}", marker, branch_name, ahead_behind_status) |
| 179 | }; |
| 180 | |
| 181 | if show_prs && check_gh_cli_installed().is_ok() { |
| 182 | // Check for open pull requests for each branch |
| 183 | let output = Command::new("gh") |
| 184 | .arg("pr") |
| 185 | .arg("list") |
| 186 | .arg("--state") |
| 187 | .arg("all") |
| 188 | .arg("--head") |
| 189 | .arg(&branch.branch_name) |
| 190 | .arg("--json") |
| 191 | .arg("url,state") |
| 192 | .output(); |
| 193 | |
| 194 | match output { |
| 195 | Ok(output) if output.status.success() => { |
| 196 | let stdout = String::from_utf8_lossy(&output.stdout); |
| 197 | let pr_objects: Vec<serde_json::Value> = |
| 198 | serde_json::from_str(&stdout).unwrap_or_default(); |
| 199 | let pr_details: Vec<String> = pr_objects |
| 200 | .iter() |
| 201 | .filter_map(|pr| { |
| 202 | let url = pr.get("url").and_then(|url| url.as_str()); |
| 203 | let state = pr.get("state").and_then(|state| state.as_str()); |
| 204 | match (url, state) { |
| 205 | (Some(url), Some(state)) => { |
no test coverage detected