git: Always reload current branch after pushing (#28327)

Closes #27347 

Release Notes:

- Fixed a bug causing the git panel to not update after pushing to a
remote
This commit is contained in:
Cole Miller 2025-04-08 22:16:03 -04:00 committed by GitHub
parent e66a24edcf
commit b687a5e56d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3263,7 +3263,7 @@ impl Repository {
remote: SharedString,
options: Option<PushOptions>,
askpass: AskPassDelegate,
_cx: &mut App,
cx: &mut Context<Self>,
) -> oneshot::Receiver<Result<RemoteCommandOutput>> {
let askpass_delegates = self.askpass_delegates.clone();
let askpass_id = util::post_inc(&mut self.latest_askpass_id);
@ -3276,25 +3276,52 @@ impl Repository {
})
.unwrap_or("");
let updates_tx = self
.git_store()
.and_then(|git_store| match &git_store.read(cx).state {
GitStoreState::Local { downstream, .. } => downstream
.as_ref()
.map(|downstream| downstream.updates_tx.clone()),
_ => None,
});
let this = cx.weak_entity();
self.send_job(
Some(format!("git push{} {} {}", args, branch, remote).into()),
move |git_repo, cx| async move {
Some(format!("git push {} {} {}", args, branch, remote).into()),
move |git_repo, mut cx| async move {
match git_repo {
RepositoryState::Local {
backend,
environment,
..
} => {
backend
let result = backend
.push(
branch.to_string(),
remote.to_string(),
options,
askpass,
environment.clone(),
cx,
cx.clone(),
)
.await
.await;
if result.is_ok() {
let branches = backend.branches().await?;
let branch = branches.into_iter().find(|branch| branch.is_head);
log::info!("head branch after scan is {branch:?}");
let snapshot = this.update(&mut cx, |this, cx| {
this.snapshot.branch = branch;
let snapshot = this.snapshot.clone();
cx.emit(RepositoryEvent::Updated { full_scan: false });
snapshot
})?;
if let Some(updates_tx) = updates_tx {
updates_tx
.unbounded_send(DownstreamUpdate::UpdateRepository(snapshot))
.ok();
}
}
result
}
RepositoryState::Remote { project_id, client } => {
askpass_delegates.lock().insert(askpass_id, askpass);