MCPcopy Create free account
hub / github.com/dashed/git-chain / display_list

Method display_list

src/chain.rs:148–243  ·  view source on GitHub ↗
(
        &self,
        git_chain: &GitChain,
        current_branch: &str,
        show_prs: bool,
    )

Source from the content-addressed store, hash-verified

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)) => {

Callers 3

display_statusMethod · 0.80
runFunction · 0.80
list_chainsMethod · 0.80

Calls 2

check_gh_cli_installedFunction · 0.85
display_ahead_behindMethod · 0.80

Tested by

no test coverage detected