mirror of
https://github.com/gitbutlerapp/gitbutler.git
synced 2024-12-20 16:11:46 +03:00
Merged origin/master into Collapsable lane
This commit is contained in:
commit
c1e69998dc
@ -143,6 +143,9 @@ impl Repository {
|
||||
};
|
||||
|
||||
let mut callbacks = git2::RemoteCallbacks::new();
|
||||
if self.project.omit_certificate_check.unwrap_or(false) {
|
||||
callbacks.certificate_check(|_, _| Ok(git2::CertificateCheckStatus::CertificateOk));
|
||||
}
|
||||
callbacks.push_update_reference(move |refname, message| {
|
||||
tracing::debug!(
|
||||
project_id = %self.project.id,
|
||||
@ -194,6 +197,9 @@ impl Repository {
|
||||
|
||||
// Set the remote's callbacks
|
||||
let mut callbacks = git2::RemoteCallbacks::new();
|
||||
if self.project.omit_certificate_check.unwrap_or(false) {
|
||||
callbacks.certificate_check(|_, _| Ok(git2::CertificateCheckStatus::CertificateOk));
|
||||
}
|
||||
callbacks.push_update_reference(move |refname, message| {
|
||||
tracing::debug!(
|
||||
project_id = %self.project.id,
|
||||
|
@ -287,6 +287,9 @@ impl Repository {
|
||||
.ok_or(RemoteError::Auth)?;
|
||||
|
||||
let mut callbacks = git2::RemoteCallbacks::new();
|
||||
if self.project.omit_certificate_check.unwrap_or(false) {
|
||||
callbacks.certificate_check(|_, _| Ok(git2::CertificateCheckStatus::CertificateOk));
|
||||
}
|
||||
let bytes_pushed = Arc::new(AtomicUsize::new(0));
|
||||
let total_objects = Arc::new(AtomicUsize::new(0));
|
||||
{
|
||||
@ -353,12 +356,18 @@ impl Repository {
|
||||
let auth_flows = credentials.help(self, branch.remote())?;
|
||||
for (mut remote, callbacks) in auth_flows {
|
||||
if let Some(url) = remote.url().context("failed to get remote url")? {
|
||||
ssh::check_known_host(&url).context("failed to check known host")?;
|
||||
if !self.project.omit_certificate_check.unwrap_or(false) {
|
||||
ssh::check_known_host(&url).context("failed to check known host")?;
|
||||
}
|
||||
}
|
||||
for callback in callbacks {
|
||||
let mut cbs: git2::RemoteCallbacks = callback.into();
|
||||
if self.project.omit_certificate_check.unwrap_or(false) {
|
||||
cbs.certificate_check(|_, _| Ok(git2::CertificateCheckStatus::CertificateOk));
|
||||
}
|
||||
match remote.push(
|
||||
&[refspec.as_str()],
|
||||
Some(&mut git2::PushOptions::new().remote_callbacks(callback.into())),
|
||||
Some(&mut git2::PushOptions::new().remote_callbacks(cbs)),
|
||||
) {
|
||||
Ok(()) => {
|
||||
tracing::info!(
|
||||
@ -395,11 +404,17 @@ impl Repository {
|
||||
let auth_flows = credentials.help(self, remote_name)?;
|
||||
for (mut remote, callbacks) in auth_flows {
|
||||
if let Some(url) = remote.url().context("failed to get remote url")? {
|
||||
ssh::check_known_host(&url).context("failed to check known host")?;
|
||||
if !self.project.omit_certificate_check.unwrap_or(false) {
|
||||
ssh::check_known_host(&url).context("failed to check known host")?;
|
||||
}
|
||||
}
|
||||
for callback in callbacks {
|
||||
let mut fetch_opts = git2::FetchOptions::new();
|
||||
fetch_opts.remote_callbacks(callback.into());
|
||||
let mut cbs: git2::RemoteCallbacks = callback.into();
|
||||
if self.project.omit_certificate_check.unwrap_or(false) {
|
||||
cbs.certificate_check(|_, _| Ok(git2::CertificateCheckStatus::CertificateOk));
|
||||
}
|
||||
fetch_opts.remote_callbacks(cbs);
|
||||
fetch_opts.prune(git2::FetchPrune::On);
|
||||
|
||||
match remote.fetch(&[refspec], Some(&mut fetch_opts)) {
|
||||
|
@ -76,6 +76,8 @@ pub struct Project {
|
||||
pub gitbutler_code_push_state: Option<CodePushState>,
|
||||
#[serde(default)]
|
||||
pub project_data_last_fetch: Option<FetchResult>,
|
||||
#[serde(default)]
|
||||
pub omit_certificate_check: Option<bool>,
|
||||
}
|
||||
|
||||
impl AsRef<Project> for Project {
|
||||
|
@ -46,6 +46,7 @@ pub struct UpdateRequest {
|
||||
pub ok_with_force_push: Option<bool>,
|
||||
pub gitbutler_code_push_state: Option<project::CodePushState>,
|
||||
pub project_data_last_fetched: Option<project::FetchResult>,
|
||||
pub omit_certificate_check: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
@ -130,6 +131,10 @@ impl Storage {
|
||||
*project.ok_with_force_push = ok_with_force_push;
|
||||
}
|
||||
|
||||
if let Some(omit_certificate_check) = update_request.omit_certificate_check {
|
||||
project.omit_certificate_check = Some(omit_certificate_check);
|
||||
}
|
||||
|
||||
self.storage
|
||||
.write(PROJECTS_FILE, &serde_json::to_string_pretty(&projects)?)?;
|
||||
|
||||
|
@ -32,6 +32,7 @@ export type Project = {
|
||||
api?: CloudProject & { sync: boolean };
|
||||
preferred_key: Key;
|
||||
ok_with_force_push: boolean;
|
||||
omit_certificate_check: boolean | undefined;
|
||||
};
|
||||
|
||||
export class ProjectService {
|
||||
@ -70,6 +71,7 @@ export class ProjectService {
|
||||
api?: CloudProject & { sync: boolean };
|
||||
preferred_key?: Key;
|
||||
okWithForcePush?: boolean;
|
||||
omitCertificateCheck?: boolean;
|
||||
}) {
|
||||
await invoke<Project>('update_project', { project: params });
|
||||
this.reload();
|
||||
|
@ -7,11 +7,13 @@
|
||||
export let project: Project;
|
||||
|
||||
let allowForcePushing = project?.ok_with_force_push;
|
||||
let omitCertificateCheck = project?.omit_certificate_check;
|
||||
|
||||
const runCommitHooks = projectRunCommitHooks(project.id);
|
||||
const dispatch = createEventDispatcher<{
|
||||
updated: {
|
||||
ok_with_force_push: boolean;
|
||||
ok_with_force_push?: boolean;
|
||||
omit_certificate_check?: boolean;
|
||||
};
|
||||
}>();
|
||||
</script>
|
||||
@ -35,6 +37,23 @@
|
||||
never force push to the trunk.
|
||||
</p>
|
||||
|
||||
<form class="flex items-center gap-1">
|
||||
<Checkbox
|
||||
name="omit-certificate-check"
|
||||
checked={omitCertificateCheck}
|
||||
on:change={() => {
|
||||
omitCertificateCheck = !omitCertificateCheck;
|
||||
dispatch('updated', { omit_certificate_check: omitCertificateCheck });
|
||||
}}
|
||||
/>
|
||||
<label class="ml-2" for="allow-force-pushing">
|
||||
<div>Ignore host certificate checks</div>
|
||||
</label>
|
||||
</form>
|
||||
<p class="ml-7 text-light-700 dark:text-dark-200">
|
||||
Enabling this will ignore host certificate checks when authenticating with ssh.
|
||||
</p>
|
||||
|
||||
<form class="flex items-center gap-1">
|
||||
<Checkbox
|
||||
name="run-commit-hooks"
|
||||
|
@ -47,8 +47,9 @@
|
||||
});
|
||||
const onCloudUpdated = (e: { detail: Project }) =>
|
||||
projectService.updateProject({ ...$project$, ...e.detail });
|
||||
const onPreferencesUpdated = (e: { detail: { ok_with_force_push: boolean } }) =>
|
||||
projectService.updateProject({ ...$project$, ...e.detail });
|
||||
const onPreferencesUpdated = (e: {
|
||||
detail: { ok_with_force_push?: boolean; omit_certificate_check?: boolean };
|
||||
}) => projectService.updateProject({ ...$project$, ...e.detail });
|
||||
const onDetailsUpdated = async (e: { detail: Project }) => {
|
||||
const api =
|
||||
$user$ && e.detail.api
|
||||
|
Loading…
Reference in New Issue
Block a user