Compare commits
8 Commits
ex-bazel-g
...
coles-test
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
055b1433b1 | ||
|
|
59bdf1de5d | ||
|
|
4334ab6ac2 | ||
|
|
106c8b8c2c | ||
|
|
2044ecb9ac | ||
|
|
3a3d0832e2 | ||
|
|
b7ae52d124 | ||
|
|
62faf10793 |
@@ -933,6 +933,7 @@
|
||||
"ctrl-g ctrl-g": "git::Fetch",
|
||||
"ctrl-g up": "git::Push",
|
||||
"ctrl-g down": "git::Pull",
|
||||
"ctrl-g shift-down": "git::PullRebase",
|
||||
"ctrl-g shift-up": "git::ForcePush",
|
||||
"ctrl-g d": "git::Diff",
|
||||
"ctrl-g backspace": "git::RestoreTrackedFiles",
|
||||
|
||||
@@ -1026,6 +1026,7 @@
|
||||
"ctrl-g ctrl-g": "git::Fetch",
|
||||
"ctrl-g up": "git::Push",
|
||||
"ctrl-g down": "git::Pull",
|
||||
"ctrl-g shift-down": "git::PullRebase",
|
||||
"ctrl-g shift-up": "git::ForcePush",
|
||||
"ctrl-g d": "git::Diff",
|
||||
"ctrl-g backspace": "git::RestoreTrackedFiles",
|
||||
|
||||
@@ -943,6 +943,7 @@
|
||||
"ctrl-g ctrl-g": "git::Fetch",
|
||||
"ctrl-g up": "git::Push",
|
||||
"ctrl-g down": "git::Pull",
|
||||
"ctrl-g shift-down": "git::PullRebase",
|
||||
"ctrl-g shift-up": "git::ForcePush",
|
||||
"ctrl-g d": "git::Diff",
|
||||
"ctrl-g backspace": "git::RestoreTrackedFiles",
|
||||
|
||||
@@ -530,6 +530,7 @@ impl GitRepository for FakeGitRepository {
|
||||
&self,
|
||||
_branch: String,
|
||||
_remote: String,
|
||||
_rebase: bool,
|
||||
_askpass: AskPassDelegate,
|
||||
_env: Arc<HashMap<String, String>>,
|
||||
_cx: AsyncApp,
|
||||
|
||||
@@ -72,6 +72,8 @@ actions!(
|
||||
ForcePush,
|
||||
/// Pulls changes from the remote repository.
|
||||
Pull,
|
||||
/// Pulls changes from the remote repository with rebase.
|
||||
PullRebase,
|
||||
/// Fetches changes from the remote repository.
|
||||
Fetch,
|
||||
/// Fetches changes from a specific remote.
|
||||
|
||||
@@ -480,6 +480,7 @@ pub trait GitRepository: Send + Sync {
|
||||
&self,
|
||||
branch_name: String,
|
||||
upstream_name: String,
|
||||
rebase: bool,
|
||||
askpass: AskPassDelegate,
|
||||
env: Arc<HashMap<String, String>>,
|
||||
// This method takes an AsyncApp to ensure it's invoked on the main thread,
|
||||
@@ -1578,6 +1579,7 @@ impl GitRepository for RealGitRepository {
|
||||
&self,
|
||||
branch_name: String,
|
||||
remote_name: String,
|
||||
rebase: bool,
|
||||
ask_pass: AskPassDelegate,
|
||||
env: Arc<HashMap<String, String>>,
|
||||
cx: AsyncApp,
|
||||
@@ -1591,7 +1593,13 @@ impl GitRepository for RealGitRepository {
|
||||
command
|
||||
.envs(env.iter())
|
||||
.current_dir(&working_directory?)
|
||||
.args(["pull"])
|
||||
.arg("pull");
|
||||
|
||||
if rebase {
|
||||
command.arg("--rebase");
|
||||
}
|
||||
|
||||
command
|
||||
.arg(remote_name)
|
||||
.arg(branch_name)
|
||||
.stdout(smol::process::Stdio::piped())
|
||||
|
||||
@@ -2211,7 +2211,7 @@ impl GitPanel {
|
||||
.detach();
|
||||
}
|
||||
|
||||
pub(crate) fn pull(&mut self, window: &mut Window, cx: &mut Context<Self>) {
|
||||
pub(crate) fn pull(&mut self, rebase: bool, window: &mut Window, cx: &mut Context<Self>) {
|
||||
if !self.can_push_and_pull(cx) {
|
||||
return;
|
||||
}
|
||||
@@ -2246,6 +2246,7 @@ impl GitPanel {
|
||||
repo.pull(
|
||||
branch.name().to_owned().into(),
|
||||
remote.name.clone(),
|
||||
rebase,
|
||||
askpass,
|
||||
cx,
|
||||
)
|
||||
|
||||
@@ -124,7 +124,15 @@ pub fn init(cx: &mut App) {
|
||||
return;
|
||||
};
|
||||
panel.update(cx, |panel, cx| {
|
||||
panel.pull(window, cx);
|
||||
panel.pull(false, window, cx);
|
||||
});
|
||||
});
|
||||
workspace.register_action(|workspace, _: &git::PullRebase, window, cx| {
|
||||
let Some(panel) = workspace.panel::<git_panel::GitPanel>(cx) else {
|
||||
return;
|
||||
};
|
||||
panel.update(cx, |panel, cx| {
|
||||
panel.pull(true, window, cx);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -595,6 +603,7 @@ mod remote_button {
|
||||
.action("Fetch", git::Fetch.boxed_clone())
|
||||
.action("Fetch From", git::FetchFrom.boxed_clone())
|
||||
.action("Pull", git::Pull.boxed_clone())
|
||||
.action("Pull (Rebase)", git::PullRebase.boxed_clone())
|
||||
.separator()
|
||||
.action("Push", git::Push.boxed_clone())
|
||||
.action("Push To", git::PushTo.boxed_clone())
|
||||
|
||||
@@ -5,9 +5,9 @@ use collections::HashMap;
|
||||
use futures::{AsyncBufReadExt, StreamExt as _};
|
||||
use gpui::{App, AsyncApp, SharedString, Task};
|
||||
use http_client::github::{AssetKind, GitHubLspBinaryVersion, latest_github_release};
|
||||
use languaGe::{ContextProvider, LspAdapter, LspAdapterDelegate};
|
||||
use language::language_settings::language_settings;
|
||||
use language::{ContextLocation, LanguageToolchainStore, LspInstaller};
|
||||
use language::{ContextProvider, LspAdapter, LspAdapterDelegate};
|
||||
use language::{LanguageName, ManifestName, ManifestProvider, ManifestQuery};
|
||||
use language::{Toolchain, ToolchainList, ToolchainLister, ToolchainMetadata};
|
||||
use lsp::LanguageServerBinary;
|
||||
|
||||
@@ -1716,10 +1716,11 @@ impl GitStore {
|
||||
|
||||
let branch_name = envelope.payload.branch_name.into();
|
||||
let remote_name = envelope.payload.remote_name.into();
|
||||
let rebase = envelope.payload.rebase;
|
||||
|
||||
let remote_message = repository_handle
|
||||
.update(&mut cx, |repository_handle, cx| {
|
||||
repository_handle.pull(branch_name, remote_name, askpass, cx)
|
||||
repository_handle.pull(branch_name, remote_name, rebase, askpass, cx)
|
||||
})?
|
||||
.await??;
|
||||
|
||||
@@ -4226,6 +4227,7 @@ impl Repository {
|
||||
&mut self,
|
||||
branch: SharedString,
|
||||
remote: SharedString,
|
||||
rebase: bool,
|
||||
askpass: AskPassDelegate,
|
||||
_cx: &mut App,
|
||||
) -> oneshot::Receiver<Result<RemoteCommandOutput>> {
|
||||
@@ -4233,50 +4235,55 @@ impl Repository {
|
||||
let askpass_id = util::post_inc(&mut self.latest_askpass_id);
|
||||
let id = self.id;
|
||||
|
||||
self.send_job(
|
||||
Some(format!("git pull {} {}", remote, branch).into()),
|
||||
move |git_repo, cx| async move {
|
||||
match git_repo {
|
||||
RepositoryState::Local {
|
||||
backend,
|
||||
environment,
|
||||
..
|
||||
} => {
|
||||
backend
|
||||
.pull(
|
||||
branch.to_string(),
|
||||
remote.to_string(),
|
||||
askpass,
|
||||
environment.clone(),
|
||||
cx,
|
||||
)
|
||||
.await
|
||||
}
|
||||
RepositoryState::Remote { project_id, client } => {
|
||||
askpass_delegates.lock().insert(askpass_id, askpass);
|
||||
let _defer = util::defer(|| {
|
||||
let askpass_delegate = askpass_delegates.lock().remove(&askpass_id);
|
||||
debug_assert!(askpass_delegate.is_some());
|
||||
});
|
||||
let response = client
|
||||
.request(proto::Pull {
|
||||
project_id: project_id.0,
|
||||
repository_id: id.to_proto(),
|
||||
askpass_id,
|
||||
branch_name: branch.to_string(),
|
||||
remote_name: remote.to_string(),
|
||||
})
|
||||
.await
|
||||
.context("sending pull request")?;
|
||||
let status = if rebase {
|
||||
Some(format!("git pull --rebase {} {}", remote, branch).into())
|
||||
} else {
|
||||
Some(format!("git pull {} {}", remote, branch).into())
|
||||
};
|
||||
|
||||
Ok(RemoteCommandOutput {
|
||||
stdout: response.stdout,
|
||||
stderr: response.stderr,
|
||||
})
|
||||
}
|
||||
self.send_job(status, move |git_repo, cx| async move {
|
||||
match git_repo {
|
||||
RepositoryState::Local {
|
||||
backend,
|
||||
environment,
|
||||
..
|
||||
} => {
|
||||
backend
|
||||
.pull(
|
||||
branch.to_string(),
|
||||
remote.to_string(),
|
||||
rebase,
|
||||
askpass,
|
||||
environment.clone(),
|
||||
cx,
|
||||
)
|
||||
.await
|
||||
}
|
||||
},
|
||||
)
|
||||
RepositoryState::Remote { project_id, client } => {
|
||||
askpass_delegates.lock().insert(askpass_id, askpass);
|
||||
let _defer = util::defer(|| {
|
||||
let askpass_delegate = askpass_delegates.lock().remove(&askpass_id);
|
||||
debug_assert!(askpass_delegate.is_some());
|
||||
});
|
||||
let response = client
|
||||
.request(proto::Pull {
|
||||
project_id: project_id.0,
|
||||
repository_id: id.to_proto(),
|
||||
askpass_id,
|
||||
rebase,
|
||||
branch_name: branch.to_string(),
|
||||
remote_name: remote.to_string(),
|
||||
})
|
||||
.await
|
||||
.context("sending pull request")?;
|
||||
|
||||
Ok(RemoteCommandOutput {
|
||||
stdout: response.stdout,
|
||||
stderr: response.stderr,
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn spawn_set_index_text_job(
|
||||
|
||||
@@ -405,6 +405,7 @@ message Pull {
|
||||
string remote_name = 4;
|
||||
string branch_name = 5;
|
||||
uint64 askpass_id = 6;
|
||||
bool rebase = 7;
|
||||
}
|
||||
|
||||
message RemoteMessageResponse {
|
||||
|
||||
@@ -179,6 +179,7 @@ When viewing files with changes, Zed displays diff hunks that can be expanded or
|
||||
| {#action git::Push} | {#kb git::Push} |
|
||||
| {#action git::ForcePush} | {#kb git::ForcePush} |
|
||||
| {#action git::Pull} | {#kb git::Pull} |
|
||||
| {#action git::PullRebase} | {#kb git::PullRebase} |
|
||||
| {#action git::Fetch} | {#kb git::Fetch} |
|
||||
| {#action git::Diff} | {#kb git::Diff} |
|
||||
| {#action git::Restore} | {#kb git::Restore} |
|
||||
|
||||
Reference in New Issue
Block a user