diff --git a/bobbin/crates/knot-ingest/src/firehose.rs b/bobbin/crates/knot-ingest/src/firehose.rs index 9c3f4263d..89afc81dc 100644 --- a/bobbin/crates/knot-ingest/src/firehose.rs +++ b/bobbin/crates/knot-ingest/src/firehose.rs @@ -491,11 +491,7 @@ mod tests { let full = invite_record(collection, "2026-06-01T00:00:00Z", "did:plc:akshay"); let knot = Did::::new_owned("did:web:knot.oyster.cafe").unwrap(); let cases = [ - ( - "record key that isn't a did", - "3lkm2xqbolt2s", - full.clone(), - ), + ("record key that isn't a did", "3lkm2xqbolt2s", full.clone()), ( "body cut short of its last field", "did:plc:limpet", diff --git a/bobbin/crates/resolver/src/legacy_upgrade.rs b/bobbin/crates/resolver/src/legacy_upgrade.rs index 8016fe5c4..8aa9b7804 100644 --- a/bobbin/crates/resolver/src/legacy_upgrade.rs +++ b/bobbin/crates/resolver/src/legacy_upgrade.rs @@ -3,8 +3,8 @@ use bobbin_types::com_atproto::repo::strong_ref::StrongRef; use bobbin_types::edges::{ExtractError, Record}; use bobbin_types::legacy::{ LEGACY_COMMENT_SENTINEL_CID, LegacyCollaborator, LegacyIssue, LegacyIssueComment, - LegacyKnotMember, LegacyPublicKey, LegacyPull, LegacyPullComment, LegacyRecord, - LegacyRepo, LegacySource, LegacyStar, LegacyTarget, + LegacyKnotMember, LegacyPublicKey, LegacyPull, LegacyPullComment, LegacyRecord, LegacyRepo, + LegacySource, LegacyStar, LegacyTarget, }; use bobbin_types::sh_tangled::feed::comment::Comment as FeedComment; use bobbin_types::sh_tangled::feed::star::{Repo as StarRepo, Star, StarString, StarSubject}; diff --git a/bobbin/crates/types/src/legacy.rs b/bobbin/crates/types/src/legacy.rs index 9b52afa53..85933304f 100644 --- a/bobbin/crates/types/src/legacy.rs +++ b/bobbin/crates/types/src/legacy.rs @@ -174,7 +174,6 @@ pub struct LegacyCollaborator { pub extra_data: Option>>, } - #[derive(Debug, Deserialize)] #[serde( rename_all = "camelCase", diff --git a/crates/gix-receive-pack/src/advertisement.rs b/crates/gix-receive-pack/src/advertisement.rs index d51ba405c..89b9654ee 100644 --- a/crates/gix-receive-pack/src/advertisement.rs +++ b/crates/gix-receive-pack/src/advertisement.rs @@ -151,7 +151,10 @@ mod tests { #[test] fn a_line_without_a_space_is_rejected() { - assert!(matches!(from_v1_lines(A.into()), Err(Error::MalformedRefLine(_)))); + assert!(matches!( + from_v1_lines(A.into()), + Err(Error::MalformedRefLine(_)) + )); } #[test] @@ -164,7 +167,8 @@ mod tests { fn object_format_defaults_to_sha1() { let advertised = |caps: &str| { let (capabilities, _) = - gix_transport::client::Capabilities::from_bytes(format!("\0{caps}").as_bytes()).unwrap(); + gix_transport::client::Capabilities::from_bytes(format!("\0{caps}").as_bytes()) + .unwrap(); ReceivePackAdvertisement { server_protocol_version: gix_transport::Protocol::V1, capabilities, @@ -172,9 +176,14 @@ mod tests { advertised_haves: Vec::new(), } }; - assert_eq!(advertised("report-status").object_hash().unwrap(), gix_hash::Kind::Sha1); assert_eq!( - advertised("report-status object-format=sha256").object_hash().unwrap(), + advertised("report-status").object_hash().unwrap(), + gix_hash::Kind::Sha1 + ); + assert_eq!( + advertised("report-status object-format=sha256") + .object_hash() + .unwrap(), gix_hash::Kind::Sha256 ); assert!(matches!( diff --git a/crates/gix-receive-pack/src/command.rs b/crates/gix-receive-pack/src/command.rs index 5130e1000..c8fbb3d8b 100644 --- a/crates/gix-receive-pack/src/command.rs +++ b/crates/gix-receive-pack/src/command.rs @@ -134,7 +134,8 @@ mod tests { fn advertised(caps: &str) -> ReceivePackAdvertisement { let (capabilities, _) = - gix_transport::client::Capabilities::from_bytes(format!("\0{caps}").as_bytes()).unwrap(); + gix_transport::client::Capabilities::from_bytes(format!("\0{caps}").as_bytes()) + .unwrap(); ReceivePackAdvertisement { server_protocol_version: gix_transport::Protocol::V1, capabilities, @@ -174,7 +175,9 @@ mod tests { block.to_str().unwrap(), format!( "{}{}0000", - pkt(&format!("{A} {B} refs/heads/main\0report-status side-band-64k")), + pkt(&format!( + "{A} {B} refs/heads/main\0report-status side-band-64k" + )), pkt(&format!("{A} {B} refs/heads/next")) ), "one NUL in the whole block, and exactly one newline per line" @@ -231,7 +234,10 @@ mod tests { ) .unwrap() }; - assert!(one(&[]).ends_with(b"0000"), "one flush when there are no options"); + assert!( + one(&[]).ends_with(b"0000"), + "one flush when there are no options" + ); assert_eq!( one(&["ci.skip".into()]).to_str().unwrap(), format!( @@ -263,10 +269,17 @@ mod tests { assert_eq!(caps, "report-status ofs-delta side-band-64k agent=gix/1.0"); let bare = advertised("report-status"); - let caps = - select_capabilities(&bare.capabilities, &[update("refs/heads/main", A, B)], &opts(), Some("gix/1.0")) - .unwrap(); - assert_eq!(caps, "report-status", "no agent, no side-band, no ofs-delta"); + let caps = select_capabilities( + &bare.capabilities, + &[update("refs/heads/main", A, B)], + &opts(), + Some("gix/1.0"), + ) + .unwrap(); + assert_eq!( + caps, "report-status", + "no agent, no side-band, no ofs-delta" + ); } #[test] @@ -274,7 +287,10 @@ mod tests { let adv = advertised("report-status"); let up = [update("refs/heads/main", A, B)]; - let atomic = Options { atomic: true, ..opts() }; + let atomic = Options { + atomic: true, + ..opts() + }; assert!(matches!( select_capabilities(&adv.capabilities, &up, &atomic, None), Err(Error::UnsupportedCapability("atomic")) @@ -295,10 +311,24 @@ mod tests { fn deleting_needs_delete_refs_but_never_sends_it() { let delete = [update("refs/heads/gone", A, NULL)]; assert!(matches!( - select_capabilities(&advertised("report-status").capabilities, &delete, &opts(), None), + select_capabilities( + &advertised("report-status").capabilities, + &delete, + &opts(), + None + ), Err(Error::UnsupportedCapability("delete-refs")) )); - let caps = select_capabilities(&advertised("report-status delete-refs").capabilities, &delete, &opts(), None).unwrap(); - assert_eq!(caps, "report-status", "the client does not echo `delete-refs`"); + let caps = select_capabilities( + &advertised("report-status delete-refs").capabilities, + &delete, + &opts(), + None, + ) + .unwrap(); + assert_eq!( + caps, "report-status", + "the client does not echo `delete-refs`" + ); } } diff --git a/crates/gix-receive-pack/src/report.rs b/crates/gix-receive-pack/src/report.rs index 6915b3f68..26a0b1370 100644 --- a/crates/gix-receive-pack/src/report.rs +++ b/crates/gix-receive-pack/src/report.rs @@ -11,12 +11,15 @@ use crate::RefUpdateStatus; /// /// Stops at the first flush, which is the report's own terminator. pub(crate) fn unframe(mut input: &[u8]) -> Result { - use gix_packetline::decode::{streaming, Stream}; + use gix_packetline::decode::{Stream, streaming}; let mut out = BString::default(); while !input.is_empty() { let (line, consumed) = match streaming(input)? { - Stream::Complete { line, bytes_consumed } => (line, bytes_consumed), + Stream::Complete { + line, + bytes_consumed, + } => (line, bytes_consumed), Stream::Incomplete { .. } => break, }; input = &input[consumed..]; @@ -39,7 +42,9 @@ pub enum Error { Unpack(BString), #[error("the remote sent no report at all")] Empty, - #[error("expected `unpack `, `ok ` or `ng ` in the report, got {0:?}")] + #[error( + "expected `unpack `, `ok ` or `ng ` in the report, got {0:?}" + )] MalformedLine(BString), } @@ -125,15 +130,18 @@ mod tests { #[test] fn every_ref_rejected_is_still_a_completed_exchange() { - let report = parse_report_v1("unpack ok\nng refs/heads/main pre-receive hook declined\n".into()) - .expect("the pack unpacked"); + let report = + parse_report_v1("unpack ok\nng refs/heads/main pre-receive hook declined\n".into()) + .expect("the pack unpacked"); assert_eq!(report, [ng("refs/heads/main", "pre-receive hook declined")]); } #[test] fn a_failed_unpack_discards_the_per_ref_lines() { - let err = parse_report_v1("unpack index-pack abnormal exit\nng refs/heads/main unpacker error\n".into()) - .unwrap_err(); + let err = parse_report_v1( + "unpack index-pack abnormal exit\nng refs/heads/main unpacker error\n".into(), + ) + .unwrap_err(); assert_eq!(err, Error::Unpack("index-pack abnormal exit".into())); } @@ -150,7 +158,10 @@ mod tests { let framed = b"000eunpack ok\n0017ok refs/heads/main\n0000"; let text = unframe(framed).expect("well-formed framing"); assert_eq!(text, "unpack ok\nok refs/heads/main\n"); - assert_eq!(parse_report_v1(text.as_ref()).unwrap(), [ok("refs/heads/main")]); + assert_eq!( + parse_report_v1(text.as_ref()).unwrap(), + [ok("refs/heads/main")] + ); // Trailing junk after the report's own flush is not part of the report. assert_eq!(unframe(b"000eunpack ok\n0000ffff").unwrap(), "unpack ok\n"); diff --git a/crates/gix-receive-pack/src/session.rs b/crates/gix-receive-pack/src/session.rs index c1c97b7ee..5aa37e1c0 100644 --- a/crates/gix-receive-pack/src/session.rs +++ b/crates/gix-receive-pack/src/session.rs @@ -4,12 +4,16 @@ use std::sync::atomic::{AtomicBool, Ordering}; use futures_lite::{AsyncBufReadExt as _, AsyncWriteExt}; use gix_features::progress::Progress; use gix_object::bstr::{BString, ByteSlice, ByteVec}; -use gix_transport::client::async_io::{HandleProgress, ReadlineBufRead, SetServiceResponse, Transport}; -use gix_transport::client::{MessageKind, WriteMode}; use gix_transport::Service; +use gix_transport::client::async_io::{ + HandleProgress, ReadlineBufRead, SetServiceResponse, Transport, +}; +use gix_transport::client::{MessageKind, WriteMode}; use crate::command::{encode_command_block, select_capabilities}; -use crate::{advertisement, report, Error, Options, ReceivePackAdvertisement, RefUpdateStatus, Update}; +use crate::{ + Error, Options, ReceivePackAdvertisement, RefUpdateStatus, Update, advertisement, report, +}; pub struct Session<'a, T> { transport: &'a mut T, @@ -23,10 +27,7 @@ where T: Transport, { /// Perform the `git-receive-pack` handshake over `transport` and capture what the remote said. - pub async fn handshake( - transport: &'a mut T, - agent: Option<&'a str>, - ) -> Result { + pub async fn handshake(transport: &'a mut T, agent: Option<&'a str>) -> Result { // Scoped because `SetServiceResponse` borrows `transport` mutably: everything it owns has // to become owned data before `Self` can take the transport back — rust-lang/rust#76149. let advertised = { @@ -99,15 +100,16 @@ where progress: &mut impl Progress, should_interrupt: &AtomicBool, ) -> Result, Error> { - let capabilities = select_capabilities(&self.advertised.capabilities, updates, &opts, self.agent)?; + let capabilities = + select_capabilities(&self.advertised.capabilities, updates, &opts, self.agent)?; let commands = encode_command_block(updates, capabilities.as_bstr(), opts.push_options)?; // `Binary` maps to `PostBodyDataKind::Unbounded`, which puts an HTTP backend into streaming // mode instead of buffering the whole packfile. `MessageKind::Flush` is inert: only // `into_read()` writes it, and we take `into_parts()` — our flush is already in `commands`. - let request = self - .transport - .request(WriteMode::Binary, MessageKind::Flush, trace_packetlines)?; + let request = + self.transport + .request(WriteMode::Binary, MessageKind::Flush, trace_packetlines)?; // `RequestWriter`'s `AsyncWrite` frames every write as a packet line, even under `Binary`; // `into_parts()` gives the unwrapped writer. The commands are framed already, and the pack @@ -179,7 +181,11 @@ where } } - let lines = if sideband { report::unframe(&lines)? } else { lines }; + let lines = if sideband { + report::unframe(&lines)? + } else { + lines + }; Ok(report::parse_report_v1(lines.as_bstr())?) } } diff --git a/crates/tangled-axum/src/atproto.rs b/crates/tangled-axum/src/atproto.rs index 055466d8f..c5d47649b 100644 --- a/crates/tangled-axum/src/atproto.rs +++ b/crates/tangled-axum/src/atproto.rs @@ -136,11 +136,9 @@ where .map(|key| match key.codec { KeyCodec::P256 => Ok(service_auth::PublicKey::from_p256_bytes(&key.bytes)), KeyCodec::Secp256k1 => Ok(service_auth::PublicKey::from_k256_bytes(&key.bytes)), - codec => { - Err(ServiceAuthError::InvalidKey(format!( - "{codec:?} does not sign service auth tokens" - ))) - } + codec => Err(ServiceAuthError::InvalidKey(format!( + "{codec:?} does not sign service auth tokens" + ))), })???; Ok(signing_key) diff --git a/flake.nix b/flake.nix index 8df8976c9..075b7ed84 100644 --- a/flake.nix +++ b/flake.nix @@ -289,6 +289,7 @@ alejandra = { command = pkgs.lib.getExe pkgs.alejandra; includes = ["*.nix"]; + excludes = ["nix/Cargo.nix"]; }; gofmt = { @@ -301,7 +302,7 @@ command = pkgs.lib.getExe' fenix.packages.${system}.stable.rustfmt "rustfmt"; options = ["--edition" "2024"]; includes = ["*.rs"]; - excludes = ["**/src/_lex/**"]; + excludes = ["**/src/_lex/**" "**/src/gen/**"]; }; prettier = { diff --git a/gitmirror/crates/gitmirror-ingest/src/lib.rs b/gitmirror/crates/gitmirror-ingest/src/lib.rs index e69de29bb..8b1378917 100644 --- a/gitmirror/crates/gitmirror-ingest/src/lib.rs +++ b/gitmirror/crates/gitmirror-ingest/src/lib.rs @@ -0,0 +1 @@ + diff --git a/gitmirror/crates/gitmirror-xrpc/src/error.rs b/gitmirror/crates/gitmirror-xrpc/src/error.rs index 5978910e4..638df661a 100644 --- a/gitmirror/crates/gitmirror-xrpc/src/error.rs +++ b/gitmirror/crates/gitmirror-xrpc/src/error.rs @@ -1,4 +1,7 @@ -use axum::{Json, response::{IntoResponse, Response}}; +use axum::{ + Json, + response::{IntoResponse, Response}, +}; use reqwest::StatusCode; use serde_json::json; use tracing::error; diff --git a/gitmirror/crates/gitmirror-xrpc/src/git_transport.rs b/gitmirror/crates/gitmirror-xrpc/src/git_transport.rs index 747cf0999..9c5e89fdb 100644 --- a/gitmirror/crates/gitmirror-xrpc/src/git_transport.rs +++ b/gitmirror/crates/gitmirror-xrpc/src/git_transport.rs @@ -88,7 +88,10 @@ impl TransportWithoutIO for HttpTransport { false } - fn configure(&mut self, _config: &dyn Any) -> Result<(), Box> { + fn configure( + &mut self, + _config: &dyn Any, + ) -> Result<(), Box> { Ok(()) } } @@ -102,7 +105,10 @@ impl async_io::Transport for HttpTransport { service: Service, _extra_parameters: &'a [(&'a str, Option<&'a str>)], ) -> Result, client::Error> { - let url = append_url(&self.url, &format!("info/refs?service={}", service.as_str())); + let url = append_url( + &self.url, + &format!("info/refs?service={}", service.as_str()), + ); let response = self .http .get(url) @@ -128,9 +134,13 @@ impl async_io::Transport for HttpTransport { let line_ = line_reader .peek_line() .await - .ok_or(client::Error::ExpectedLine("capabilities, version or service"))???; + .ok_or(client::Error::ExpectedLine( + "capabilities, version or service", + ))???; let line = line_.as_text().ok_or(client::Error::ExpectedLine("text"))?; - line.as_bstr().strip_prefix(b"# service=").map(<[u8]>::to_vec) + line.as_bstr() + .strip_prefix(b"# service=") + .map(<[u8]>::to_vec) }; if let Some(announced_service) = announced_service { if announced_service != service.as_str().as_bytes() { @@ -179,7 +189,10 @@ impl async_io::Transport for HttpTransport { let response = http .post(url) .header(reqwest::header::USER_AGENT, USER_AGENT) - .header(reqwest::header::CONTENT_TYPE, content_type(service, "request")) + .header( + reqwest::header::CONTENT_TYPE, + content_type(service, "request"), + ) .header(reqwest::header::ACCEPT, content_type(service, "result")) .bearer_auth(&token) .body(body) @@ -215,7 +228,11 @@ fn content_type(service: Service, kind: &str) -> String { } /// Reject anything but the smart protocol, which is the only one either side speaks. -fn check_content_type(response: &reqwest::Response, service: Service, kind: &str) -> io::Result<()> { +fn check_content_type( + response: &reqwest::Response, + service: Service, + kind: &str, +) -> io::Result<()> { let wanted = content_type(service, kind); let found = response .headers() @@ -234,7 +251,11 @@ fn check_content_type(response: &reqwest::Response, service: Service, kind: &str struct BodyWriter(Rc>>); impl AsyncWrite for BodyWriter { - fn poll_write(self: Pin<&mut Self>, _cx: &mut Context<'_>, buf: &[u8]) -> Poll> { + fn poll_write( + self: Pin<&mut Self>, + _cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { self.0.borrow_mut().extend_from_slice(buf); Poll::Ready(Ok(buf.len())) } @@ -276,7 +297,11 @@ impl ResponseBody { } impl AsyncRead for ResponseBody { - fn poll_read(self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut [u8]) -> Poll> { + fn poll_read( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &mut [u8], + ) -> Poll> { let this = self.get_mut(); if let Some(pending) = this.pending.as_mut() { let body = ready!(pending.as_mut().poll(cx)); @@ -292,8 +317,8 @@ impl AsyncRead for ResponseBody { mod tests { use super::*; use futures_lite::{AsyncBufReadExt as _, AsyncWriteExt as _}; - use gix_transport::client::async_io::Transport as _; use gix_transport::client::async_io::ReadlineBufRead as _; + use gix_transport::client::async_io::Transport as _; use tokio::io::{AsyncReadExt as _, AsyncWriteExt as _}; fn pkt(line: &str) -> String { @@ -315,7 +340,11 @@ mod tests { let mut request = Vec::new(); let mut byte = [0u8; 1]; while !request.ends_with(b"\r\n\r\n") { - assert_eq!(socket.read(&mut byte).await.unwrap(), 1, "request cut short"); + assert_eq!( + socket.read(&mut byte).await.unwrap(), + 1, + "request cut short" + ); request.push(byte[0]); } let head = String::from_utf8(request).unwrap().to_lowercase(); @@ -359,7 +388,9 @@ mod tests { format!( "{}0000{}0000", pkt("# service=git-receive-pack\n"), - pkt(&format!("{tip} refs/heads/main\0report-status side-band-64k\n")), + pkt(&format!( + "{tip} refs/heads/main\0report-status side-band-64k\n" + )), ), format!("{}{}0000", pkt("unpack ok\n"), pkt("ok refs/heads/main\n")), ]) @@ -369,7 +400,10 @@ mod tests { HttpTransport::new(reqwest::Client::new(), url, "a.service.jwt".to_owned()); // Scoped: the response borrows the transport, which the request below needs back. { - let response = transport.handshake(Service::ReceivePack, &[]).await.unwrap(); + let response = transport + .handshake(Service::ReceivePack, &[]) + .await + .unwrap(); assert_eq!(response.actual_protocol, Protocol::V1); assert!(response.capabilities.contains("report-status")); let mut refs = response.refs.expect("v1 advertises refs"); diff --git a/gitmirror/crates/gitmirror-xrpc/src/lib.rs b/gitmirror/crates/gitmirror-xrpc/src/lib.rs index 131e0b556..40c80c5b3 100644 --- a/gitmirror/crates/gitmirror-xrpc/src/lib.rs +++ b/gitmirror/crates/gitmirror-xrpc/src/lib.rs @@ -8,15 +8,15 @@ mod routes; use std::{path::PathBuf, sync::Arc}; use axum::{ - routing::{get, post}, Router, + routing::{get, post}, }; use bobbin_runtime::{Clock, ReqwestHttp}; -use tangled_axum::atproto::{AtprotoService, ClaimsPolicy, Verified}; use gitmirror_git::layout::Layout; use jacquard_axum::service_auth::{self, ServiceAuthError}; use jacquard_common::service_auth::ServiceAuthClaims; use jacquard_identity::JacquardResolver; +use tangled_axum::atproto::{AtprotoService, ClaimsPolicy, Verified}; pub(crate) type Directory = JacquardResolver; @@ -56,7 +56,10 @@ impl AtprotoService for AppState { self.service_auth.resolver() } - async fn verify_claims(&self, claims: &ServiceAuthClaims) -> Result { + async fn verify_claims( + &self, + claims: &ServiceAuthClaims, + ) -> Result { ClaimsPolicy::from(&self.service_auth) .skip_audience() .check(claims, self.clock.now_unix_micros()) @@ -64,23 +67,15 @@ impl AtprotoService for AppState { } } +#[rustfmt::skip] pub fn router(state: AppState) -> Router { use routes::*; Router::new() .route("/xrpc/sh.tangled.git.temp2.getBlame", get(git::get_blame)) .route("/xrpc/sh.tangled.git.temp2.getDiff", get(git::get_diff)) - .route( - "/xrpc/sh.tangled.git.temp2.getInterdiff", - get(git::get_interdiff), - ) - .route( - "/xrpc/sh.tangled.git.temp2.listCommits", - get(git::list_commits), - ) - .route( - "/xrpc/sh.tangled.git.temp2.mergeCheck", - get(git::merge_check), - ) + .route("/xrpc/sh.tangled.git.temp2.getInterdiff", get(git::get_interdiff)) + .route("/xrpc/sh.tangled.git.temp2.listCommits", get(git::list_commits)) + .route("/xrpc/sh.tangled.git.temp2.mergeCheck", get(git::merge_check)) .route("/xrpc/sh.tangled.git.mergeCommit", post(git::merge_commit)) .with_state(state) } diff --git a/gitmirror/crates/gitmirror-xrpc/src/merge.rs b/gitmirror/crates/gitmirror-xrpc/src/merge.rs index 24656d65f..847e42847 100644 --- a/gitmirror/crates/gitmirror-xrpc/src/merge.rs +++ b/gitmirror/crates/gitmirror-xrpc/src/merge.rs @@ -2,9 +2,7 @@ use gix::bstr::ByteSlice as _; use gix::diff::tree_with_rewrites::Change; use gix::merge::tree::{Conflict, TreatAsUnresolved}; -use lexicons::sh_tangled::git::temp2::merge_check::{ - Conflict as MergeConflict, MergeCheckOutput, -}; +use lexicons::sh_tangled::git::temp2::merge_check::{Conflict as MergeConflict, MergeCheckOutput}; /// Perform a 3-way merge check between `target` (ours) and `source` (theirs), using their /// merge base as the common ancestor. diff --git a/gitmirror/crates/gitmirror-xrpc/src/routes/git.rs b/gitmirror/crates/gitmirror-xrpc/src/routes/git.rs index f844c2ce5..c59153716 100644 --- a/gitmirror/crates/gitmirror-xrpc/src/routes/git.rs +++ b/gitmirror/crates/gitmirror-xrpc/src/routes/git.rs @@ -12,11 +12,12 @@ use gix::revision::walk::Sorting; use jacquard_axum::{ExtractXrpc, XrpcResponse}; use jacquard_common::ToSmolStr; use jacquard_common::types::string::Datetime; +use jacquard_identity::resolver::IdentityResolver as _; use lexicons::sh_tangled; use lexicons::sh_tangled::git::{ - merge_commit, temp2::{get_blame, get_diff, get_interdiff, list_commits, merge_check} + merge_commit, + temp2::{get_blame, get_diff, get_interdiff, list_commits, merge_check}, }; -use jacquard_identity::resolver::IdentityResolver as _; use tangled_axum::atproto::{AtprotoService as _, ExtractAnyServiceAuth}; use tokio::time::timeout; use tracing::info; @@ -181,7 +182,6 @@ pub(crate) fn find_commit(repo: &gix::Repository, sha: &str) -> Result (bool, String) { let out = Command::new("ssh") .args(["-i", key_path]) .args(UNSHARED_SSH.split_whitespace()) - .args([ - "-p", - &port.to_string(), - &format!("{user}@127.0.0.1"), - ]) + .args(["-p", &port.to_string(), &format!("{user}@127.0.0.1")]) .output() .expect("ssh runs"); (