edit in ui/src/routes/[user]/[repo]/jobs/[job]/+page.svelte at line 19
[10.4531]→[10.4531:4557](∅→∅) replacement in ui/src/routes/[user]/[repo]/jobs/[job]/+page.svelte at line 20
[10.4597]→[10.4597:4845](∅→∅) − if ('Chunk' in m) {
− console.log(m);
− out[m.Chunk.channel].push(ansi_up.ansi_to_html(m.Chunk.content));
− } else if ('Status' in m) {
− console.log(m);
− ended = m.Status.ended;
− status = m.Status.status;
+ if (typeof m == 'object') {
+ if (m?.Chunk) {
+ console.log(m);
+ out[m.Chunk.channel].push(ansi_up.ansi_to_html(m.Chunk.content));
+ if (m.Chunk.channel == 0 && out[1].reduce((a, b) => a + b.length, 0)) {
+ document.getElementById('stdout-bottom')?.scrollIntoView();
+ } else {
+ document.getElementById('stderr-bottom')?.scrollIntoView();
+ }
+ } else if (m?.Status) {
+ console.log(m);
+ ended = m.Status.ended;
+ status = m.Status.status;
+ }
edit in ui/src/routes/[user]/[repo]/jobs/[job]/+page.svelte at line 37
[10.4861]→[10.4861:4956](∅→∅),
[10.4956]→[17.57:65](∅→∅) − socket.onopen = () => {
− // socket.send('{ "State": { "stdout": 0, "stderr": 0 } }');
− };
−
edit in ui/src/routes/[user]/[repo]/jobs/[job]/+page.svelte at line 79
+ <div id="stdout-bottom"></div>
edit in ui/src/routes/[user]/[repo]/jobs/[job]/+page.svelte at line 89
+ <div id="stderr-bottom"></div>
edit in ui/src/routes/[user]/[repo]/jobs/+page.svelte at line 5
+ import { server } from '../../../helpers';
+ import { onMount } from 'svelte';
edit in ui/src/routes/[user]/[repo]/jobs/+page.svelte at line 9
+ let jobs = $derived(data.jobs);
+ let socket: WebSocket | undefined = undefined;
+
+ function websocket() {
+ socket = new WebSocket(`${server}/api/job/${params.user}/${params.repo}/ws`);
+
+ socket.onmessage = (event) => {
+ const j = JSON.parse(event.data);
+ if (typeof j == 'object') {
+ if (j?.jobs) {
+ jobs = j.jobs;
+ }
+ }
+ };
+
+ socket.onclose = () => {
+ socket = undefined;
+ };
+ }
+ onMount(() => {
+ setInterval(() => {
+ if (!socket) websocket();
+ }, 1000);
+ });
replacement in ui/src/routes/[user]/[repo]/jobs/+page.svelte at line 52
[10.6923]→[10.6923:7013](∅→∅) − <thead> <tr><td>Job</td><td>Started</td><td>Ended</td><td>Status</td> </tr></thead>
+ <thead><tr><td>Job</td><td>Started</td><td>Ended</td><td>Status</td><td></td></tr></thead>
replacement in ui/src/routes/[user]/[repo]/jobs/+page.svelte at line 54
[10.7027]→[10.7027:7069](∅→∅) − {#each data.jobs as job (job.id)}
+ {#each jobs as job (job.id)}
edit in ui/src/routes/[user]/[repo]/jobs/+page.svelte at line 72
+ </td>
+ <td>
+ <div class="flex flex-wrap gap-3">
+ <form action="/api/job/{params.user}/{params.repo}/{job.id}/retry" method="post">
+ <button class="btn btn-primary btn-sm" disabled={!job.ended}>Retry</button>
+ </form>
+ <form action="/api/job/{params.user}/{params.repo}/{job.id}/kill" method="post">
+ <button class="btn btn-error btn-sm" disabled={job.ended}>Kill</button>
+ </form>
+ </div>
edit in ui/src/hooks.server.ts at line 23
+ console.log('handle', event);
edit in ui/src/hooks.server.ts at line 30
+ console.log('setCookie', setCookie);
replacement in replication/src/lib.rs at line 10
[2.293308]→[2.293308:293348](∅→∅) − hash: libpijul::pristine::Hash,
+ hash: pijul_core::pristine::Hash,
replacement in replication/src/lib.rs at line 17
[2.293461]→[2.293461:293501](∅→∅) − hash: libpijul::pristine::Hash,
+ hash: pijul_core::pristine::Hash,
replacement in replication/src/lib.rs at line 22
[2.293574]→[2.293574:293614](∅→∅) − hash: libpijul::pristine::Hash,
+ hash: pijul_core::pristine::Hash,
replacement in replication/src/lib.rs at line 69
[2.294556]→[2.294556:294591](∅→∅) − p.push(libpijul::DOT_DIR);
+ p.push(pijul_core::DOT_DIR);
replacement in replication/src/lib.rs at line 109
[2.295452]→[2.295452:295482](∅→∅) + hash: pijul_core::Hash,
replacement in replication/src/lib.rs at line 117
[2.295689]→[2.295689:295765](∅→∅) − libpijul::changestore::filesystem::push_filename(&mut path, &hash);
+ pijul_core::changestore::filesystem::push_filename(&mut path, &hash);
replacement in replication/src/lib.rs at line 159
[2.296635]→[2.296635:296698](∅→∅) − ChangeNotFound { repo: uuid::Uuid, hash: libpijul::Hash },
+ ChangeNotFound { repo: uuid::Uuid, hash: pijul_core::Hash },
replacement in replication/Cargo.toml at line 9
[2.296978]→[2.296978:296992](∅→∅),
[2.296992]→[3.6286:6409](∅→∅),
[3.6409]→[2.297115:297499](∅→∅),
[2.297115]→[2.297115:297499](∅→∅),
[2.297499]→[3.6410:6427](∅→∅),
[3.6427]→[2.297516:297557](∅→∅),
[2.297516]→[2.297516:297557](∅→∅),
[2.297557]→[3.6428:6443](∅→∅),
[3.6443]→[2.297572:297704](∅→∅),
[2.297572]→[2.297572:297704](∅→∅) − futures = "*"
− tokio = { version = "1.48", features = [ "net", "time", "rt-multi-thread", "macros", "io-util", "fs", "sync", "signal" ] }
− memmap = "*"
− log = "*"
− env_logger = "*"
− serde_derive = "*"
− serde = "*"
− rand = "0.9"
− uuid = { version = "*", features = [ "v4", "serde" ] }
− toml = "*"
− postgres-types = { version = "*", features = [ "derive" ] }
− tokio-postgres = { version = "*", features = [ "with-uuid-1", "with-chrono-0_4" ] }
− postgres-openssl = "*"
− libpijul = { version = "1.0.0-beta.10", features = [ "tarball" ] }
− clap = "~4.5.53"
− regex = "*"
− lazy_static = "*"
− libc = "*"
− bytes = "1.11"
− deadpool-postgres = "*"
− bincode = "*"
− thiserror = "*"
− webpki = "*"
− openssl = "*"
− tokio-openssl = "*"
− byteorder = "*"
− indexmap = "*"
+ futures.workspace = true
+ tokio.workspace = true
+ serde_derive.workspace = true
+ uuid.workspace = true
+ pijul-core.workspace = true
+ thiserror.workspace = true
+ serde.workspace = true
file addition: 2026-06-06-183345-0000_jobs_state (d--r------)
file addition: up.sql (----------)
+ ALTER TABLE jobs ADD COLUMN repo_state TEXT, ADD COLUMN channel TEXT NOT NULL DEFAULT 'main', ADD COLUMN script TEXT;
file addition: down.sql (----------)
+ ALTER TABLE jobs DROP COLUMN repo_state, DROP COLUMN channel, DROP COLUMN script;
replacement in default.nix at line 12
[8.58503]→[3.6667:6685](∅→∅),
[3.6667]→[3.6667:6685](∅→∅) replacement in default.nix at line 17
[3.6740]→[8.58504:58518](∅→∅) + # rustfmt
+ dbus
+ nodejs
+ typescript-language-server
replacement in ci/src/main.rs at line 1
+ use axum::{
+ Json, Router,
+ extract::{Path, State},
+ http::StatusCode,
+ response::{IntoResponse, Response},
+ routing::{get, post},
+ };
+ // use ci::Message;
+ use clap::Parser;
replacement in ci/src/main.rs at line 11
− use std::io::Read;
− use std::net::{Ipv6Addr, SocketAddr, ToSocketAddrs};
− use std::path::{Path, PathBuf};
− use std::sync::{Arc, Mutex};
− use std::time::{Duration, SystemTime};
+ // use std::io::Read;
+ use axum_extra::TypedHeader;
+ use axum_extra::headers::Range;
+ use ci::*;
+ use pijul_core::MutTxnT;
+ use std::collections::HashMap;
+ use std::net::{Ipv6Addr, ToSocketAddrs};
+ use std::path::PathBuf;
+ use std::process::Stdio;
+ use std::sync::Arc;
+ use tempfile;
+ use thiserror::*;
+ use tokio::fs::OpenOptions;
edit in ci/src/main.rs at line 29
replacement in ci/src/main.rs at line 30
− timeout_secs: usize,
− server_public_keys: Vec<String>,
− log_path: String,
− tarball_path: String,
− }
−
− #[derive(Serialize, Deserialize)]
− struct BuildResult {
− finished: chrono::DateTime<chrono::Utc>,
− status: Option<i32>,
− link: Option<PathBuf>,
− job: ci::Job,
+ nest_url: String,
+ repo_path: PathBuf,
+ ci_path: PathBuf,
edit in ci/src/main.rs at line 34
edit in ci/src/main.rs at line 41
+ #[derive(Clone)]
+ pub struct Config {
+ config: Arc<ConfigFile>,
+ jobs: Arc<
+ std::sync::Mutex<
+ std::collections::HashMap<
+ uuid::Uuid,
+ (
+ tokio::sync::oneshot::Sender<()>,
+ tokio::sync::watch::Receiver<std::option::Option<i32>>,
+ ),
+ >,
+ >,
+ >,
+ }
+
edit in ci/src/main.rs at line 66
+ pijul_interaction::set_context(pijul_interaction::InteractiveContext::NotInteractive);
edit in ci/src/main.rs at line 70
[5.1271]→[5.1271:1334](∅→∅) − let config = Arc::new(thrussh::client::Config::default());
replacement in ci/src/main.rs at line 72
[5.1465]→[5.1465:2108](∅→∅) − let key = Arc::new(thrussh_keys::load_secret_key(&conf.key_path, None).unwrap());
− let (sender, mut receiver) = tokio::sync::mpsc::channel(1);
− let client = CiClient {
− process: Arc::new(Mutex::new(Process::default())),
− log_path: Path::new(&conf.log_path).to_path_buf(),
− tarball_path: Path::new(&conf.tarball_path).to_path_buf(),
− last_window_adjustment: SystemTime::now(),
− server_public_keys: Arc::new(
− conf.server_public_keys
− .iter()
− .map(|p| thrussh_keys::parse_public_key_base64(p).unwrap())
− .collect(),
− ),
− sender,
+ let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
+ let config = Config {
+ config: Arc::new(conf),
+ jobs: Arc::new(std::sync::Mutex::new(std::collections::HashMap::new())),
replacement in ci/src/main.rs at line 77
[5.2115]→[5.2115:2403](∅→∅) − loop {
− if let Err(e) = client
− .protocol(&addr, config.clone(), key.clone(), &mut receiver)
− .await
− {
− error!("restarting because of error: {:?}", e)
− }
− tokio::time::sleep(std::time::Duration::from_secs(1)).await;
− }
+ let app = Router::new()
+ .route("/trigger", post(trigger))
+ .route("/stdout/{job}", get(stdout))
+ .route("/stderr/{job}", get(stderr))
+ .route("/status/{job}", get(status))
+ .with_state(config.clone());
+ axum::serve(listener, app).await.unwrap();
replacement in ci/src/main.rs at line 86
[5.2406]→[5.2406:2720](∅→∅) − #[derive(Clone, Debug)]
− pub struct CiClient {
− process: Arc<Mutex<Process>>,
− tarball_path: PathBuf,
− log_path: PathBuf,
− last_window_adjustment: SystemTime,
− server_public_keys: Arc<Vec<thrussh_keys::key::PublicKey>>,
− sender: tokio::sync::mpsc::Sender<(ci::Job, Option<i32>, Option<PathBuf>)>,
+ async fn status(
+ State(config): State<Config>,
+ Path(job): Path<uuid::Uuid>,
+ ) -> Result<Json<Status>, Error> {
+ let s =
+ tokio::fs::read_to_string(&config.config.ci_path.join(&format!("{}.status", job))).await?;
+ Ok(Json(serde_json::from_str(&s)?))
replacement in ci/src/main.rs at line 95
[5.2723]→[5.2723:2908](∅→∅),
[5.2908]→[5.2908:2910](∅→∅) − #[derive(Debug, Default)]
− struct Process {
− child: Option<tokio::task::JoinHandle<Result<(), anyhow::Error>>>,
− job: Option<ci::Job>,
− tarball: Option<(std::fs::File, usize)>,
− }
+ use axum_range::KnownSize;
+ use axum_range::Ranged;
replacement in ci/src/main.rs at line 98
[5.2911]→[5.2911:3010](∅→∅) − impl Process {
− fn is_ready(&self) -> bool {
− self.child.is_none() && self.job.is_none()
+ async fn stdout(
+ State(config): State<Config>,
+ Path(job): Path<uuid::Uuid>,
+ range: Option<TypedHeader<Range>>,
+ ) -> Response {
+ debug!("stdout {:?} {:?}", job, range);
+ let Ok(mut file) =
+ tokio::fs::File::open(&config.config.ci_path.join(&format!("{}.stdout", job))).await
+ else {
+ return StatusCode::NOT_FOUND.into_response();
+ };
+ if let Some(TypedHeader(range)) = range {
+ let body = KnownSize::file(file).await.unwrap();
+ Ranged::new(Some(range), body).into_response()
+ } else {
+ use tokio::io::AsyncReadExt;
+ let mut v = Vec::new();
+ file.read_to_end(&mut v).await.unwrap();
+ v.into_response()
replacement in ci/src/main.rs at line 120
[5.3019]→[5.3019:5066](∅→∅) − impl CiClient {
− pub async fn protocol(
− &self,
− addr: &SocketAddr,
− config: Arc<thrussh::client::Config>,
− key: Arc<thrussh_keys::key::KeyPair>,
− receiver: &mut tokio::sync::mpsc::Receiver<(ci::Job, Option<i32>, Option<PathBuf>)>,
− ) -> Result<(), anyhow::Error> {
− let mut h = thrussh::client::connect(config, &addr, self.clone()).await?;
− debug!("Opening session");
− if !h.authenticate_publickey("ci", key).await? {
− return Ok(());
− }
− let mut channel = h.channel_open_session().await?;
− channel
− .data(
− &bincode::serialize(&Message::Handshake {
− version: ci::VERSION,
− id: 0,
− })
− .unwrap()[..],
− )
− .await?;
− debug!("handshake done");
− 'outer: loop {
− if self.process.lock().unwrap().is_ready() {
− channel
− .data(&bincode::serialize(&Message::Ready).unwrap()[..])
− .await?;
− debug!("ready");
− }
− loop {
− tokio::select! {
− msg = channel.wait() => {
− debug!("msg = {:?}", msg);
− if !self.handle_msg(&mut channel, &self.sender, msg).await? {
− break 'outer
− }
− }
− msg = receiver.recv() => {
− debug!("message {:#?}", msg);
− if let Some(p) = self.process.lock().unwrap().child.take() {
− p.await??
− }
− if let Some((job, exit_status, path)) = msg {
− self.send_log(&mut channel, job, exit_status, path).await?
− }
− channel.data(&bincode::serialize(&Message::Ready).unwrap()[..]).await?;
− }
− }
− }
− }
− Ok(())
+ async fn stderr(
+ State(config): State<Config>,
+ Path(job): Path<uuid::Uuid>,
+ range: Option<TypedHeader<Range>>,
+ ) -> Response {
+ debug!("stderr {:?} {:?}", job, range);
+ let Ok(mut file) =
+ tokio::fs::File::open(&config.config.ci_path.join(&format!("{}.stderr", job))).await
+ else {
+ return StatusCode::NOT_FOUND.into_response();
+ };
+ if let Some(TypedHeader(range)) = range {
+ let body = KnownSize::file(file).await.unwrap();
+ Ranged::new(Some(range), body).into_response()
+ } else {
+ use tokio::io::AsyncReadExt;
+ let mut v = Vec::new();
+ file.read_to_end(&mut v).await.unwrap();
+ v.into_response()
edit in ci/src/main.rs at line 140
replacement in ci/src/main.rs at line 142
[5.5073]→[5.5073:7442](∅→∅) − async fn handle_msg(
− &self,
− channel: &mut thrussh::client::Channel,
− sender: &tokio::sync::mpsc::Sender<(ci::Job, Option<i32>, Option<PathBuf>)>,
− msg: Option<thrussh::ChannelMsg>,
− ) -> Result<bool, anyhow::Error> {
− match msg {
− Some(thrussh::ChannelMsg::Data { data }) => {
− let mut proc = self.process.lock().unwrap();
− if let Some((mut f, mut len)) = proc.tarball.take() {
− debug!("len = {:?}", len);
− use std::io::Write;
− f.write_all(&data)?;
− len -= data.len();
− if len > 0 {
− proc.tarball = Some((f, len));
− }
− return Ok(true);
− }
− let msg = bincode::deserialize::<Message>(&data);
− debug!("msg = {:?}", msg);
− match msg {
− Ok(Message::Job(job)) => {
− self.handle_job(channel, sender.clone(), &mut proc, job)
− .await?
− }
− Ok(Message::Chunk { id, len, .. }) => {
− let p = self.tarball_path.join(&format!("{}.tar.gz.tmp", id));
− if len == 0 {
− let p2 = self.tarball_path.join(&format!("{}.tar.gz", id));
− std::fs::rename(&p, &p2)?;
− proc.tarball = None;
− let job = proc.job.take().unwrap();
− self.handle_job(channel, sender.clone(), &mut proc, job)
− .await?;
− return Ok(true);
− }
− let file = std::fs::OpenOptions::new()
− .write(true)
− .create(true)
− .append(true)
− .open(&p)
− .unwrap();
− proc.tarball = Some((file, len as usize));
− }
− Ok(msg) => {
− debug!("msg = {:?}", msg);
− }
− _ => return Ok(false),
− }
− }
− None => return Ok(false),
− msg => debug!("{:?}", msg),
+ #[derive(Error, Debug)]
+ pub enum Error {
+ #[error("Lock")]
+ Lock,
+ #[error("Forbidden")]
+ Forbidden,
+ #[error("Not found")]
+ NotFound,
+ #[error(transparent)]
+ Output(
+ #[from]
+ pijul_core::output::OutputError<
+ <C as pijul_core::changestore::ChangeStore>::Error,
+ pijul_core::pristine::sanakirja::MutTxn0,
+ std::io::Error,
+ >,
+ ),
+ #[error(transparent)]
+ Reqwest(#[from] reqwest::Error),
+ #[error(transparent)]
+ Sanakirja(#[from] pijul_core::pristine::sanakirja::SanakirjaError),
+ #[error(transparent)]
+ IO(#[from] std::io::Error),
+ #[error(transparent)]
+ Json(#[from] serde_json::Error),
+ }
+
+ type C = pijul_core::changestore::filesystem::FileSystem;
+
+ impl IntoResponse for Error {
+ fn into_response(self) -> Response {
+ debug!("response {:?}", self);
+ match self {
+ Error::Forbidden => (StatusCode::FORBIDDEN, "{}").into_response(),
+ Error::NotFound => (StatusCode::NOT_FOUND, "{}").into_response(),
+ _ => (StatusCode::INTERNAL_SERVER_ERROR, "{}").into_response(),
edit in ci/src/main.rs at line 179
[5.7452]→[5.7452:7469](∅→∅) edit in ci/src/main.rs at line 180
replacement in ci/src/main.rs at line 182
[5.7476]→[5.7476:8399](∅→∅) − async fn handle_job(
− &self,
− channel: &mut thrussh::client::Channel,
− sender: tokio::sync::mpsc::Sender<(ci::Job, Option<i32>, Option<PathBuf>)>,
− process: &mut Process,
− job: ci::Job,
− ) -> Result<(), anyhow::Error> {
− let p = self.tarball_path.join(&format!("{}.tar.gz", job.id));
− debug!("p = {:?}", p);
− if std::fs::metadata(&p).is_err() {
− debug!("getting tarball");
− channel
− .data(&bincode::serialize(&Message::GetTarball { id: job.id }).unwrap()[..])
− .await?;
− process.job = Some(job);
− return Ok(());
− }
− debug!("tar = {:?}", p);
− let status = std::process::Command::new("tar")
− .args(&["-xf", p.to_str().unwrap()])
− .current_dir(&self.tarball_path)
− .status()
− .unwrap();
− debug!("nix: {:?}", status);
+ // #[derive(Debug, Clone)]
+ // struct RepoPath {
+ // path: PathBuf,
+ // remove_dir: bool,
+ // remove_dot: bool,
+ // }
replacement in ci/src/main.rs at line 189
[5.8400]→[5.8400:8509](∅→∅) − let tarballp = self.tarball_path.join(job.id.to_string());
− let logp = self.log_path.clone();
+ #[axum::debug_handler]
+ pub async fn trigger(
+ State(config): State<Config>,
+ Json(t): Json<Trigger>,
+ ) -> Result<StatusCode, Error> {
+ tokio::spawn(async move {
+ info!("trigger: {:?}", t);
+ let t0 = std::time::Instant::now();
+ let mut remote = pijul_remote::RemoteRepo::Http(pijul_remote::http::Http {
+ url: format!("{}/{}/{}", config.config.nest_url, t.owner, t.repo)
+ .parse()
+ .unwrap(),
+ channel: "main".to_string(),
+ client: reqwest::ClientBuilder::new().build()?,
+ headers: vec![],
+ name: t.state.clone(),
+ });
replacement in ci/src/main.rs at line 207
[5.8510]→[5.8510:8924](∅→∅) − let result_path = logp.join(&format!("{}.result", job.id));
− if let Ok(mut f) = std::fs::File::open(&result_path) {
− if let Ok(build_result) = serde_json::from_reader::<_, BuildResult>(&mut f) {
− sender
− .send((build_result.job, build_result.status, build_result.link))
− .await?;
− return Ok(());
− }
− }
+ let path = tempfile::tempdir().unwrap();
+ let pijul_config = pijul_config::Config::load(None, Vec::new()).unwrap();
+ let repo = tokio::sync::Mutex::new(
+ pijul_repository::Repository::init(&pijul_config, Some(&path.path()), None, None)
+ .unwrap(),
+ );
+ {
+ let mut repo = repo.lock().await;
+ let txn = repo.pristine.arc_txn_begin()?;
+ let mut channel = txn.write().open_or_create_channel("main")?;
replacement in ci/src/main.rs at line 218
[5.8925]→[5.8925:9357](∅→∅) − debug!("p = {:?}", tarballp);
− process.child = Some(tokio::task::spawn(async move {
− let mut process = tokio::process::Command::new("nix-build")
− .arg("default.nix")
− .current_dir(&tarballp)
− .stdin(std::process::Stdio::null())
− .stdout(std::process::Stdio::piped())
− .stderr(std::process::Stdio::piped())
− .spawn()
+ let h = t.state.parse().unwrap();
+ remote
+ .clone_state(&mut repo, &txn, &mut channel, h)
+ .await
edit in ci/src/main.rs at line 223
[5.9384]→[5.9384:10059](∅→∅) − let stdout = process.stdout.as_mut().unwrap();
− let stderr = process.stderr.as_mut().unwrap();
− let mut fstdout =
− tokio::fs::File::create(logp.join(&format!("{}.stdout", job.id))).await?;
− let mut fstderr =
− tokio::fs::File::create(logp.join(&format!("{}.stderr", job.id))).await?;
− let (a, b) = futures::future::join(
− tokio::io::copy(stdout, &mut fstdout),
− tokio::io::copy(stderr, &mut fstderr),
− )
− .await;
− a?;
− b?;
− let status = process.wait().await?;
− debug!("status = {:?}", status);
replacement in ci/src/main.rs at line 224
[5.10060]→[5.10060:10496](∅→∅) − let mut result_file = std::fs::File::create(&result_path)?;
− let link = std::fs::read_link(&tarballp.join("result")).ok();
− serde_json::to_writer(
− &mut result_file,
− &BuildResult {
− finished: chrono::Utc::now(),
− status: status.code(),
− job: job.clone(),
− link: link.clone(),
− },
+ pijul_core::output::output_repository_no_pending(
+ &repo.working_copy,
+ &repo.changes,
+ &txn,
+ &channel,
+ "",
+ true,
+ None,
+ 1, // std::thread::available_parallelism()?.get(),
+ 0,
replacement in ci/src/main.rs at line 236
[5.10513]→[5.10513:10573](∅→∅) − sender.send((job, status.code(), link)).await?;
+ remote.finish().await.unwrap();
+ }
+ info!("cloned in {:?}", t0.elapsed());
replacement in ci/src/main.rs at line 240
[5.10574]→[5.10574:10729](∅→∅) − std::fs::remove_dir_all(&tarballp).unwrap_or(());
− std::fs::remove_file(&p)?;
−
− Ok(())
− }));
− Ok(())
− }
+ std::fs::remove_dir_all(&path.path().join(".pijul"))?;
replacement in ci/src/main.rs at line 242
[5.10730]→[5.10730:11040](∅→∅) − async fn send_log(
− &self,
− channel: &mut thrussh::client::Channel,
− job: ci::Job,
− exit_status: Option<i32>,
− path: Option<PathBuf>,
− ) -> Result<(), anyhow::Error> {
− let id = job.id;
− let msg = Message::Log {
− job,
− exit_status,
+ let (status_tx, status_rx) = tokio::sync::watch::channel(None);
+ let (kill_tx, kill_rx) = tokio::sync::oneshot::channel();
+ if let Some((k, _)) = config
+ .jobs
+ .lock()
+ .unwrap()
+ .insert(t.id, (kill_tx, status_rx))
+ {
+ k.send(()).unwrap_or(());
+ }
+ let result = build(
+ Some(&config.config.ci_path),
replacement in ci/src/main.rs at line 255
[5.11058]→[5.11058:11138](∅→∅) − };
− channel.data(&bincode::serialize(&msg).unwrap()[..]).await?;
+ t.id,
+ &t.targets,
+ kill_rx,
+ status_tx,
+ )
+ .await;
+ config.jobs.lock().unwrap().remove(&t.id);
replacement in ci/src/main.rs at line 263
[5.11139]→[5.11139:13633](∅→∅) − let mut buf = Vec::with_capacity(4096);
− debug!(
− "stdout: {:?}",
− self.log_path.join(&format!("{}.stdout", id))
− );
− if let Ok(ref mut stdout) =
− std::fs::File::open(&self.log_path.join(&format!("{}.stdout", id)))
− {
− let len = channel.writable_packet_size().min(MAX_BUF_SIZE);
− buf.resize(len, 0);
− while let Ok(n) = stdout.read(&mut buf) {
− if n == 0 {
− channel
− .data(
− &bincode::serialize(&Message::Chunk {
− id,
− stderr: false,
− len: 0,
− })
− .unwrap()[..],
− )
− .await?;
− break;
− }
− channel
− .data(
− &bincode::serialize(&Message::Chunk {
− id,
− stderr: false,
− len: n as u32,
− })
− .unwrap()[..],
− )
− .await?;
− channel.data(&buf[..n]).await?
− }
− }
− if let Ok(ref mut stdout) =
− std::fs::File::open(&self.log_path.join(&format!("{}.stderr", id)))
− {
− let len = channel.writable_packet_size().min(MAX_BUF_SIZE);
− buf.resize(len, 0);
− while let Ok(n) = stdout.read(&mut buf) {
− if n == 0 {
− channel
− .data(
− &bincode::serialize(&Message::Chunk {
− id,
− stderr: true,
− len: 0,
− })
− .unwrap()[..],
− )
− .await?;
− break;
− }
− channel
− .data(
− &bincode::serialize(&Message::Chunk {
− id,
− stderr: true,
− len: n as u32,
− })
− .unwrap()[..],
− )
− .await?;
− channel.data(&buf[..n]).await?
− }
− }
− Ok(())
− }
+ let (code, results) = result?;
+ debug!("code = {:?} {:?}", code, results);
+ tokio::fs::write(
+ config.config.ci_path.join(&format!("{}.status", t.id)),
+ serde_json::to_string(&Status {
+ code,
+ results,
+ finished: chrono::Utc::now(),
+ })
+ .unwrap(),
+ )
+ .await?;
+ Ok::<(), Error>(())
+ });
+ Ok(StatusCode::OK)
replacement in ci/src/main.rs at line 280
[5.13636]→[5.13636:13673](∅→∅) − const MAX_BUF_SIZE: usize = 1 << 16;
+ async fn build(
+ ci: Option<&std::path::Path>,
+ path: tempfile::TempDir,
+ id: uuid::Uuid,
+ targets: &HashMap<String, String>,
+ mut kill_rx: tokio::sync::oneshot::Receiver<()>,
+ mut status_tx: tokio::sync::watch::Sender<Option<i32>>,
+ ) -> Result<(Option<i32>, HashMap<String, PathBuf>), Error> {
+ let mut files = if let Some(ref ci_path) = ci {
+ tokio::fs::create_dir_all(ci_path).await?;
+ Some((
+ OpenOptions::new()
+ .append(true)
+ .create(true)
+ .open(&ci_path.join(&format!("{}.stdout", id)))
+ .await
+ .unwrap(),
+ OpenOptions::new()
+ .append(true)
+ .create(true)
+ .open(&ci_path.join(&format!("{}.stderr", id)))
+ .await
+ .unwrap(),
+ ))
+ } else {
+ None
+ };
replacement in ci/src/main.rs at line 308
[5.13674]→[5.13674:13751](∅→∅) − impl thrussh::client::Handler for CiClient {
− type Error = anyhow::Error;
+ let mut cmd = tokio::process::Command::new("nix");
replacement in ci/src/main.rs at line 310
[5.13752]→[5.13752:14098](∅→∅) − fn check_server_key(
− self,
− server_public_key: &thrussh_keys::key::PublicKey,
− ) -> impl futures::Future<Output = Result<(Self, bool), Self::Error>> {
− let valid = self
− .server_public_keys
− .iter()
− .any(|p| p == server_public_key);
− futures::future::ready(Ok((self, valid)))
+ cmd.arg("build").arg("-L").arg("--log-format").arg("raw");
+ for (_, target) in targets {
+ cmd.arg(target);
edit in ci/src/main.rs at line 314
+ let cmd = cmd
+ .current_dir(&path)
+ .stderr(Stdio::piped())
+ .stdout(Stdio::piped())
+ .stdin(Stdio::null())
+ .spawn()
+ .unwrap();
+ let code = dump_cmd(cmd, &mut files, &mut kill_rx, &mut status_tx).await?;
replacement in ci/src/main.rs at line 323
[5.14105]→[5.14105:14568](∅→∅) − fn adjust_window(&mut self, _channel: thrussh::ChannelId, target: u32) -> u32 {
− let elapsed = self.last_window_adjustment.elapsed().unwrap();
− self.last_window_adjustment = SystemTime::now();
− if target >= 10_000_000 {
− return target;
− }
− if elapsed < Duration::from_secs(2) {
− target * 2
− } else if elapsed > Duration::from_secs(8) {
− target / 2
− } else {
− target
+ if code == Some(0) {
+ let mut cmd = tokio::process::Command::new("attic");
+ cmd.arg("push").arg("coturnix");
+ let mut result = HashMap::new();
+ for (n, (t, _)) in targets.iter().enumerate() {
+ if n == 0 {
+ result.insert(
+ t.clone(),
+ tokio::fs::read_link(path.path().join("result"))
+ .await
+ .unwrap(),
+ );
+ cmd.arg("result");
+ } else {
+ result.insert(
+ t.clone(),
+ tokio::fs::read_link(path.path().join(format!("result-{n}")))
+ .await
+ .unwrap(),
+ );
+ cmd.arg(format!("result-{n}"));
+ }
edit in ci/src/main.rs at line 346
+ let cmd = cmd
+ .current_dir(&path)
+ .stderr(Stdio::piped())
+ .stdout(Stdio::piped())
+ .stdin(Stdio::null())
+ .spawn()
+ .unwrap();
+ Ok((
+ dump_cmd(cmd, &mut files, &mut kill_rx, &mut status_tx).await?,
+ result,
+ ))
+ } else {
+ Ok((code, HashMap::new()))
replacement in ci/src/lib.rs at line 1
[5.14618]→[5.14619:14640](∅→∅) + use serde::*;
+ use std::collections::HashMap;
+ use tokio::io::AsyncWriteExt;
+ use tracing::*;
replacement in ci/src/lib.rs at line 6
[5.14641]→[5.14641:14669](∅→∅) − pub const VERSION: u16 = 0;
+ #[derive(Debug, Serialize, Deserialize)]
+ pub struct Status {
+ pub code: Option<i32>,
+ pub finished: chrono::DateTime<chrono::Utc>,
+ pub results: HashMap<String, std::path::PathBuf>,
+ }
replacement in ci/src/lib.rs at line 13
[5.14670]→[5.14670:14735](∅→∅) − #[derive(Debug, Clone, Serialize, Deserialize)]
− pub struct Job {
+ #[derive(Debug, Serialize, Deserialize)]
+ pub struct Trigger {
replacement in ci/src/lib.rs at line 16
[5.14759]→[5.14759:14907](∅→∅) − pub repo: uuid::Uuid,
− pub channel: String,
− pub state: libpijul::pristine::Merkle,
− pub extra_patches: Vec<libpijul::pristine::Hash>,
+ pub owner: String,
+ pub repo: String,
+ pub state: String,
+ #[serde(default)]
+ pub targets: HashMap<String, String>,
replacement in ci/src/lib.rs at line 23
[5.14910]→[5.14910:15348](∅→∅) − #[derive(Debug, Serialize, Deserialize)]
− pub enum Message {
− Handshake {
− version: u16,
− id: i64,
− },
− Ready,
− Job(Job),
− GetTarball {
− id: uuid::Uuid,
− },
− InvalidInput {
− input: String,
− },
− Log {
− job: Job,
− exit_status: Option<i32>,
− path: Option<std::path::PathBuf>,
− },
− Chunk {
− id: uuid::Uuid,
− stderr: bool,
− len: u32,
− },
+ pub async fn dump_cmd(
+ mut cmd: tokio::process::Child,
+ files: &mut Option<(tokio::fs::File, tokio::fs::File)>,
+ mut kill_rx: &mut tokio::sync::oneshot::Receiver<()>,
+ status_tx: &mut tokio::sync::watch::Sender<Option<i32>>,
+ ) -> Result<Option<i32>, std::io::Error> {
+ let mut stdout_ok = true;
+ let mut stderr_ok = true;
+ let mut buf_stdout = String::new();
+ let mut last_stdout = std::time::UNIX_EPOCH;
+ let mut buf_stderr = String::new();
+ let mut last_stderr = std::time::UNIX_EPOCH;
+ let bound = std::time::Duration::from_secs(1);
+
+ use tokio::io::AsyncBufReadExt;
+ let stdout = tokio::io::BufReader::new(cmd.stdout.take().unwrap());
+ let mut stdout = stdout.lines();
+ let stderr = tokio::io::BufReader::new(cmd.stderr.take().unwrap());
+ let mut stderr = stderr.lines();
+
+ while stdout_ok || stderr_ok {
+ debug!(
+ "stdout || stderr {:?} {:?}",
+ buf_stdout.len(),
+ buf_stderr.len()
+ );
+ tokio::select! {
+ line = stdout.next_line(), if stdout_ok => {
+ debug!("out {:?}", line);
+ let n = if let Some(line) = line? {
+ buf_stdout.push_str(&line);
+ buf_stdout.push('\n');
+ line.len() + 1
+ } else {
+ 0
+ };
+ if last_stdout.elapsed().unwrap() >= bound || n == 0 {
+ debug!("sending stdout to db {:?} {:?}", buf_stdout.len(), buf_stderr.len());
+
+ if let Some((ref mut stdout, _)) = files {
+ stdout.write_all(buf_stdout.as_bytes()).await?;
+ stdout.flush().await?;
+ }
+ buf_stdout.clear();
+ debug!("stdout/stderr {:?} {:?}", buf_stdout.len(), buf_stderr.len());
+ last_stdout = std::time::SystemTime::now();
+ }
+ if n == 0 {
+ stdout_ok = false
+ }
+ }
+ line = stderr.next_line(), if stderr_ok => {
+ debug!("err {:?}", line);
+ let n = if let Some(line) = line? {
+ buf_stderr.push_str(&line);
+ buf_stderr.push('\n');
+ line.len() + 1
+ } else {
+ 0
+ };
+ if last_stderr.elapsed().unwrap() >= bound || n == 0 {
+ debug!("sending stderr to db {:?}", buf_stderr.len());
+ if let Some((_, ref mut stderr)) = files {
+ stderr.write_all(buf_stderr.as_bytes()).await?;
+ stderr.flush().await?;
+ }
+ buf_stderr.clear();
+ last_stderr = std::time::SystemTime::now();
+ }
+ debug!("{:?}", buf_stderr.len());
+ if n == 0 {
+ stderr_ok = false
+ }
+ }
+ _ = &mut kill_rx => {
+ cmd.kill().await?;
+ break
+ }
+ }
+ }
+
+ tokio::select! {
+ s = cmd.wait() => {
+ let code = s?.code();
+ status_tx.send(code).unwrap();
+ Ok(code)
+ }
+ _ = &mut kill_rx => {
+ cmd.kill().await?;
+ Ok(None)
+ }
+ }
replacement in ci/Cargo.toml at line 8
[5.15513]→[5.15513:15780](∅→∅) − anyhow = "1.0.100"
− bincode = "1.0"
− chrono = "0.4.42"
− clap = { version = "4.5.53", features = ["derive"] }
− env_logger = "0.11.8"
− futures = "0.3.31"
− log = "0.4.28"
− serde = "1.0.228"
− serde_derive = "1.0.228"
− serde_json = "1.0.145"
− thrussh = "0.40"
− thrussh-keys = "0.23"
+ anyhow.workspace = true
+ bincode.workspace = true
+ chrono.workspace = true
+ clap.workspace = true
+ env_logger.workspace = true
+ futures.workspace = true
+ log.workspace = true
+ serde.workspace = true
+ serde_derive.workspace = true
+ serde_json.workspace = true
+ thrussh.workspace = true
+ thrussh-keys.workspace = true
replacement in ci/Cargo.toml at line 21
[5.15781]→[5.15781:15846](∅→∅) − libpijul = { version = "1.0.0-beta.10", features = ["tarball"] }
+ pijul-core.workspace = true
replacement in ci/Cargo.toml at line 23
[5.15847]→[5.15847:16080](∅→∅) − tokio = { version = "1.48", features = [ "process", "fs" ] }
− toml = { version = "0.9.8" }
− uuid = { version = "1.21.0", features = ["serde" ] }
− tracing = "0.1.41"
− tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
+ tokio.workspace = true
+ toml.workspace = true
+ uuid.workspace = true
+ tracing.workspace = true
+ tracing-subscriber.workspace = true
+ axum.workspace = true
+ thiserror.workspace = true
+ pijul-remote.workspace = true
+ reqwest.workspace = true
+ pijul-repository.workspace = true
+ pijul-config.workspace = true
+ sanakirja.workspace = true
+ pijul-interaction.workspace = true
+ tempfile.workspace = true
+ diesel.workspace = true
+ diesel-async.workspace = true
+ axum-range.workspace = true
+ axum-extra = { workspace = true, features = ["typed-header"] }
replacement in api/src/ssh.rs at line 17
[2.319923]→[2.319923:319946](∅→∅),
[2.319946]→[6.146:220](∅→∅) − use libpijul::TxnTExt;
− use libpijul::pristine::{Base32, ChannelTxnT, DepsTxnT, GraphTxnT, TxnT};
+ use pijul_core::TxnTExt;
+ use pijul_core::pristine::{Base32, ChannelTxnT, DepsTxnT, GraphTxnT, TxnT};
replacement in api/src/ssh.rs at line 121
[2.323139]→[2.323139:323187](∅→∅) − pub applied: Vec<libpijul::pristine::Hash>,
+ pub applied: Vec<pijul_core::pristine::Hash>,
replacement in api/src/ssh.rs at line 130
[6.335]→[2.323350:323393](∅→∅),
[2.323350]→[2.323350:323393](∅→∅) − key: Option<libpijul::key::PublicKey>,
+ key: Option<pijul_core::key::PublicKey>,
replacement in api/src/ssh.rs at line 160
[2.323965]→[2.323965:324005](∅→∅) − hash: libpijul::pristine::Hash,
+ hash: pijul_core::pristine::Hash,
replacement in api/src/ssh.rs at line 167
[2.324085]→[2.324085:324201](∅→∅) − impl From<libpijul::key::Algorithm> for Keyalgorithm_ {
− fn from(a: libpijul::key::Algorithm) -> Keyalgorithm_ {
+ impl From<pijul_core::key::Algorithm> for Keyalgorithm_ {
+ fn from(a: pijul_core::key::Algorithm) -> Keyalgorithm_ {
replacement in api/src/ssh.rs at line 170
[2.324219]→[2.324219:324292](∅→∅) − libpijul::key::Algorithm::Ed25519 => Keyalgorithm_::Ed25519,
+ pijul_core::key::Algorithm::Ed25519 => Keyalgorithm_::Ed25519,
replacement in api/src/ssh.rs at line 175
[2.324311]→[2.324311:324427](∅→∅) − impl From<Keyalgorithm_> for libpijul::key::Algorithm {
− fn from(a: Keyalgorithm_) -> libpijul::key::Algorithm {
+ impl From<Keyalgorithm_> for pijul_core::key::Algorithm {
+ fn from(a: Keyalgorithm_) -> pijul_core::key::Algorithm {
replacement in api/src/ssh.rs at line 178
[2.324445]→[2.324445:324518](∅→∅) − Keyalgorithm_::Ed25519 => libpijul::key::Algorithm::Ed25519,
+ Keyalgorithm_::Ed25519 => pijul_core::key::Algorithm::Ed25519,
replacement in api/src/ssh.rs at line 574
[2.338732]→[2.338732:338772](∅→∅) − hash: libpijul::pristine::Hash,
+ hash: pijul_core::pristine::Hash,
replacement in api/src/ssh.rs at line 767
[2.347102]→[2.347102:347200](∅→∅) − if let Ok(json) = serde_json::from_slice::<libpijul::key::PublicKey>(cap[1].as_bytes()) {
+ if let Ok(json) = serde_json::from_slice::<pijul_core::key::PublicKey>(cap[1].as_bytes()) {
replacement in api/src/ssh.rs at line 872
[2.351080]→[2.351080:351471](∅→∅) − ChannelSpec::CI(ref c_) => {
− if c_.len() + 3 == cap[1].len() {
− let (a, b) = cap[1].split_at(cap[1].len() - 3);
− if c_ == a && b == "/ci" {
− return Ok(ChannelList::Data(vec![b'\n']));
− }
− }
− }
replacement in api/src/ssh.rs at line 889
[2.352172]→[2.352172:352226](∅→∅) − let h: libpijul::Hash = h.into();
+ let h: pijul_core::Hash = h.into();
replacement in api/src/ssh.rs at line 896
[2.352497]→[2.352497:352597](∅→∅) − libpijul::fs::iter_graph_descendants(&txn, txn.graph(&*channel.read()), p)?
+ pijul_core::fs::iter_graph_descendants(&txn, txn.graph(&*channel.read()), p)?
replacement in api/src/ssh.rs at line 929
[2.353855]→[2.353855:353965](∅→∅) − let h: libpijul::Hash = h.into();
− let m: libpijul::Merkle = m.into();
+ let h: pijul_core::Hash = h.into();
+ let m: pijul_core::Merkle = m.into();
replacement in api/src/ssh.rs at line 982
[2.355958]→[2.355958:356018](∅→∅) − let m: libpijul::Merkle = m.into();
+ let m: pijul_core::Merkle = m.into();
replacement in api/src/ssh.rs at line 989
[2.356290]→[2.356290:356343](∅→∅) − libpijul::Merkle::zero()
+ pijul_core::Merkle::zero()
replacement in api/src/ssh.rs at line 998
[2.356687]→[2.356687:356743](∅→∅) − let m: libpijul::Merkle = m.into();
+ let m: pijul_core::Merkle = m.into();
replacement in api/src/ssh.rs at line 1005
[2.356991]→[2.356991:357040](∅→∅) − libpijul::Merkle::zero()
+ pijul_core::Merkle::zero()
replacement in api/src/ssh.rs at line 1073
[2.359758]→[2.359758:359856](∅→∅) − let hash = if let Some(h) = libpijul::pristine::Hash::from_base32((&cap[2]).as_bytes()) {
+ let hash = if let Some(h) = pijul_core::pristine::Hash::from_base32((&cap[2]).as_bytes()) {
replacement in api/src/ssh.rs at line 1123
[2.361252]→[2.361252:361350](∅→∅) − let hash = if let Some(h) = libpijul::pristine::Hash::from_base32((&cap[4]).as_bytes()) {
+ let hash = if let Some(h) = pijul_core::pristine::Hash::from_base32((&cap[4]).as_bytes()) {
replacement in api/src/ssh.rs at line 1137
[2.361662]→[2.361662:361735](∅→∅) − libpijul::changestore::filesystem::push_filename(&mut p, &hash);
+ pijul_core::changestore::filesystem::push_filename(&mut p, &hash);
replacement in api/src/ssh.rs at line 1145
[2.362039]→[2.362039:362103](∅→∅) − libpijul::change::Change::size_no_contents(&mut f)?
+ pijul_core::change::Change::size_no_contents(&mut f)?
replacement in api/src/ssh.rs at line 1157
[2.362366]→[2.362366:362406](∅→∅) − hash: libpijul::pristine::Hash,
+ hash: pijul_core::pristine::Hash,
replacement in api/src/ssh.rs at line 1171
[2.362849]→[2.362849:362923](∅→∅) − Some(ChannelSpec::CI(_)) | Some(ChannelSpec::Channel(_)) => {
+ Some(ChannelSpec::Channel(_)) => {
edit in api/src/ssh.rs at line 1225
[2.364998]→[2.364998:365073](∅→∅) − ChannelSpec::CI(c) => self.channel = Some(ChannelSpec::CI(c)),
replacement in api/src/ssh.rs at line 1237
[2.365381]→[2.365381:365411](∅→∅) + hash: pijul_core::Hash,
replacement in api/src/ssh.rs at line 1239
[2.365447]→[2.365447:365495](∅→∅) − use libpijul::changestore::ChangeStore;
+ use pijul_core::changestore::ChangeStore;
replacement in api/src/ssh.rs at line 1317
[2.368006]→[2.368006:368036](∅→∅) + hash: pijul_core::Hash,
replacement in api/src/ssh.rs at line 1337
[2.368726]→[2.368726:368790](∅→∅) − use libpijul::changestore::ChangeStore;
+ use pijul_core::changestore::ChangeStore;
replacement in api/src/ssh.rs at line 1425
[2.372853]→[2.372853:372905](∅→∅) − use libpijul::changestore::ChangeStore;
+ use pijul_core::changestore::ChangeStore;
replacement in api/src/ssh.rs at line 1466
[2.374360]→[2.374360:374448](∅→∅) − hash: libpijul::pristine::Hash,
− header: libpijul::change::ChangeHeader,
+ hash: pijul_core::pristine::Hash,
+ header: pijul_core::change::ChangeHeader,
replacement in api/src/settings.rs at line 289
[2.388403]→[2.388403:388460](∅→∅) − r::creation_ip.eq(addr.to_string()),
+ // r::creation_ip.eq(addr.ip()),
replacement in api/src/repository/router.rs at line 10
[2.391983]→[2.391983:391999](∅→∅) edit in api/src/repository/router.rs at line 20
[2.392220]→[2.392220:392249](∅→∅) − channel: Option<String>,
replacement in api/src/repository/router.rs at line 52
[2.392877]→[2.392877:392922](∅→∅) − meta: libpijul::pristine::InodeMetadata,
+ meta: pijul_core::pristine::InodeMetadata,
replacement in api/src/repository/router.rs at line 63
[2.393128]→[2.393128:393154](∅→∅) + Query(pos): Query<PosQuery>,
replacement in api/src/repository/router.rs at line 68
[2.393333]→[2.393333:393431](∅→∅) − let (id, _) = super::repository_id(&mut db, &tree.owner, &tree.repo, uid, Perm::READ).await?;
+ let (id, _, _) = super::repository_id(&mut db, &tree.owner, &tree.repo, uid, Perm::READ).await?;
replacement in api/src/repository/router.rs at line 82
[2.394024]→[10.17188:17326](∅→∅) − } else if txn.channels("")?.is_empty()
− && (pos.channel.as_deref() == Some("main") || pos.channel.is_none())
− {
+ } else if txn.channels("")?.is_empty() && channel_ == "main" {
replacement in api/src/repository/router.rs at line 121
[2.395437]→[2.395437:395537](∅→∅) − for x in libpijul::fs::iter_graph_children(&txn, &repo_.changes, txn.graph(&*ch), pos)?
+ for x in
+ pijul_core::fs::iter_graph_children(&txn, &repo_.changes, txn.graph(&*ch), pos)?
replacement in api/src/repository/router.rs at line 139
[2.396084]→[2.396084:396223](∅→∅) − let txn = libpijul::ArcTxn::new(txn);
− libpijul::output::output_file(&repo_.changes, &txn, &channel, pos, &mut out)
+ let txn = pijul_core::ArcTxn::new(txn);
+ pijul_core::output::output_file(&repo_.changes, &txn, &channel, pos, &mut out)
replacement in api/src/repository/router.rs at line 180
[2.397235]→[2.397235:397280](∅→∅) − _: Option<(&T, &[&libpijul::Hash])>,
+ _: Option<(&T, &[&pijul_core::Hash])>,
edit in api/src/repository/mod.rs at line 6
[2.397622]→[2.397622:397655](∅→∅) − use libpijul::{Base32, MutTxnT};
edit in api/src/repository/mod.rs at line 7
+ use pijul_core::{Base32, MutTxnT};
edit in api/src/repository/mod.rs at line 19
replacement in api/src/repository/mod.rs at line 88
[2.399295]→[2.399295:399362](∅→∅) − pub pristine: RwLock<libpijul::pristine::sanakirja::Pristine>,
+ pub pristine: RwLock<pijul_core::pristine::sanakirja::Pristine>,
replacement in api/src/repository/mod.rs at line 168
[2.401898]→[2.401898:401971](∅→∅) − ) -> Result<libpijul::pristine::sanakirja::Pristine, crate::Error> {
+ ) -> Result<pijul_core::pristine::sanakirja::Pristine, crate::Error> {
replacement in api/src/repository/mod.rs at line 171
[2.402045]→[2.402045:402140](∅→∅) − let repo = libpijul::pristine::sanakirja::Pristine::new_nolock(&path.join("db"))?;
+ let repo = pijul_core::pristine::sanakirja::Pristine::new_nolock(&path.join("db"))?;
replacement in api/src/repository/mod.rs at line 175
[2.402223]→[2.402223:402291](∅→∅) − Ok(libpijul::pristine::sanakirja::Pristine::new_nolock(
+ Ok(pijul_core::pristine::sanakirja::Pristine::new_nolock(
replacement in api/src/repository/mod.rs at line 182
[2.402360]→[2.402360:402377](∅→∅) + #[derive(Debug, PartialEq, Eq)]
edit in api/src/repository/mod.rs at line 185
[2.402421]→[2.402421:402437](∅→∅) edit in api/src/repository/mod.rs at line 190
[2.402535]→[2.402535:402651](∅→∅) − if c.ends_with("/ci") {
− ChannelSpec::CI(c.split_at(c.len() - 3).0.to_string())
− } else {
edit in api/src/repository/mod.rs at line 191
[2.402700]→[2.402700:402710](∅→∅) replacement in api/src/repository/mod.rs at line 220
[2.403410]→[2.403410:403452](∅→∅) − ) -> Result<(Uuid, Perm), crate::Error> {
+ ) -> Result<(Uuid, Uuid, Perm), crate::Error> {
replacement in api/src/repository/mod.rs at line 223
[2.403531]→[2.403531:403601](∅→∅) − if let Some((rid, perms, suspended, is_public)) = r::repositories
+ if let Some((rid, perms, uid, suspended, is_public)) = r::repositories
edit in api/src/repository/mod.rs at line 232
replacement in api/src/repository/mod.rs at line 236
[2.403935]→[2.403935:403992](∅→∅) − .get_result::<(uuid::Uuid, i64, bool, bool)>(db)
+ .get_result::<(uuid::Uuid, i64, uuid::Uuid, bool, bool)>(db)
replacement in api/src/repository/mod.rs at line 249
[2.404279]→[2.404279:404306](∅→∅) replacement in api/src/repository/mod.rs at line 362
[2.407453]→[2.407453:407481](∅→∅) replacement in api/src/repository/mod.rs at line 424
[2.409180]→[2.409180:409226](∅→∅) − pub public_key: libpijul::key::PublicKey,
+ pub public_key: pijul_core::key::PublicKey,
replacement in api/src/repository/mod.rs at line 439
[2.409655]→[2.409655:409704](∅→∅) − pub meta: libpijul::pristine::InodeMetadata,
+ pub meta: pijul_core::pristine::InodeMetadata,
replacement in api/src/repository/mod.rs at line 443
[2.409724]→[2.409724:409819](∅→∅) − T: libpijul::GraphTxnT + libpijul::ChannelTxnT,
− C: libpijul::changestore::ChangeStore,
+ T: pijul_core::GraphTxnT + pijul_core::ChannelTxnT,
+ C: pijul_core::changestore::ChangeStore,
replacement in api/src/repository/mod.rs at line 449
[2.409878]→[2.409878:409937](∅→∅) − pos: libpijul::pristine::Position<libpijul::ChangeId>,
+ pos: pijul_core::pristine::Position<pijul_core::ChangeId>,
replacement in api/src/repository/mod.rs at line 456
[2.410141]→[2.410141:410238](∅→∅) − if let Some(x) = libpijul::fs::iter_basenames(txn, changes, txn.graph(channel), pos)
+ if let Some(x) = pijul_core::fs::iter_basenames(txn, changes, txn.graph(channel), pos)
replacement in api/src/repository/changestore.rs at line 1
[2.410821]→[2.410822:411028](∅→∅) − use libpijul::change::{Change, ChangeFile, ChangeHeader};
− use libpijul::changestore::filesystem::*;
− use libpijul::changestore::*;
− use libpijul::pristine::{Base32, ChangeId, Hash, Merkle, Position, Vertex};
+ use pijul_core::change::{Change, ChangeFile, ChangeHeader};
+ use pijul_core::changestore::filesystem::*;
+ use pijul_core::changestore::*;
+ use pijul_core::pristine::{Base32, ChangeId, Hash, Merkle, Position, Vertex};
replacement in api/src/repository/changestore.rs at line 27
[2.411631]→[2.411631:411673](∅→∅) − Tag(#[from] libpijul::tag::TagError),
+ Tag(#[from] pijul_core::tag::TagError),
replacement in api/src/repository/changestore.rs at line 31
[2.411764]→[2.411764:411819](∅→∅) − ChangeFile(#[from] libpijul::change::ChangeError),
+ ChangeFile(#[from] pijul_core::change::ChangeError),
replacement in api/src/repository/changestore.rs at line 69
[2.412851]→[2.412851:412890](∅→∅) − libpijul::change::ChangeError,
+ pijul_core::change::ChangeError,
replacement in api/src/repository/changestore.rs at line 81
[2.413424]→[2.413424:413504](∅→∅) − let p = Arc::new(Mutex::new(libpijul::change::ChangeFile::open(
+ let p = Arc::new(Mutex::new(pijul_core::change::ChangeFile::open(
replacement in api/src/repository/changestore.rs at line 97
[2.413884]→[2.413884:413937](∅→∅) − ) -> Result<(), libpijul::change::ChangeError> {
+ ) -> Result<(), pijul_core::change::ChangeError> {
replacement in api/src/repository/changestore.rs at line 107
[2.414174]→[2.414174:414199](∅→∅) − use libpijul::change::*;
+ use pijul_core::change::*;
replacement in api/src/repository/changestore.rs at line 114
[2.414389]→[2.414389:414542](∅→∅) − ) -> Result<Hashed<Hunk<Option<Hash>, Local>, Author>, libpijul::change::ChangeError> {
− use libpijul::change::*;
− use libpijul::pristine::Hasher;
+ ) -> Result<Hashed<Hunk<Option<Hash>, Local>, Author>, pijul_core::change::ChangeError> {
+ use pijul_core::change::*;
+ use pijul_core::pristine::Hasher;
replacement in api/src/repository/changestore.rs at line 237
[2.418171]→[2.418171:418262](∅→∅) − if let Ok(p) = libpijul::change::ChangeFile::open(hash, &path.to_str().unwrap()) {
+ if let Ok(p) = pijul_core::change::ChangeFile::open(hash, &path.to_str().unwrap()) {
replacement in api/src/repository/changestore.rs at line 251
[2.418682]→[2.418682:418764](∅→∅) − let p = libpijul::change::ChangeFile::open(*h, &path.to_str().unwrap())?;
+ let p = pijul_core::change::ChangeFile::open(*h, &path.to_str().unwrap())?;
replacement in api/src/repository/changestore.rs at line 259
[2.419015]→[2.419015:419080](∅→∅) − let mut p = libpijul::tag::OpenTagFile::open(&path, h)?;
+ let mut p = pijul_core::tag::OpenTagFile::open(&path, h)?;
replacement in api/src/repository/changestore.rs at line 302
[2.420553]→[2.420553:420647](∅→∅) − let mut p = libpijul::change::ChangeFile::open(change, &path.to_str().unwrap())?;
+ let mut p = pijul_core::change::ChangeFile::open(change, &path.to_str().unwrap())?;
replacement in api/src/repository/changestore.rs at line 335
[2.421572]→[2.421572:421640](∅→∅) − E: From<Self::Error> + From<libpijul::change::ChangeError>,
+ E: From<Self::Error> + From<pijul_core::change::ChangeError>,
replacement in api/src/repository/admin.rs at line 168
[2.428843]→[2.428843:428895](∅→∅) − let (id, _) = crate::repository::repository_id(
+ let (id, _, _) = crate::repository::repository_id(
replacement in api/src/repository/admin.rs at line 236
[2.430867]→[2.430867:430919](∅→∅) − let (id, _) = crate::repository::repository_id(
+ let (id, _, _) = crate::repository::repository_id(
replacement in api/src/replication.rs at line 5
[10.18050]→[10.18050:18438](∅→∅) − use libpijul::changestore::ChangeStore;
− use libpijul::fs::FsErrorC;
− use libpijul::output::{FileError, OutputError};
− use libpijul::pristine::sanakirja::MutTxn0;
− use libpijul::pristine::sanakirja::SanakirjaError;
− use libpijul::pristine::{ForkError, TreeErr, TxnErr};
− use libpijul::{
− ApplyError, ArcTxn, ChannelMutTxnT, ChannelRef, MutTxnT, MutTxnTExt, TxnT, TxnTExt,
− UnrecordError,
+ use pijul_core::changestore::ChangeStore;
+ use pijul_core::fs::FsErrorC;
+ use pijul_core::output::{FileError, OutputError};
+ use pijul_core::pristine::sanakirja::MutTxn0;
+ use pijul_core::pristine::sanakirja::SanakirjaError;
+ use pijul_core::pristine::{ForkError, TreeErr, TxnErr};
+ use pijul_core::{
+ ApplyError, ArcTxn, Base32, ChannelMutTxnT, MutTxnT, MutTxnTExt, TxnT, TxnTExt, UnrecordError,
edit in api/src/replication.rs at line 16
+ use std::process::Stdio;
edit in api/src/replication.rs at line 29
+ client: reqwest::Client,
edit in api/src/replication.rs at line 46
+ client: reqwest::Client::new(),
edit in api/src/replication.rs at line 79
+ #[error(transparent)]
+ Reqwest(#[from] reqwest::Error),
replacement in api/src/replication.rs at line 108
[2.434118]→[2.434118:434275](∅→∅) − Err(libpijul::ApplyError::LocalChange(
− libpijul::LocalApplyError::ChangeAlreadyOnChannel { .. },
+ Err(pijul_core::ApplyError::LocalChange(
+ pijul_core::LocalApplyError::ChangeAlreadyOnChannel { .. },
replacement in api/src/replication.rs at line 117
[2.434614]→[2.434614:434768](∅→∅) − Err(libpijul::ApplyError::LocalChange(
− libpijul::LocalApplyError::DependencyMissing { hash },
+ Err(pijul_core::ApplyError::LocalChange(
+ pijul_core::LocalApplyError::DependencyMissing { hash },
replacement in api/src/replication.rs at line 125
[2.435061]→[2.435061:435227](∅→∅) − libpijul::ApplyError::LocalChange(
− libpijul::LocalApplyError::DependencyMissing { hash },
+ pijul_core::ApplyError::LocalChange(
+ pijul_core::LocalApplyError::DependencyMissing { hash },
replacement in api/src/replication.rs at line 155
− let repo_ = s.locks.get(&repo).await.unwrap();
− tokio::task::spawn_blocking(move || {
− if let Some((temp, depl)) = {
− let pri = repo_.pristine.blocking_write();
− let txn = pri.arc_txn_begin()?;
− let channel = format!("{}_{}", repo, channel);
− let channel_ = {
− let mut txn_ = txn.write();
− txn_.open_or_create_channel(&channel)?
− };
− let changes = repo_.changes.clone();
+ if let Some((state, deployment)) =
+ get_config_state(&s.locks, repo, channel).await?
+ {
+ debug!("{:?} {:?}", state, deployment);
+ let mut db = s.db.get().await.unwrap();
+ use crate::db::jobs::dsl as jobs;
+ let id = diesel::insert_into(jobs::jobs)
+ .values((
+ jobs::repo.eq(repo),
+ jobs::repo_state.eq(state.to_base32()),
+ ))
+ .returning(jobs::id)
+ .get_result::<uuid::Uuid>(&mut db)
+ .await
+ .unwrap();
+
+ use crate::db::repositories::dsl as repositories;
+ use crate::db::users::dsl as users;
replacement in api/src/replication.rs at line 174
[12.533]→[20.750:1400](∅→∅) − s.output_for_deployment(&txn, &channel_, &changes)?
− } {
− tokio::spawn(async move {
− use crate::db::jobs::dsl as jobs;
− let id = diesel::insert_into(jobs::jobs)
− .values((jobs::repo.eq(repo),))
− .returning(jobs::id)
− .get_result::<uuid::Uuid>(&mut s.db.get().await.unwrap())
− .await
− .unwrap();
+ let (owner, repo) = repositories::repositories
+ .find(repo)
+ .inner_join(users::users)
+ .select((users::login, repositories::name))
+ .get_result::<(String, String)>(&mut db)
+ .await
+ .unwrap();
+ let mut targets = std::collections::HashMap::new();
+ targets.insert(deployment.clone(), format!(".#{}", deployment));
+ let body = serde_json::to_string(&ci::Trigger {
+ id,
+ owner,
+ repo,
+ state: state.to_base32(),
+ targets,
+ })
+ .unwrap();
+ debug!("{:?} {}", s.ci.url, body);
+ for (n, ci) in s.ci.url.iter().enumerate() {
+ let res = s
+ .client
+ .post(ci.clone() + "/trigger")
+ .header("Content-Type", "application/json")
+ .body(body.clone())
+ .send()
+ .await
+ .unwrap();
+ debug!("{:?}", res);
replacement in api/src/replication.rs at line 203
[12.1144]→[20.1401:1787](∅→∅) − let permit = s.builders.acquire().await.unwrap();
− {
− s.deploy(id, temp, depl).await?;
− }
− std::mem::drop(permit);
− Ok::<_, Error>(())
− });
+ if let reqwest::StatusCode::OK = res.status() {
+ tokio::spawn(async move {
+ sync_job(&mut db, s.client, &s.ci, n, id).await;
+ });
+ break;
+ }
replacement in api/src/replication.rs at line 210
[20.1817]→[20.1817:1892](∅→∅) − Ok::<_, Error>(())
− });
replacement in api/src/replication.rs at line 230
[10.21149]→[10.21149:21210](∅→∅) − &libpijul::working_copy::sink(),
+ &pijul_core::working_copy::sink(),
replacement in api/src/replication.rs at line 233
[2.436979]→[2.436979:437076](∅→∅) − Err(libpijul::UnrecordError::ChangeNotInChannel { .. }) | Ok(_) => {
+ Err(pijul_core::UnrecordError::ChangeNotInChannel { .. }) | Ok(_) => {
replacement in api/src/replication.rs at line 257
[2.438183]→[2.438183:438276](∅→∅) − libpijul::changestore::filesystem::push_filename(&mut p, &hash);
+ pijul_core::changestore::filesystem::push_filename(&mut p, &hash);
replacement in api/src/replication.rs at line 332
[10.21396]→[10.21396:21520](∅→∅) − txn: &ArcTxn<libpijul::pristine::sanakirja::MutTxn0>,
− channel: &ChannelRef<libpijul::pristine::sanakirja::MutTxn0>,
+ txn: &ArcTxn<pijul_core::pristine::sanakirja::MutTxn0>,
+ channel: &pijul_core::ChannelRef<pijul_core::pristine::sanakirja::MutTxn0>,
replacement in api/src/replication.rs at line 337
[10.21590]→[10.21590:21727](∅→∅) − let txn_ = txn.read();
− let channel_ = channel.read();
− let (pos, is_dir) = txn_.follow_oldest_path(changes, &channel, path)?;
+ let (pos, is_dir) = txn.read().follow_oldest_path(changes, channel, path)?;
replacement in api/src/replication.rs at line 343
[10.21846]→[10.21846:21969](∅→∅) − use libpijul::ChannelTxnT;
− let mut graph = libpijul::alive::retrieve(&*txn_, txn_.graph(&*channel_), pos, false)?;
+ use pijul_core::ChannelTxnT;
+ let mut graph = {
+ let txn = txn.read();
+ pijul_core::alive::retrieve(&*txn, txn.graph(&*channel.read()), pos, false)?
+ };
replacement in api/src/replication.rs at line 350
[10.22004]→[10.22004:22155](∅→∅) − std::mem::drop(channel_);
− std::mem::drop(txn_);
− libpijul::alive::output_graph(changes, &txn, &channel, &mut out, &mut graph, &mut forward)
+ pijul_core::alive::output_graph(changes, &txn, &channel, &mut out, &mut graph, &mut forward)
replacement in api/src/replication.rs at line 356
[10.22264]→[10.22264:22273](∅→∅),
[10.22273]→[12.1529:1559](∅→∅),
[12.1559]→[10.22288:22566](∅→∅),
[10.22288]→[10.22288:22566](∅→∅),
[10.22566]→[12.1560:1622](∅→∅),
[12.1622]→[10.22621:22745](∅→∅),
[10.22621]→[10.22621:22745](∅→∅) − impl H {
− fn output_for_deployment<
− C: ChangeStore<Error = crate::repository::changestore::Error> + Clone + Send + Sync + 'static,
− >(
− &self,
− txn: &ArcTxn<libpijul::pristine::sanakirja::MutTxn0>,
− channel: &ChannelRef<libpijul::pristine::sanakirja::MutTxn0>,
− changes: &C,
− ) -> Result<Option<(tempfile::TempDir, String)>, Error> {
− if let Some(config) = get_file(txn, channel, changes, "pijul.toml")? {
− debug!("config = {:?}", config);
+ pub async fn get_config_state(
+ locks: &RepositoryLocks,
+ repo: uuid::Uuid,
+ channel: String,
+ ) -> Result<Option<(pijul_core::Merkle, String)>, Error> {
+ debug!("get_config_state");
+ let repo_ = locks.get(&repo).await.unwrap();
+ tokio::task::spawn_blocking(move || {
+ let pri = repo_.pristine.blocking_write();
+ let txn_ = pri.arc_txn_begin()?;
+ let channel = format!("{}_{}", repo, channel);
+ if let Some(channel) = txn_.read().load_channel(&channel)? {
+ if let Some(config) = get_file(&txn_, &channel, &repo_.changes, "pijul.toml")? {
+ debug!("config = {:?}", config);
replacement in api/src/replication.rs at line 371
[10.22746]→[10.22746:22814](∅→∅),
[10.22814]→[11.401:441](∅→∅),
[11.441]→[10.22814:22870](∅→∅),
[10.22814]→[10.22814:22870](∅→∅),
[10.22916]→[10.22916:23061](∅→∅),
[10.23061]→[13.0:64](∅→∅),
[13.64]→[12.1679:1952](∅→∅),
[12.1679]→[12.1679:1952](∅→∅),
[12.1952]→[13.65:118](∅→∅),
[13.118]→[12.1976:2030](∅→∅),
[12.1976]→[12.1976:2030](∅→∅) − if let Ok(parsed) = toml::from_str::<Config>(&config) {
− debug!("{:?}", parsed);
− if let Some(depl) = parsed.deployment {
− let txn = txn.clone();
− let channel = channel.clone();
− let changes = changes.clone();
− let tmp_dir = tempfile::tempdir().unwrap();
− let wc =
− libpijul::working_copy::filesystem::FileSystem::from_root(tmp_dir.path());
− libpijul::output::output_repository_no_pending(
− &wc, &changes, &txn, &channel, "", true, None, 1, 0,
− )
− .unwrap();
− return Ok(Some((tmp_dir, depl)));
+ if let Ok(parsed) = toml::from_str::<Config>(&config) {
+ if let Some(dep) = parsed.deployment {
+ if let Some(Ok((_, (_, state)))) =
+ txn_.read().reverse_log(&channel.read(), None)?.next()
+ {
+ return Ok(Some((state.into(), dep)));
+ }
+ }
replacement in api/src/replication.rs at line 380
[12.2048]→[12.2048:2062](∅→∅) replacement in api/src/replication.rs at line 383
[12.2089]→[12.2089:2095](∅→∅),
[12.2095]→[10.23215:23216](∅→∅),
[10.23215]→[10.23215:23216](∅→∅),
[10.23216]→[12.2096:2494](∅→∅) − }
−
− async fn deploy(
− &self,
− id: uuid::Uuid,
− tmp_dir: tempfile::TempDir,
− depl: String,
− ) -> Result<(), Error> {
− use std::process::Stdio;
− let (status_tx, status_rx) = tokio::sync::watch::channel(None);
− let (kill_tx, kill_rx) = tokio::sync::oneshot::channel();
− let p = tmp_dir.path().join(depl);
− debug!("launching {:?}", p);
+ })
+ .await
+ .unwrap()
+ }
replacement in api/src/replication.rs at line 388
[11.820]→[12.2495:2717](∅→∅) − let mut cmd = tokio::process::Command::new(p)
− .current_dir(tmp_dir.path())
− .stderr(Stdio::piped())
− .stdout(Stdio::piped())
− .stdin(Stdio::null())
− .spawn()
+ pub async fn sync_job(
+ db: &mut diesel_async::AsyncPgConnection,
+ client: reqwest::Client,
+ ci: &crate::config_file::CiConfig,
+ ci_n: usize,
+ job: uuid::Uuid,
+ ) {
+ let mut files = if let Some(ref f) = ci.filesystem {
+ let stdout = OpenOptions::new()
+ .append(true)
+ .create(true)
+ .open(&f.join(&format!("{}.stdout", job)))
+ .await
+ .unwrap();
+ let stderr = OpenOptions::new()
+ .append(true)
+ .create(true)
+ .open(&f.join(&format!("{}.stderr", job)))
+ .await
edit in api/src/replication.rs at line 408
+ Some((stdout, stderr))
+ } else {
+ None
+ };
replacement in api/src/replication.rs at line 413
[10.24871]→[12.2741:3049](∅→∅),
[12.3049]→[10.25275:25276](∅→∅),
[10.25275]→[10.25275:25276](∅→∅),
[10.25276]→[12.3050:3176](∅→∅),
[12.3176]→[10.25432:25433](∅→∅),
[10.25432]→[10.25432:25433](∅→∅),
[10.25433]→[12.3177:4015](∅→∅) − use tokio::io::AsyncBufReadExt;
− let stdout = tokio::io::BufReader::new(cmd.stdout.take().unwrap());
− let mut stdout = stdout.lines();
− let mut stdout_ok = true;
− let stderr = tokio::io::BufReader::new(cmd.stderr.take().unwrap());
− let mut stderr = stderr.lines();
−
− self.jobs
− .lock()
− .unwrap()
− .insert(id, (kill_tx, status_tx.clone(), status_rx));
−
− let mut stderr_ok = true;
− let mut buf_stdout = String::new();
− let mut last_stdout = std::time::UNIX_EPOCH;
− let mut buf_stderr = String::new();
− let mut last_stderr = std::time::UNIX_EPOCH;
− let bound = std::time::Duration::from_secs(1);
− let mut files = if let Some(ref path) = self.ci.filesystem {
− Some((
− OpenOptions::new()
− .append(true)
− .create(true)
− .open(&path.join(&format!("{}.stdout", id)))
− .await
− .unwrap(),
− OpenOptions::new()
− .append(true)
− .create(true)
− .open(&path.join(&format!("{}.stderr", id)))
− .await
− .unwrap(),
− ))
+ loop {
+ debug!("Querying status");
+ let status = client
+ .get(format!("{}/status/{}", ci.url[ci_n], job))
+ .send()
+ .await
+ .unwrap();
+ let status = if let reqwest::StatusCode::OK = status.status() {
+ let status: ci::Status = status.json().await.unwrap();
+ debug!("STATUS {:?}", status);
+ use crate::db::jobs::dsl as jobs;
+ diesel::update(jobs::jobs.find(job))
+ .set((
+ jobs::status.eq(status.code),
+ jobs::ended.eq(status.finished),
+ ))
+ .execute(db)
+ .await
+ .unwrap();
+ Some(status)
replacement in api/src/replication.rs at line 436
[12.4060]→[12.4060:4232](∅→∅) − while stdout_ok || stderr_ok {
− debug!(
− "stdout || stderr {:?} {:?}",
− buf_stdout.len(),
− buf_stderr.len()
+
+ if let Some((ref mut stdout, ref mut stderr)) = files {
+ let stdout_len = stdout.metadata().await.unwrap().len();
+ let stderr_len = stderr.metadata().await.unwrap().len();
+ let (stdout_, stderr_) = tokio::join!(
+ client
+ .get(format!("{}/stdout/{}", ci.url[ci_n], job))
+ .header("Range", format!("bytes={stdout_len}-*"))
+ .send(),
+ client
+ .get(format!("{}/stderr/{}", ci.url[ci_n], job))
+ .header("Range", format!("bytes={stderr_len}-*"))
+ .send()
replacement in api/src/replication.rs at line 450
[12.4247]→[12.4247:4492](∅→∅),
[12.4492]→[15.0:39](∅→∅),
[15.39]→[12.4527:4783](∅→∅),
[12.4527]→[12.4527:4783](∅→∅),
[12.4783]→[10.27608:27609](∅→∅),
[10.27608]→[10.27608:27609](∅→∅),
[10.27609]→[12.4784:4978](∅→∅),
[12.4978]→[10.29617:29643](∅→∅),
[10.29617]→[10.29617:29643](∅→∅),
[10.29643]→[12.4979:5383](∅→∅),
[12.5383]→[16.69:125](∅→∅),
[16.125]→[12.5439:5538](∅→∅),
[12.5439]→[12.5439:5538](∅→∅),
[12.5538]→[15.40:79](∅→∅),
[15.79]→[12.5573:6309](∅→∅),
[12.5573]→[12.5573:6309](∅→∅),
[12.6309]→[10.30743:30775](∅→∅),
[10.30743]→[10.30743:30775](∅→∅) − tokio::select! {
− line = stdout.next_line(), if stdout_ok => {
− let n = if let Some(line) = line? {
− buf_stdout.push_str(&line);
− buf_stdout.push('\n');
− line.len() + 1
− } else {
− 0
− };
− if last_stdout.elapsed().unwrap() >= bound || n == 0 {
− debug!("sending stdout to db {:?} {:?}", buf_stdout.len(), buf_stderr.len());
−
− if let Some((ref mut stdout, _)) = files {
− stdout.write_all(buf_stdout.as_bytes()).await?;
− stdout.flush().await?;
− }
− buf_stdout.clear();
− debug!("stdout/stderr {:?} {:?}", buf_stdout.len(), buf_stderr.len());
− last_stdout = std::time::SystemTime::now();
− }
− if n == 0 {
− stdout_ok = false
− }
− }
− line = stderr.next_line(), if stderr_ok => {
− let n = if let Some(line) = line? {
− buf_stderr.push_str(&line);
− buf_stderr.push('\n');
− line.len() + 1
− } else {
− 0
− };
− if last_stderr.elapsed().unwrap() >= bound || n == 0 {
− debug!("sending stderr to db {:?}", buf_stderr.len());
− if let Some((_, ref mut stderr)) = files {
− stderr.write_all(buf_stderr.as_bytes()).await?;
− stderr.flush().await?;
− }
− buf_stderr.clear();
− last_stderr = std::time::SystemTime::now();
− }
− debug!("{:?}", buf_stderr.len());
− if n == 0 {
− stderr_ok = false
− }
− }
− }
+ let stdout_ = stdout_.unwrap();
+ let stderr_ = stderr_.unwrap();
+ debug!("{:?} {:?}", stdout_, stderr_);
+ let bytes = stdout_.bytes().await.unwrap();
+ stdout.write(&bytes).await.unwrap();
+ let bytes = stderr_.bytes().await.unwrap();
+ stderr.write(&bytes).await.unwrap();
replacement in api/src/replication.rs at line 459
[12.6311]→[12.6311:6417](∅→∅) − let status = tokio::select! {
− status = cmd.wait() => {
− status?.code()
+ if let Some(status) = status {
+ let (mut status_tx, _status_rx) = tokio::sync::watch::channel(None);
+ let (_kill_tx, mut kill_rx) = tokio::sync::oneshot::channel();
+ for (script, s) in status.results.iter() {
+ let mut cmd = tokio::process::Command::new("nix-store");
+ cmd.arg("-r").arg(&s);
+ let cmd = cmd
+ .stderr(Stdio::piped())
+ .stdout(Stdio::piped())
+ .stdin(Stdio::null())
+ .spawn()
+ .unwrap();
+ ci::dump_cmd(cmd, &mut files, &mut kill_rx, &mut status_tx)
+ .await
+ .unwrap();
replacement in api/src/replication.rs at line 475
[12.6431]→[12.6431:6516](∅→∅) − _ = kill_rx => {
− cmd.kill().await?;
− None
+ for (script, s) in status.results.iter() {
+ debug!("launching {:?} {:?}", s, script);
+ let cmd = tokio::process::Command::new(format!("{}/bin/{script}", s.display()))
+ .stderr(Stdio::piped())
+ .stdout(Stdio::piped())
+ .stdin(Stdio::null())
+ .spawn()
+ .unwrap();
+ ci::dump_cmd(cmd, &mut files, &mut kill_rx, &mut status_tx)
+ .await
+ .unwrap();
replacement in api/src/replication.rs at line 487
[12.6530]→[12.6530:7070](∅→∅) − };
− debug!("process exited with {:?}", status);
− debug!("stderr {}", buf_stderr);
− debug!("stdout {}", buf_stdout);
− let now = chrono::Utc::now();
− use crate::db::jobs::dsl as jobs;
− diesel::update(jobs::jobs.find(id))
− .set((jobs::status.eq(status), jobs::ended.eq(&now)))
− .execute(&mut self.db.get().await.unwrap())
− .await?;
− status_tx.send(Some((now, status))).unwrap();
− self.jobs.lock().unwrap().remove(&id);
− Ok::<_, Error>(())
+ break;
+ }
+ tokio::time::sleep(std::time::Duration::from_secs(1)).await
edit in api/src/main.rs at line 5
replacement in api/src/main.rs at line 43
[2.453023]→[2.453023:453034](∅→∅) replacement in api/src/main.rs at line 103
[2.454664]→[4.7264:7410](∅→∅) − .route("/static/{*wildcard}", any(proxy::node_proxy_cached))
− .route("/_app/immutable/{*wildcard}", any(proxy::node_proxy_cached))
+ // .route("/static/{*wildcard}", any(proxy::node_proxy_cached))
+ // .route("/_app/immutable/{*wildcard}", any(proxy::node_proxy_cached))
replacement in api/src/main.rs at line 120
[4.7450]→[2.455407:455438](∅→∅),
[2.455407]→[2.455407:455438](∅→∅) + // .route("/", any(root))
+ .route(
+ "/{owner}/{repo}/.pijul",
+ any(repository::dot_pijul::dot_pijul),
+ )
replacement in api/src/main.rs at line 132
[2.455586]→[4.7451:7499](∅→∅) − .fallback(proxy::node_proxy_not_cached)
+ // .fallback(proxy::node_proxy_not_cached)
edit in api/src/main.rs at line 180
+ let listener = tokio::net::TcpListener::bind(http_addr).await.unwrap();
replacement in api/src/main.rs at line 187
[4.8033]→[4.8033:8196](∅→∅) − redirect_http_to_https(
− config_file.http.http_port,
− config_file.http.https_port,
− app_,
+ axum::serve(
+ listener,
+ Router::new()
+ .route("/", get(redirect_http_to_https))
+ .into_make_service_with_connect_info::<SocketAddr>(),
replacement in api/src/main.rs at line 193
[4.8214]→[4.8214:8273](∅→∅) − .await;
− Ok::<_, Error>(())
replacement in api/src/main.rs at line 214
[4.9037]→[4.9037:9097](∅→∅) − .await?;
− Ok::<_, Error>(())
edit in api/src/main.rs at line 253
edit in api/src/main.rs at line 266
replacement in api/src/main.rs at line 268
[2.458647]→[2.458647:460698](∅→∅) − pub async fn redirect_http_to_https(http: u16, https: u16, mut app: Router<()>) {
− fn make_https(
− host: String,
− uri: http::Uri,
− http: u16,
− https: u16,
− ) -> Result<http::Uri, axum::BoxError> {
− let mut parts = uri.into_parts();
−
− parts.scheme = Some(axum::http::uri::Scheme::HTTPS);
−
− if parts.path_and_query.is_none() {
− parts.path_and_query = Some("/".parse().unwrap());
− }
−
− let https_host = host.replace(&http.to_string(), &https.to_string());
− parts.authority = Some(https_host.parse()?);
−
− Ok(http::Uri::from_parts(parts)?)
− }
−
− use axum::extract::ConnectInfo;
− use axum::response::IntoResponse;
− use axum_extra::extract::Host;
− let redirect = move |Host(host): Host,
− uri: http::Uri,
− ConnectInfo(addr): ConnectInfo<SocketAddr>,
− r: http::Request<axum::body::Body>| async move {
− debug!("redirect {:?}", addr);
− if addr.ip().is_loopback() {
− debug!("is loopback");
− use tower_service::Service;
− Ok(app.call(r).await.into_response())
− } else {
− debug!("not loopback");
− match make_https(host, uri, http, https) {
− Ok(uri) => Ok(Redirect::permanent(&uri.to_string()).into_response()),
− Err(error) => {
− tracing::warn!(%error, "failed to convert URI to HTTPS");
− Err(StatusCode::BAD_REQUEST.into_response())
− }
− }
− }
− };
−
− let addr = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0);
− let http_addr = SocketAddr::V6(SocketAddrV6::new(addr, http, 0, 0));
−
− let listener = tokio::net::TcpListener::bind(http_addr).await.unwrap();
− tracing::debug!("listening on {}", listener.local_addr().unwrap());
− use axum::handler::HandlerWithoutStateExt;
− axum::serve(
− listener,
− redirect.into_make_service_with_connect_info::<SocketAddr>(),
− )
− .await
− .unwrap();
+ async fn redirect_http_to_https(uri: Uri) -> Redirect {
+ let uri = format!("https://{}{}", uri.host().unwrap(), uri.path());
+ Redirect::temporary(&uri)
replacement in api/src/main.rs at line 341
[2.462536]→[2.462536:462662](∅→∅) − let perm = Perm::from_bits(perm).unwrap();
− let perm_all = Perm::from_bits(perm_all).unwrap();
+ let perm = Perm::from_bits_truncate(perm);
+ let perm_all = Perm::from_bits_truncate(perm_all);
replacement in api/src/main.rs at line 516
[2.466871]→[2.466871:466911](∅→∅) − libpijul::output::ArchiveError<
+ pijul_core::output::ArchiveError<
replacement in api/src/main.rs at line 518
[2.466955]→[10.31644:31739](∅→∅) − libpijul::pristine::sanakirja::GenericTxn<sanakirja::MutTxn<Arc<sanakirja::Env>>>,
+ pijul_core::pristine::sanakirja::GenericTxn<sanakirja::MutTxn<Arc<sanakirja::Env>>>,
replacement in api/src/main.rs at line 526
[2.467153]→[2.467153:467183](∅→∅) + pijul_core::ApplyError<
replacement in api/src/main.rs at line 528
[2.467227]→[10.31769:31864](∅→∅) − libpijul::pristine::sanakirja::GenericTxn<sanakirja::MutTxn<Arc<sanakirja::Env>>>,
+ pijul_core::pristine::sanakirja::GenericTxn<sanakirja::MutTxn<Arc<sanakirja::Env>>>,
replacement in api/src/main.rs at line 532
[2.467370]→[2.467370:467426](∅→∅) − PijulChange(#[from] libpijul::change::ChangeError),
+ PijulChange(#[from] pijul_core::change::ChangeError),
replacement in api/src/main.rs at line 553
[2.468087]→[2.468087:468157](∅→∅) − Sanakirja(#[from] libpijul::pristine::sanakirja::SanakirjaError),
+ Sanakirja(#[from] pijul_core::pristine::sanakirja::SanakirjaError),
replacement in api/src/main.rs at line 599
[2.469625]→[2.469625:469667](∅→∅) − Key(#[from] libpijul::key::KeyError),
+ Key(#[from] pijul_core::key::KeyError),
replacement in api/src/main.rs at line 610
[2.469905]→[2.469905:470050](∅→∅) − impl<E: Into<Error> + std::error::Error> From<libpijul::pristine::TxnErr<E>> for Error {
− fn from(e: libpijul::pristine::TxnErr<E>) -> Self {
+ impl<E: Into<Error> + std::error::Error> From<pijul_core::pristine::TxnErr<E>> for Error {
+ fn from(e: pijul_core::pristine::TxnErr<E>) -> Self {
edit in api/src/jobs.rs at line 3
+ use axum::response::IntoResponse;
replacement in api/src/jobs.rs at line 8
[10.32270]→[10.32270:32319](∅→∅) − response::Response,
− routing::{any, get},
+ response::{Redirect, Response},
+ routing::{any, get, post},
edit in api/src/jobs.rs at line 19
+ use pijul_core::Base32;
edit in api/src/jobs.rs at line 21
+ use std::collections::hash_map::Entry;
replacement in api/src/jobs.rs at line 29
[10.32864]→[10.32864:32927](∅→∅) − .route("/{owner}/{repo}/{job_id}/ws", any(ws_handler))
+ .route("/{owner}/{repo}/{job_id}/retry", post(retry))
+ .route("/{owner}/{repo}/{job_id}/kill", post(kill))
+ .route("/{owner}/{repo}/{job_id}/ws", any(job_ws_handler))
+ .route("/{owner}/{repo}/ws", any(jobs_ws_handler))
replacement in api/src/jobs.rs at line 48
[10.33137]→[10.33137:33205](∅→∅) − #[derive(Debug, Selectable, Queryable, QueryableByName, Serialize)]
+ #[derive(Debug, Selectable, Queryable, QueryableByName, Serialize, Deserialize)]
edit in api/src/jobs.rs at line 144
+
+ pub async fn retry(
+ State(config): State<Config>,
+ jar: SignedCookieJar,
+ Path(path): Path<JobPath>,
+ ) -> Result<Redirect, crate::Error> {
+ let (uid, login) = if let Some((a, b)) = get_user_login(&jar, &config).await? {
+ (Some(a), Some(b))
+ } else {
+ (None, None)
+ };
+ let mut db = config.db.get().await?;
+
+ use crate::db::jobs::dsl as jobs;
+ use crate::db::repositories::dsl as repos;
+ use crate::db::users::dsl as users;
replacement in api/src/jobs.rs at line 161
[10.35887]→[10.35887:35912](∅→∅) − pub async fn ws_handler(
+ if let Some(repo) = repos::repositories
+ .inner_join(jobs::jobs)
+ .inner_join(users::users)
+ .filter(users::login.eq(&path.owner))
+ .filter(repos::name.eq(&path.repo))
+ .filter(repos::owner.nullable().eq(uid).or(crate::has_permissions!(
+ uid.unwrap_or(uuid::Uuid::nil()),
+ repos::id,
+ Perm::WRITE_JOBS.bits()
+ )))
+ .filter(jobs::id.eq(path.job_id))
+ .select(repos::id)
+ .get_result::<uuid::Uuid>(&mut db)
+ .await
+ .optional()?
+ {
+ let mut db = config.db.get().await.unwrap();
+ use crate::db::jobs::dsl as jobs;
+ let (Some(state), channel) = jobs::jobs
+ .find(&path.job_id)
+ .select((jobs::repo_state, jobs::channel))
+ .get_result::<(Option<String>, String)>(&mut db)
+ .await
+ .unwrap()
+ else {
+ return Err(crate::Error::NotFound);
+ };
+
+ let id = diesel::insert_into(jobs::jobs)
+ .values((jobs::repo.eq(repo), jobs::repo_state.eq(&state)))
+ .returning(jobs::id)
+ .get_result::<uuid::Uuid>(&mut db)
+ .await
+ .unwrap();
+
+ use crate::db::repositories::dsl as repositories;
+ use crate::db::users::dsl as users;
+
+ if let Some((state, deployment)) =
+ crate::replication::get_config_state(&config.repo_locks, repo, channel)
+ .await
+ .unwrap()
+ {
+ let (owner, repo) = repositories::repositories
+ .find(repo)
+ .inner_join(users::users)
+ .select((users::login, repositories::name))
+ .get_result::<(String, String)>(&mut db)
+ .await
+ .unwrap();
+ let mut targets = std::collections::HashMap::new();
+ targets.insert(deployment.clone(), format!(".#{}", deployment));
+ let body = serde_json::to_string(&ci::Trigger {
+ id,
+ owner,
+ repo,
+ state: state.to_base32(),
+ targets,
+ })
+ .unwrap();
+ debug!("{:?} {}", config.ci.url, body);
+ tokio::spawn(async move {
+ let client = reqwest::Client::new();
+ for (n, ci_url) in config.ci.url.iter().enumerate() {
+ let res = client
+ .post(ci_url.clone() + "/trigger")
+ .header("Content-Type", "application/json")
+ .body(body.clone())
+ .send()
+ .await
+ .unwrap();
+ if let reqwest::StatusCode::OK = res.status() {
+ crate::replication::sync_job(&mut db, client, &config.ci, n, id).await;
+ break;
+ }
+ }
+ });
+ }
+ Ok(Redirect::to(&format!("/{}/{}/jobs", path.owner, path.repo)))
+ } else {
+ Err(crate::Error::NotFound)
+ }
+ }
+
+ pub async fn kill(
+ State(config): State<Config>,
+ jar: SignedCookieJar,
+ Path(path): Path<JobPath>,
+ ) -> Result<Redirect, crate::Error> {
+ let (uid, login) = if let Some((a, b)) = get_user_login(&jar, &config).await? {
+ (Some(a), Some(b))
+ } else {
+ (None, None)
+ };
+ let mut db = config.db.get().await?;
+
+ use crate::db::jobs::dsl as jobs;
+ use crate::db::repositories::dsl as repos;
+ use crate::db::users::dsl as users;
+
+ if let Some(repo) = repos::repositories
+ .inner_join(jobs::jobs)
+ .inner_join(users::users)
+ .filter(users::login.eq(&path.owner))
+ .filter(repos::name.eq(&path.repo))
+ .filter(repos::owner.nullable().eq(uid).or(crate::has_permissions!(
+ uid.unwrap_or(uuid::Uuid::nil()),
+ repos::id,
+ Perm::WRITE_JOBS.bits()
+ )))
+ .filter(jobs::id.eq(path.job_id))
+ .select(repos::id)
+ .get_result::<uuid::Uuid>(&mut db)
+ .await
+ .optional()?
+ {
+ let client = reqwest::Client::new();
+
+ for cl in config.ci.url.iter() {
+ let res = client
+ .post(format!("{}/kill/{}", cl, path.job_id))
+ .header("Content-Type", "application/json")
+ .send()
+ .await
+ .unwrap();
+ }
+ Ok(Redirect::to(&format!("/{}/{}/jobs", path.owner, path.repo)))
+ } else {
+ Err(crate::Error::NotFound)
+ }
+ }
+
+ pub async fn job_ws_handler(
edit in api/src/jobs.rs at line 296
replacement in api/src/jobs.rs at line 299
[10.36019]→[10.36019:36095](∅→∅) − ws.on_upgrade(move |socket| handle_socket(config, path.job_id, socket))
+ use crate::db::repositories::dsl as repos;
+ use crate::db::users::dsl as users;
+ let (uid, login) = if let Ok(Some((a, b))) = get_user_login(&jar, &config).await {
+ (Some(a), Some(b))
+ } else {
+ (None, None)
+ };
+ let mut db = config.db.get().await.unwrap();
+ if repos::repositories
+ .inner_join(users::users)
+ .filter(users::login.eq(path.owner))
+ .filter(repos::name.eq(path.repo))
+ .filter(repos::owner.nullable().eq(uid).or(crate::has_permissions!(
+ uid.unwrap_or(uuid::Uuid::nil()),
+ repos::id,
+ Perm::READ_JOBS.bits()
+ )))
+ .select(repos::id)
+ .get_result::<uuid::Uuid>(&mut db)
+ .await
+ .optional()
+ .unwrap()
+ .is_none()
+ {
+ return crate::Error::NeedsAuth.into_response();
+ }
+
+ ws.on_upgrade(move |socket| job_handle_socket(config, path.job_id, socket))
+ }
+
+ pub async fn jobs_ws_handler(
+ State(config): State<Config>,
+ Path(path): Path<JobPath>,
+ jar: SignedCookieJar,
+ ws: WebSocketUpgrade,
+ ) -> Response {
+ use crate::db::repositories::dsl as repos;
+ use crate::db::users::dsl as users;
+ let (uid, login) = if let Some((a, b)) = get_user_login(&jar, &config).await.unwrap() {
+ (Some(a), Some(b))
+ } else {
+ (None, None)
+ };
+ let mut db = config.db.get().await.unwrap();
+ let Some(repo_id) = repos::repositories
+ .inner_join(users::users)
+ .filter(users::login.eq(path.owner))
+ .filter(repos::name.eq(path.repo))
+ .filter(repos::owner.nullable().eq(uid).or(crate::has_permissions!(
+ uid.unwrap_or(uuid::Uuid::nil()),
+ repos::id,
+ Perm::READ_JOBS.bits()
+ )))
+ .select(repos::id)
+ .get_result::<uuid::Uuid>(&mut db)
+ .await
+ .optional()
+ .unwrap()
+ else {
+ return crate::Error::NeedsAuth.into_response();
+ };
+
+ ws.on_upgrade(move |socket| jobs_handle_socket(config, repo_id, socket))
replacement in api/src/jobs.rs at line 365
[10.36139]→[10.36139:36154](∅→∅) replacement in api/src/jobs.rs at line 382
[10.36407]→[10.36407:36487](∅→∅) − async fn handle_socket(config: Config, id: uuid::Uuid, mut socket: WebSocket) {
+ async fn job_handle_socket(config: Config, id: uuid::Uuid, mut socket: WebSocket) {
edit in api/src/jobs.rs at line 403
[10.36723]→[21.25:59](∅→∅),
[21.59]→[21.59:112](∅→∅),
[21.112]→[21.112:334](∅→∅) − socket
− .send(
− serde_json::to_string(&Msg::Status {
− ended: chrono::DateTime::UNIX_EPOCH,
− status: None,
− })
− .unwrap()
− .into(),
− )
− .await
− .unwrap_or(());
replacement in api/src/jobs.rs at line 432
[22.137]→[22.137:242](∅→∅) − socket.send(serde_json::to_string(&Msg::Heartbeat).unwrap().into()).await.unwrap_or(());
+ socket.send(serde_json::to_string(&JobMsg::Heartbeat).unwrap().into()).await.unwrap_or(());
replacement in api/src/jobs.rs at line 463
[10.38790]→[10.38790:38859](∅→∅) − socket.send(serde_json::to_string(&Msg::Status {
+ socket.send(serde_json::to_string(&JobMsg::Status {
replacement in api/src/jobs.rs at line 472
[21.370]→[21.370:435](∅→∅) − socket.send(serde_json::to_string(&Msg::Status {
+ socket.send(serde_json::to_string(&JobMsg::Status {
replacement in api/src/jobs.rs at line 504
[16.493]→[16.493:567](∅→∅) − serde_json::to_string(&Msg::Status { ended, status })
+ serde_json::to_string(&JobMsg::Status { ended, status })
replacement in api/src/jobs.rs at line 529
[16.1237]→[16.1237:1297](∅→∅) − serde_json::to_string(&Msg::Chunk {
+ serde_json::to_string(&JobMsg::Chunk {
replacement in api/src/jobs.rs at line 558
[16.2166]→[16.2166:2226](∅→∅) − serde_json::to_string(&Msg::Chunk {
+ serde_json::to_string(&JobMsg::Chunk {
replacement in api/src/jobs.rs at line 605
[10.41709]→[10.41709:41757](∅→∅) − serde_json::to_string(&Msg::Chunk {
+ serde_json::to_string(&JobMsg::Chunk {
replacement in api/src/jobs.rs at line 611
[10.41884]→[10.41884:41932](∅→∅) − serde_json::to_string(&Msg::Chunk {
+ serde_json::to_string(&JobMsg::Chunk {
edit in api/src/jobs.rs at line 620
+ }
+ }
+
+ #[derive(Debug, Deserialize, Serialize)]
+ enum JobsMsg {
+ Jobs(Vec<Job>),
+ Heartbeat,
+ }
+
+ // Update jobs page list.
+ async fn jobs_handle_socket(config: Config, repo_id: uuid::Uuid, mut socket: WebSocket) {
+ use crate::db::jobs::dsl as jobs;
+ let mut latest = {
+ let mut latest = config.jobs_latest.lock().await;
+ match latest.entry(repo_id) {
+ Entry::Vacant(e) => {
+ let last = jobs::jobs
+ .filter(jobs::repo.eq(repo_id))
+ .select(jobs::id)
+ .order_by(jobs::started.desc())
+ .first::<uuid::Uuid>(&mut config.db.get().await.unwrap())
+ .await
+ .unwrap();
+
+ let (sender, receiver) = tokio::sync::watch::channel(last);
+ e.insert(sender);
+ receiver
+ }
+ Entry::Occupied(e) => e.get().subscribe(),
+ }
+ };
+
+ let mut interval = tokio::time::interval(std::time::Duration::from_secs(30));
+ loop {
+ debug!("waiting job");
+ tokio::select! {
+ _ = interval.tick() => {
+ socket.send(serde_json::to_string(&JobsMsg::Heartbeat).unwrap().into()).await.unwrap_or(());
+ }
+ x = latest.changed() => {
+ debug!("status {:?}", x);
+ let mut db = config.db.get().await.unwrap();
+ let latest = latest.borrow_and_update().clone();
+ let jobs = jobs::jobs
+ .filter(jobs::repo.eq(repo_id))
+ .select(Job::as_select())
+ .order_by(jobs::started.desc())
+ .get_results::<Job>(&mut db)
+ .await.unwrap();
+ socket.send(serde_json::to_string(&JobsMsg::Jobs(jobs)).unwrap().into()).await.unwrap_or(());
+ break
+ }
+ }
edit in api/src/identicon.rs at line 1
[2.472889]→[2.472890:472914](∅→∅) − use crate::proxy::HSTS;
edit in api/src/identicon.rs at line 6
[2.473071]→[2.473071:473093](∅→∅) edit in api/src/identicon.rs at line 7
edit in api/src/identicon.rs at line 16
+ pub const HSTS: &str = "max-age=31536000; includeSubDomains";
replacement in api/src/identicon.rs at line 255
[2.482057]→[2.482057:482319](∅→∅) − // colored signatures
− let h = rng.gen::<f64>();
− let color = Hsv::new(RgbHue::from(h * 360f64), 0.8, 1.);
− let rgb = Rgb::from(color);
− write!(s, "\" stroke=\"rgb({},{},{})\" stroke-width=\"2\" fill=\"transparent\"/></svg>",
+ // colored signatures
+ let h = rng.gen::<f64>();
+ let color = Hsv::new(RgbHue::from(h * 360f64), 0.8, 1.);
+ let rgb = Rgb::from(color);
+ write!(s, "\" stroke=\"rgb({},{},{})\" stroke-width=\"2\" fill=\"transparent\"/></svg>",
replacement in api/src/discussions/mod.rs at line 23
[2.488440]→[10.42350:42372](∅→∅),
[10.42372]→[2.488440:488480](∅→∅),
[2.488440]→[2.488440:488480](∅→∅) − use libpijul::Base32;
− use libpijul::changestore::ChangeStore;
+ use pijul_core::Base32;
+ use pijul_core::changestore::ChangeStore;
replacement in api/src/discussions/mod.rs at line 62
[2.489561]→[2.489561:489579](∅→∅) replacement in api/src/discussions/mod.rs at line 282
[2.495722]→[2.495722:495774](∅→∅) − let (id, _) = crate::repository::repository_id(
+ let (id, _, _) = crate::repository::repository_id(
replacement in api/src/discussions/mod.rs at line 393
[2.499754]→[2.499754:499774](∅→∅) replacement in api/src/discussions/mod.rs at line 520
[2.503599]→[2.503599:503756](∅→∅) − .get_header(&libpijul::Hash::from_base32(hash.as_bytes()).unwrap())?;
− let hash_ = libpijul::Hash::from_base32(hash.as_bytes()).unwrap();
+ .get_header(&pijul_core::Hash::from_base32(hash.as_bytes()).unwrap())?;
+ let hash_ = pijul_core::Hash::from_base32(hash.as_bytes()).unwrap();
replacement in api/src/discussions/mod.rs at line 653
[2.506962]→[2.506962:507006](∅→∅) − header: libpijul::change::ChangeHeader,
+ header: pijul_core::change::ChangeHeader,
replacement in api/src/discussions/mod.rs at line 741
[2.509566]→[2.509566:509648](∅→∅) − let hash = libpijul::Hash::from_base32(hash.as_bytes()).unwrap();
+ let hash = pijul_core::Hash::from_base32(hash.as_bytes()).unwrap();
replacement in api/src/discussions/mod.rs at line 778
[2.510903]→[2.510903:510929](∅→∅) + hash: pijul_core::Hash,
replacement in api/src/discussions/mod.rs at line 792
[2.511508]→[2.511508:511580](∅→∅) − let o = libpijul::Hash::from_base32(o.as_bytes()).unwrap();
+ let o = pijul_core::Hash::from_base32(o.as_bytes()).unwrap();
replacement in api/src/discussions/mod.rs at line 806
[2.511855]→[2.511855:511881](∅→∅) + hash: pijul_core::Hash,
replacement in api/src/discussions/mod.rs at line 819
[2.512400]→[2.512400:512476](∅→∅) − let o = libpijul::Hash::from_base32(o.as_bytes()).unwrap();
+ let o = pijul_core::Hash::from_base32(o.as_bytes()).unwrap();
replacement in api/src/discussions/mod.rs at line 999
[2.519091]→[2.519091:519143](∅→∅) − let mut m = libpijul::pristine::Merkle::zero();
+ let mut m = pijul_core::pristine::Merkle::zero();
replacement in api/src/discussions/mod.rs at line 1001
[2.519174]→[2.519174:519210](∅→∅) − use libpijul::pristine::Base32;
+ use pijul_core::pristine::Base32;
replacement in api/src/discussions/mod.rs at line 1013
[2.519538]→[2.519538:519617](∅→∅) − let hh = libpijul::pristine::Hash::from_base32(h.as_bytes()).unwrap();
+ let hh = pijul_core::pristine::Hash::from_base32(h.as_bytes()).unwrap();
replacement in api/src/discussions/mod.rs at line 1029
[2.519953]→[2.519953:520018](∅→∅) − ) -> Result<(usize, libpijul::pristine::Merkle), crate::Error> {
+ ) -> Result<(usize, pijul_core::pristine::Merkle), crate::Error> {
replacement in api/src/discussions/mod.rs at line 1059
[2.521286]→[2.521286:521374](∅→∅) − let mut m = libpijul::pristine::Merkle::zero();
− use libpijul::pristine::Base32;
+ let mut m = pijul_core::pristine::Merkle::zero();
+ use pijul_core::pristine::Base32;
replacement in api/src/discussions/mod.rs at line 1062
[2.521392]→[2.521392:521471](∅→∅) − let hh = libpijul::pristine::Hash::from_base32(h.as_bytes()).unwrap();
+ let hh = pijul_core::pristine::Hash::from_base32(h.as_bytes()).unwrap();
edit in api/src/db.rs at line 8
+ ci_contracts (id) {
+ id -> Uuid,
+ repository -> Nullable<Uuid>,
+ user_id -> Nullable<Uuid>,
+ start_date -> Nullable<Timestamptz>,
+ end_date -> Nullable<Timestamptz>,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
+ ci_jobs (id) {
+ id -> Uuid,
+ submitted -> Nullable<Timestamptz>,
+ repository -> Nullable<Uuid>,
+ channel -> Nullable<Text>,
+ state -> Nullable<Text>,
+ extra_patches -> Nullable<Array<Nullable<Text>>>,
+ worker -> Nullable<Int8>,
+ completed -> Nullable<Timestamptz>,
+ path -> Nullable<Text>,
+ status -> Nullable<Int4>,
+ apply_if_success -> Nullable<Bool>,
+ report_to -> Nullable<Uuid>,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
edit in api/src/db.rs at line 174
+ repo_state -> Nullable<Text>,
+ channel -> Text,
+ script -> Nullable<Text>,
replacement in api/src/db.rs at line 185
[2.524437]→[2.524437:524487](∅→∅) − old_logins (login) {
− login -> Citext,
+ mfa_challenges (id) {
+ id -> Uuid,
+ time -> Nullable<Timestamptz>,
replacement in api/src/db.rs at line 189
[2.524522]→[2.524522:524564](∅→∅) − retired -> Nullable<Timestamptz>,
+ challenge -> Nullable<Json>,
replacement in api/src/db.rs at line 242
[2.525594]→[2.525594:525616](∅→∅) + bin -> Nullable<Bytea>,
replacement in api/src/db.rs at line 255
[2.525827]→[2.525827:525856](∅→∅) + creation_ip -> Nullable<Inet>,
edit in api/src/db.rs at line 288
+ review_approvals (id) {
+ id -> Uuid,
+ review -> Nullable<Uuid>,
+ date -> Nullable<Timestamptz>,
+ channel -> Nullable<Text>,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
+ review_comments (id) {
+ id -> Uuid,
+ review -> Nullable<Uuid>,
+ date -> Nullable<Timestamptz>,
+ hunk -> Nullable<Int4>,
+ sub -> Nullable<Int4>,
+ l0 -> Nullable<Int4>,
+ l1 -> Nullable<Int4>,
+ contents -> Nullable<Text>,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
+ reviews (id) {
+ id -> Uuid,
+ hash -> Nullable<Text>,
+ repository -> Nullable<Uuid>,
+ author -> Nullable<Uuid>,
+ public -> Nullable<Bool>,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
+ schema_migrations (version) {
+ #[max_length = 255]
+ version -> Varchar,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
edit in api/src/db.rs at line 350
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
+ spam_exceptions (email) {
+ email -> Text,
+ date -> Nullable<Timestamptz>,
edit in api/src/db.rs at line 369
+ stripe_invoice (invoice_id) {
+ invoice_id -> Text,
+ time -> Nullable<Timestamptz>,
+ user_id -> Nullable<Uuid>,
+ hosted -> Nullable<Text>,
+ pdf -> Nullable<Text>,
+ amount -> Nullable<Int4>,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
+ stripe_log (time) {
+ time -> Timestamp,
+ userid -> Nullable<Uuid>,
+ op -> Nullable<Text>,
+ val -> Nullable<Int4>,
+ }
+ }
+
+ diesel::table! {
+ use diesel::sql_types::*;
+ use diesel::pg::sql_types::*;
+ use crate::{Keyalgorithm};
+
edit in api/src/db.rs at line 440
+ diesel::joinable!(ci_contracts -> repositories (repository));
+ diesel::joinable!(ci_jobs -> users (report_to));
edit in api/src/db.rs at line 458
+ diesel::joinable!(mfa_challenges -> users (user_id));
edit in api/src/db.rs at line 466
+ diesel::joinable!(review_approvals -> reviews (review));
+ diesel::joinable!(review_comments -> reviews (review));
+ diesel::joinable!(reviews -> repositories (repository));
+ diesel::joinable!(reviews -> users (author));
edit in api/src/db.rs at line 471
+ diesel::joinable!(stripe_invoice -> users (user_id));
+ diesel::joinable!(stripe_log -> users (userid));
edit in api/src/db.rs at line 477
+ ci_contracts,
+ ci_jobs,
replacement in api/src/db.rs at line 488
[10.42719]→[2.529594:529610](∅→∅),
[2.529594]→[2.529594:529610](∅→∅) edit in api/src/db.rs at line 495
+ review_approvals,
+ review_comments,
+ reviews,
+ schema_migrations,
edit in api/src/db.rs at line 500
+ spam_exceptions,
+ stripe_invoice,
+ stripe_log,
edit in api/src/config_file.rs at line 14
replacement in api/src/config.rs at line 50
[2.534471]→[2.534471:534590](∅→∅) − (uuid::Uuid, libpijul::ChangeId),
− Arc<std::sync::Mutex<libpijul::change::ChangeFile>>,
+ (uuid::Uuid, pijul_core::ChangeId),
+ Arc<std::sync::Mutex<pijul_core::change::ChangeFile>>,
replacement in api/src/config.rs at line 58
[2.534707]→[2.534707:534822](∅→∅) − (uuid::Uuid, libpijul::Hash),
− Arc<std::sync::Mutex<libpijul::change::ChangeFile>>,
+ (uuid::Uuid, pijul_core::Hash),
+ Arc<std::sync::Mutex<pijul_core::change::ChangeFile>>,
edit in api/src/config.rs at line 79
+ pub jobs_latest:
+ Arc<tokio::sync::Mutex<HashMap<uuid::Uuid, tokio::sync::watch::Sender<uuid::Uuid>>>>,
replacement in api/src/config.rs at line 105
[2.535485]→[2.535485:535513](∅→∅) − Change(libpijul::Hash),
+ Change(pijul_core::Hash),
edit in api/src/config.rs at line 291
+ jobs_latest: Arc::new(tokio::sync::Mutex::new(HashMap::new())),
replacement in api/src/channel.rs at line 47
[2.545914]→[3.12794:12814](∅→∅) replacement in api/src/channel.rs at line 91
[2.547208]→[2.547208:547228](∅→∅) replacement in api/src/channel.rs at line 131
[2.548383]→[2.548383:548403](∅→∅) replacement in api/src/change/mod.rs at line 17
[2.549325]→[2.549325:549361](∅→∅) − use libpijul;
− use libpijul::Base32;
+ use pijul_core;
+ use pijul_core::Base32;
replacement in api/src/change/mod.rs at line 36
[2.549799]→[2.549799:549838](∅→∅) − author: &libpijul::change::Author,
+ author: &pijul_core::change::Author,
replacement in api/src/change/mod.rs at line 85
[2.551318]→[2.551318:551360](∅→∅) − authors: &[libpijul::change::Author],
+ authors: &[pijul_core::change::Author],
replacement in api/src/change/mod.rs at line 105
[2.551854]→[2.551854:551900](∅→∅) − authors: &mut [libpijul::change::Author],
+ authors: &mut [pijul_core::change::Author],
replacement in api/src/change/mod.rs at line 153
[2.553159]→[11.2483:2518](∅→∅) − // token.verify(&form.token)?;
+ token.verify(&form.token)?;
replacement in api/src/change/mod.rs at line 156
[2.553288]→[7.1353:1371](∅→∅) replacement in api/src/change/mod.rs at line 168
[9.85]→[2.553672:553763](∅→∅),
[2.553672]→[2.553672:553763](∅→∅) − hash: if let Some(h) = libpijul::Hash::from_base32(form.hash.as_bytes()) {
+ hash: if let Some(h) = pijul_core::Hash::from_base32(form.hash.as_bytes()) {
replacement in api/src/change/list.rs at line 11
[2.554409]→[2.554409:554425](∅→∅) replacement in api/src/change/list.rs at line 45
[2.555103]→[2.555103:555138](∅→∅) − hash_: Option<libpijul::Hash>,
+ hash_: Option<pijul_core::Hash>,
replacement in api/src/change/list.rs at line 47
[2.555157]→[2.555157:555169](∅→∅),
[2.555169]→[7.1626:1726](∅→∅) − header:
− Option<tokio::task::JoinHandle<libpijul::change::ChangeHeader_<libpijul::change::Author>>>,
+ header: Option<
+ tokio::task::JoinHandle<pijul_core::change::ChangeHeader_<pijul_core::change::Author>>,
+ >,
replacement in api/src/change/list.rs at line 74
[2.555877]→[2.555877:555895](∅→∅) replacement in api/src/change/list.rs at line 81
[2.556105]→[2.556105:556159](∅→∅) − .unwrap_or_else(|| libpijul::DEFAULT_CHANNEL)
+ .unwrap_or_else(|| pijul_core::DEFAULT_CHANNEL)
replacement in api/src/change/list.rs at line 158
[2.558330]→[2.558330:558405](∅→∅) − } else if channel.is_empty() || channel == libpijul::DEFAULT_CHANNEL {
+ } else if channel.is_empty() || channel == pijul_core::DEFAULT_CHANNEL {
replacement in api/src/change/list.rs at line 170
[2.558793]→[2.558793:558875](∅→∅) − let h: libpijul::Hash = txn.get_external(&p.change)?.unwrap().into();
+ let h: pijul_core::Hash = txn.get_external(&p.change)?.unwrap().into();
replacement in api/src/change/list.rs at line 182
[2.559225]→[2.559225:559317](∅→∅) − libpijul::fs::iter_graph_descendants(&txn, txn.graph(&*channel.read()), p)?
+ pijul_core::fs::iter_graph_descendants(&txn, txn.graph(&*channel.read()), p)?
replacement in api/src/change/list.rs at line 279
[2.561623]→[2.561623:561723](∅→∅) − &libpijul::pristine::SerializedHash,
− &libpijul::pristine::SerializedMerkle,
+ &pijul_core::pristine::SerializedHash,
+ &pijul_core::pristine::SerializedMerkle,
replacement in api/src/change/list.rs at line 290
[2.561985]→[2.561985:562071](∅→∅) − let h: libpijul::Hash = h.into();
− let m: libpijul::Merkle = m.into();
+ let h: pijul_core::Hash = h.into();
+ let m: pijul_core::Merkle = m.into();
edit in api/src/change/get.rs at line 1
[2.563293]→[2.563294:563324](∅→∅) − use crate::permissions::Perm;
edit in api/src/change/get.rs at line 2
+ use crate::permissions::Perm;
replacement in api/src/change/get.rs at line 4
[2.563355]→[2.563355:563374](∅→∅) edit in api/src/change/get.rs at line 7
[2.563442]→[2.563442:563452](∅→∅) replacement in api/src/change/get.rs at line 10
[2.563534]→[2.563534:563621](∅→∅) − use libpijul::Hash;
− use libpijul::{changestore::ChangeStore, Base32, EdgeFlags, TxnT};
+ use pijul_core::Hash;
+ use pijul_core::{Base32, EdgeFlags, TxnT, changestore::ChangeStore};
replacement in api/src/change/get.rs at line 17
[2.563717]→[2.563717:563775](∅→∅) − pub rec: &'a libpijul::change::Hunk<Option<Hash>, L>,
+ pub rec: &'a pijul_core::change::Hunk<Option<Hash>, L>,
replacement in api/src/change/get.rs at line 19
[2.563821]→[2.563821:563855](∅→∅) − pub hash: &'a libpijul::Hash,
+ pub hash: &'a pijul_core::Hash,
replacement in api/src/change/get.rs at line 39
[2.564386]→[2.564386:564404](∅→∅) replacement in api/src/change/get.rs at line 53
[2.564828]→[2.564828:564896](∅→∅) − libpijul::Hash::from_base32(tree.hash.as_bytes()).unwrap(),
+ pijul_core::Hash::from_base32(tree.hash.as_bytes()).unwrap(),
replacement in api/src/change/get.rs at line 68
[2.565202]→[2.565202:565228](∅→∅) + hash: pijul_core::Hash,
replacement in api/src/change/get.rs at line 71
[2.565290]→[2.565290:565334](∅→∅) − use libpijul::changestore::ChangeStore;
+ use pijul_core::changestore::ChangeStore;
replacement in api/src/change/get.rs at line 81
[2.565670]→[2.565670:565714](∅→∅) − hashes.insert(libpijul::Hash::None, 1);
+ hashes.insert(pijul_core::Hash::None, 1);
replacement in api/src/change/get.rs at line 131
[2.567052]→[2.567052:567101](∅→∅) − metadata: libpijul::pristine::InodeMetadata,
+ metadata: pijul_core::pristine::InodeMetadata,
replacement in api/src/change/get.rs at line 134
[2.567104]→[2.567104:567244](∅→∅) − impl<'a> From<libpijul::changestore::FileMetadata<'a>> for Metadata {
− fn from(f: libpijul::changestore::FileMetadata<'a>) -> Metadata {
+ impl<'a> From<pijul_core::changestore::FileMetadata<'a>> for Metadata {
+ fn from(f: pijul_core::changestore::FileMetadata<'a>) -> Metadata {
replacement in api/src/change/get.rs at line 149
[2.567454]→[2.567454:567556](∅→∅) − type EdgeMap = libpijul::change::EdgeMap<usize>;
− type NewVertex = libpijul::change::NewVertex<usize>;
+ type EdgeMap = pijul_core::change::EdgeMap<usize>;
+ type NewVertex = pijul_core::change::NewVertex<usize>;
replacement in api/src/change/get.rs at line 159
[2.567672]→[2.567672:567729](∅→∅) − pub type Position = libpijul::pristine::Position<usize>;
+ pub type Position = pijul_core::pristine::Position<usize>;
replacement in api/src/change/get.rs at line 164
[2.567794]→[2.567794:567841](∅→∅) − pub type Atom = libpijul::change::Atom<usize>;
+ pub type Atom = pijul_core::change::Atom<usize>;
replacement in api/src/change/get.rs at line 249
[2.569585]→[2.569585:569632](∅→∅) − impl<'a> Record<'a, libpijul::change::Local> {
+ impl<'a> Record<'a, pijul_core::change::Local> {
replacement in api/src/change/get.rs at line 252
[2.569717]→[2.569717:569831](∅→∅) − libpijul::change::Hunk::FileAdd {
− add_name: libpijul::change::Atom::NewVertex(ref n),
+ pijul_core::change::Hunk::FileAdd {
+ add_name: pijul_core::change::Atom::NewVertex(ref n),
replacement in api/src/change/get.rs at line 257
[2.569937]→[2.569937:570119](∅→∅) − libpijul::change::Hunk::FileAdd { .. } => unreachable!(),
− libpijul::change::Hunk::FileMove {
− add: libpijul::change::Atom::NewVertex(ref add),
+ pijul_core::change::Hunk::FileAdd { .. } => unreachable!(),
+ pijul_core::change::Hunk::FileMove {
+ add: pijul_core::change::Atom::NewVertex(ref add),
replacement in api/src/change/get.rs at line 263
[2.570215]→[2.570215:570357](∅→∅) − libpijul::change::Hunk::FileMove { .. } => unreachable!(),
− libpijul::change::Hunk::FileDel { del, contents, .. } => {
+ pijul_core::change::Hunk::FileMove { .. } => unreachable!(),
+ pijul_core::change::Hunk::FileDel { del, contents, .. } => {
replacement in api/src/change/get.rs at line 267
[2.570428]→[2.570428:570476](∅→∅) − libpijul::change::Hunk::FileUndel {
+ pijul_core::change::Hunk::FileUndel {
replacement in api/src/change/get.rs at line 270
[2.570575]→[2.570575:570647](∅→∅) − libpijul::change::Hunk::SolveNameConflict { name, .. } => {
+ pijul_core::change::Hunk::SolveNameConflict { name, .. } => {
replacement in api/src/change/get.rs at line 273
[2.570720]→[2.570720:570794](∅→∅) − libpijul::change::Hunk::UnsolveNameConflict { name, .. } => {
+ pijul_core::change::Hunk::UnsolveNameConflict { name, .. } => {
replacement in api/src/change/get.rs at line 276
[2.570869]→[2.570869:570937](∅→∅) − libpijul::change::Hunk::Edit { change, local, .. } => {
+ pijul_core::change::Hunk::Edit { change, local, .. } => {
replacement in api/src/change/get.rs at line 279
[2.571004]→[2.571004:571204](∅→∅) − libpijul::change::Hunk::Replacement {
− change: libpijul::change::Atom::EdgeMap(ref change),
− replacement: libpijul::change::Atom::NewVertex(ref replacement),
+ pijul_core::change::Hunk::Replacement {
+ change: pijul_core::change::Atom::EdgeMap(ref change),
+ replacement: pijul_core::change::Atom::NewVertex(ref replacement),
replacement in api/src/change/get.rs at line 285
[2.571321]→[2.571321:571473](∅→∅) − libpijul::change::Hunk::Replacement { .. } => unreachable!(),
− libpijul::change::Hunk::SolveOrderConflict { change, local } => {
+ pijul_core::change::Hunk::Replacement { .. } => unreachable!(),
+ pijul_core::change::Hunk::SolveOrderConflict { change, local } => {
replacement in api/src/change/get.rs at line 289
[2.571556]→[2.571556:571636](∅→∅) − libpijul::change::Hunk::UnsolveOrderConflict { change, local } => {
+ pijul_core::change::Hunk::UnsolveOrderConflict { change, local } => {
replacement in api/src/change/get.rs at line 292
[2.571721]→[2.571721:571801](∅→∅) − libpijul::change::Hunk::ResurrectZombies { change, local, .. } => {
+ pijul_core::change::Hunk::ResurrectZombies { change, local, .. } => {
replacement in api/src/change/get.rs at line 295
[2.571881]→[2.571881:571946](∅→∅) − libpijul::change::Hunk::AddRoot { inode, name } => {
+ pijul_core::change::Hunk::AddRoot { inode, name } => {
replacement in api/src/change/get.rs at line 298
[2.572015]→[2.572015:572080](∅→∅) − libpijul::change::Hunk::DelRoot { inode, name } => {
+ pijul_core::change::Hunk::DelRoot { inode, name } => {
replacement in api/src/change/get.rs at line 306
[2.572196]→[2.572196:572292](∅→∅) − fn inode<T: TxnT>(&mut self, txn: &T, id: &libpijul::change::Atom<Option<Hash>>) -> Inode {
+ fn inode<T: TxnT>(&mut self, txn: &T, id: &pijul_core::change::Atom<Option<Hash>>) -> Inode {
replacement in api/src/change/get.rs at line 313
[2.572421]→[2.572421:572475](∅→∅) − id: &libpijul::change::EdgeMap<Option<Hash>>,
+ id: &pijul_core::change::EdgeMap<Option<Hash>>,
replacement in api/src/change/get.rs at line 329
[2.572824]→[2.572824:572968](∅→∅) − pos: &libpijul::pristine::Position<Option<Hash>>,
− ) -> libpijul::pristine::Position<usize> {
− libpijul::pristine::Position {
+ pos: &pijul_core::pristine::Position<Option<Hash>>,
+ ) -> pijul_core::pristine::Position<usize> {
+ pijul_core::pristine::Position {
replacement in api/src/change/get.rs at line 337
[2.573055]→[2.573055:573178](∅→∅) − fn map_vertex(&mut self, pos: &libpijul::Vertex<Option<Hash>>) -> libpijul::Vertex<usize> {
− libpijul::Vertex {
+ fn map_vertex(&mut self, pos: &pijul_core::Vertex<Option<Hash>>) -> pijul_core::Vertex<usize> {
+ pijul_core::Vertex {
replacement in api/src/change/get.rs at line 347
[2.573327]→[2.573327:573457](∅→∅) − atom: &libpijul::change::Atom<Option<Hash>>,
− ) -> libpijul::change::Atom<usize> {
− use libpijul::change::Atom;
+ atom: &pijul_core::change::Atom<Option<Hash>>,
+ ) -> pijul_core::change::Atom<usize> {
+ use pijul_core::change::Atom;
replacement in api/src/change/get.rs at line 358
[2.573667]→[2.573667:573800](∅→∅) − e: &libpijul::change::EdgeMap<Option<Hash>>,
− ) -> libpijul::change::EdgeMap<usize> {
− libpijul::change::EdgeMap {
+ e: &pijul_core::change::EdgeMap<Option<Hash>>,
+ ) -> pijul_core::change::EdgeMap<usize> {
+ pijul_core::change::EdgeMap {
replacement in api/src/change/get.rs at line 364
[2.573868]→[2.573868:573921](∅→∅) − .map(|e| libpijul::change::NewEdge {
+ .map(|e| pijul_core::change::NewEdge {
replacement in api/src/change/get.rs at line 378
[2.574303]→[2.574303:574442](∅→∅) − v: &libpijul::change::NewVertex<Option<Hash>>,
− ) -> libpijul::change::NewVertex<usize> {
− libpijul::change::NewVertex {
+ v: &pijul_core::change::NewVertex<Option<Hash>>,
+ ) -> pijul_core::change::NewVertex<usize> {
+ pijul_core::change::NewVertex {
replacement in api/src/change/get.rs at line 393
[2.574800]→[2.574800:574844](∅→∅) − header: libpijul::change::ChangeHeader,
+ header: pijul_core::change::ChangeHeader,
replacement in api/src/change/get.rs at line 411
[2.575143]→[2.575143:575190](∅→∅) − impl<'a> Record<'a, libpijul::change::Local> {
+ impl<'a> Record<'a, pijul_core::change::Local> {
replacement in api/src/change/get.rs at line 415
[2.575255]→[2.575255:575305](∅→∅) − v: &libpijul::change::Atom<Option<Hash>>,
+ v: &pijul_core::change::Atom<Option<Hash>>,
replacement in api/src/change/get.rs at line 420
[2.575394]→[2.575394:575452](∅→∅) − libpijul::change::Atom::NewVertex(ref n) => {
+ pijul_core::change::Atom::NewVertex(ref n) => {
replacement in api/src/change/get.rs at line 423
[2.575532]→[2.575532:575588](∅→∅) − libpijul::change::Atom::EdgeMap(ref e) => {
+ pijul_core::change::Atom::EdgeMap(ref e) => {
replacement in api/src/change/get.rs at line 432
[2.575762]→[2.575762:575806](∅→∅) − v: &libpijul::change::NewVertex<H>,
+ v: &pijul_core::change::NewVertex<H>,
replacement in api/src/change/get.rs at line 441
[2.576081]→[2.576081:576126](∅→∅) − libpijul::pristine::Vertex {
+ pijul_core::pristine::Vertex {
replacement in api/src/change/get.rs at line 461
[2.576602]→[2.576602:576662](∅→∅) − contents: &libpijul::change::EdgeMap<Option<Hash>>,
+ contents: &pijul_core::change::EdgeMap<Option<Hash>>,
replacement in api/src/change/get.rs at line 494
[2.577600]→[2.577600:577760](∅→∅) − n: &libpijul::change::NewVertex<Option<libpijul::pristine::Hash>>,
− contents: &Option<libpijul::change::Atom<Option<libpijul::pristine::Hash>>>,
+ n: &pijul_core::change::NewVertex<Option<pijul_core::pristine::Hash>>,
+ contents: &Option<pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>>,
replacement in api/src/change/get.rs at line 503
[2.577974]→[2.577974:578019](∅→∅) − libpijul::pristine::Vertex {
+ pijul_core::pristine::Vertex {
replacement in api/src/change/get.rs at line 511
[2.578215]→[2.578215:578300](∅→∅) − let meta: Metadata = libpijul::changestore::FileMetadata::read(&buf).into();
+ let meta: Metadata = pijul_core::changestore::FileMetadata::read(&buf).into();
replacement in api/src/change/get.rs at line 541
[2.579026]→[2.579026:579181](∅→∅) − add: &'a libpijul::change::NewVertex<Option<libpijul::pristine::Hash>>,
− del: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
+ add: &'a pijul_core::change::NewVertex<Option<pijul_core::pristine::Hash>>,
+ del: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
replacement in api/src/change/get.rs at line 549
[2.579406]→[2.579406:579451](∅→∅) − libpijul::pristine::Vertex {
+ pijul_core::pristine::Vertex {
replacement in api/src/change/get.rs at line 557
[2.579651]→[2.579651:579824](∅→∅) − let meta: Metadata = libpijul::changestore::FileMetadata::read(&buf).into();
− let (old, show_perms) = if let libpijul::change::Atom::EdgeMap(ref del) = del {
+ let meta: Metadata = pijul_core::changestore::FileMetadata::read(&buf).into();
+ let (old, show_perms) = if let pijul_core::change::Atom::EdgeMap(ref del) = del {
replacement in api/src/change/get.rs at line 576
[2.580272]→[2.580272:580435](∅→∅) − del: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− contents: &'a Option<libpijul::change::Atom<Option<libpijul::pristine::Hash>>>,
+ del: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ contents: &'a Option<pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>>,
replacement in api/src/change/get.rs at line 579
[2.580451]→[2.580451:580540](∅→∅) − let (deleted_names, _) = if let libpijul::change::Atom::EdgeMap(ref del) = del {
+ let (deleted_names, _) = if let pijul_core::change::Atom::EdgeMap(ref del) = del {
replacement in api/src/change/get.rs at line 587
[2.580737]→[2.580737:580836](∅→∅) − content_edges: if let Some(libpijul::change::Atom::EdgeMap(ref contents)) = contents {
+ content_edges: if let Some(pijul_core::change::Atom::EdgeMap(ref contents)) = contents {
replacement in api/src/change/get.rs at line 592
[2.580939]→[2.580939:581032](∅→∅) − content: if let Some(libpijul::change::Atom::EdgeMap(ref contents)) = contents {
+ content: if let Some(pijul_core::change::Atom::EdgeMap(ref contents)) = contents {
replacement in api/src/change/get.rs at line 612
[2.581484]→[2.581484:581649](∅→∅) − undel: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− contents: &'a Option<libpijul::change::Atom<Option<libpijul::pristine::Hash>>>,
+ undel: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ contents: &'a Option<pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>>,
replacement in api/src/change/get.rs at line 615
[2.581665]→[2.581665:581756](∅→∅) − let (undel_names, _) = if let libpijul::change::Atom::EdgeMap(ref undel) = undel {
+ let (undel_names, _) = if let pijul_core::change::Atom::EdgeMap(ref undel) = undel {
replacement in api/src/change/get.rs at line 624
[2.581960]→[2.581960:582059](∅→∅) − content_edges: if let Some(libpijul::change::Atom::EdgeMap(ref contents)) = contents {
+ content_edges: if let Some(pijul_core::change::Atom::EdgeMap(ref contents)) = contents {
replacement in api/src/change/get.rs at line 629
[2.582162]→[2.582162:582255](∅→∅) − content: if let Some(libpijul::change::Atom::EdgeMap(ref contents)) = contents {
+ content: if let Some(pijul_core::change::Atom::EdgeMap(ref contents)) = contents {
replacement in api/src/change/get.rs at line 649
[2.582716]→[2.582716:582792](∅→∅) − name: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
+ name: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
replacement in api/src/change/get.rs at line 651
[2.582808]→[2.582808:582889](∅→∅) − let (old, _) = if let libpijul::change::Atom::EdgeMap(ref name) = name {
+ let (old, _) = if let pijul_core::change::Atom::EdgeMap(ref name) = name {
replacement in api/src/change/get.rs at line 665
[2.583191]→[2.583191:583267](∅→∅) − name: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
+ name: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
replacement in api/src/change/get.rs at line 667
[2.583283]→[2.583283:583364](∅→∅) − let (old, _) = if let libpijul::change::Atom::EdgeMap(ref name) = name {
+ let (old, _) = if let pijul_core::change::Atom::EdgeMap(ref name) = name {
replacement in api/src/change/get.rs at line 681
[2.583651]→[2.583651:583773](∅→∅) − change: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− local: &'a libpijul::change::Local,
+ change: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ local: &'a pijul_core::change::Local,
replacement in api/src/change/get.rs at line 705
[2.584315]→[2.584315:584528](∅→∅) − change: &'a libpijul::change::EdgeMap<Option<libpijul::pristine::Hash>>,
− replacement: &'a libpijul::change::NewVertex<Option<libpijul::pristine::Hash>>,
− local: &'a libpijul::change::Local,
+ change: &'a pijul_core::change::EdgeMap<Option<pijul_core::pristine::Hash>>,
+ replacement: &'a pijul_core::change::NewVertex<Option<pijul_core::pristine::Hash>>,
+ local: &'a pijul_core::change::Local,
replacement in api/src/change/get.rs at line 741
[2.585433]→[2.585433:585555](∅→∅) − change: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− local: &'a libpijul::change::Local,
+ change: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ local: &'a pijul_core::change::Local,
replacement in api/src/change/get.rs at line 765
[2.586121]→[2.586121:586243](∅→∅) − change: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− local: &'a libpijul::change::Local,
+ change: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ local: &'a pijul_core::change::Local,
replacement in api/src/change/get.rs at line 789
[2.586806]→[2.586806:586928](∅→∅) − change: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− local: &'a libpijul::change::Local,
+ change: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ local: &'a pijul_core::change::Local,
replacement in api/src/change/get.rs at line 813
[2.587477]→[2.587477:587631](∅→∅) − change: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− name: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
+ change: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ name: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
replacement in api/src/change/get.rs at line 826
[2.587876]→[2.587876:588030](∅→∅) − change: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
− name: &'a libpijul::change::Atom<Option<libpijul::pristine::Hash>>,
+ change: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
+ name: &'a pijul_core::change::Atom<Option<pijul_core::pristine::Hash>>,
replacement in api/src/change/get.rs at line 839
[2.588274]→[2.588274:588386](∅→∅) − del: &libpijul::change::EdgeMap<Option<Hash>>,
− perm: Option<libpijul::pristine::InodeMetadata>,
+ del: &pijul_core::change::EdgeMap<Option<Hash>>,
+ perm: Option<pijul_core::pristine::InodeMetadata>,
replacement in api/src/change/get.rs at line 851
[2.588757]→[2.588757:588850](∅→∅) − let meta: Metadata = libpijul::changestore::FileMetadata::read(&buf).into();
+ let meta: Metadata = pijul_core::changestore::FileMetadata::read(&buf).into();
replacement in api/src/change/get.rs at line 867
[2.589195]→[2.589195:589247](∅→∅) − c: &libpijul::pristine::Position<Option<Hash>>,
+ c: &pijul_core::pristine::Position<Option<Hash>>,
replacement in api/src/change/get.rs at line 884
[2.589564]→[2.589564:589624](∅→∅) − context: &[libpijul::pristine::Position<Option<Hash>>],
+ context: &[pijul_core::pristine::Position<Option<Hash>>],
replacement in api/config.toml at line 60
[11.2667]→[11.2667:2686](∅→∅) + filesystem = "logs"
+ url = [ "http://localhost:8003" ]
replacement in api/Cargo.toml at line 13
[3.13419]→[3.13419:13438](∅→∅),
[3.13438]→[10.43858:43916](∅→∅),
[10.43916]→[3.13490:13584](∅→∅),
[3.13490]→[3.13490:13584](∅→∅) − anyhow = "1.0.100"
− axum = { version = "0.8.7", features = ["macros", "ws"] }
− axum-extra = { version = "0.12.2", features = [ "cookie-signed", "cookie", "typed-header" ] }
+ anyhow.workspace = true
+ axum.workspace = true
+ axum-extra = { version = "0.12.6", features = [ "cookie-signed", "cookie", "typed-header" ] }
replacement in api/Cargo.toml at line 17
[3.13606]→[2.602619:602641](∅→∅),
[2.602619]→[2.602619:602641](∅→∅) replacement in api/Cargo.toml at line 21
[2.602755]→[3.13701:13737](∅→∅) − bincode = "1.0"
− bitflags = "2.10.0"
+ bincode.workspace = true
+ bitflags = "2.12.1"
replacement in api/Cargo.toml at line 25
[2.602827]→[3.13738:13755](∅→∅),
[3.13755]→[19.2646:2700](∅→∅),
[19.2700]→[2.602862:602886](∅→∅),
[3.13773]→[2.602862:602886](∅→∅),
[2.602862]→[2.602862:602886](∅→∅),
[2.602886]→[3.13774:13827](∅→∅) − bytes = "1.11.0"
− chrono = { version = "0.4.42", features = ["serde"] }
− ci = { path = "../ci" }
− clap = { version = "4.5.53", features = ["derive"] }
+ bytes = "1.11.1"
+ chrono.workspace = true
+ ci.workspace = true
+ clap = { version = "4.6.1", features = ["derive"] }
replacement in api/Cargo.toml at line 31
[2.602955]→[3.13828:13852](∅→∅) − data-encoding = "2.9.0"
+ data-encoding = "2.11.0"
replacement in api/Cargo.toml at line 33
[3.13872]→[3.13872:14043](∅→∅),
[3.14043]→[2.603170:603257](∅→∅),
[2.603170]→[2.603170:603257](∅→∅) − diesel = { version = "2.3.3", features = [ "postgres_backend", "extras", "network-address" ] }
− diesel-async = { version = "0.7.4", features = [ "postgres", "deadpool" ] }
− diesel-derive-enum = { version = "2.1.0", features = ["postgres"] }
− futures = "0.3.31"
+ diesel.workspace = true
+ diesel-async.workspace = true
+ diesel-derive-enum.workspace = true
+ futures = "0.3.32"
replacement in api/Cargo.toml at line 40
[3.14085]→[3.14085:14100](∅→∅) replacement in api/Cargo.toml at line 43
[2.603375]→[3.14126:14164](∅→∅),
[3.14164]→[10.43917:43936](∅→∅) − hyper = "1.8.1"
− hyper-util = "0.1.18"
− inotify = "0.11.1"
+ hyper = "1.10.1"
+ hyper-util = "0.1.20"
+ inotify = "0.11.2"
replacement in api/Cargo.toml at line 47
[2.603432]→[10.43937:43953](∅→∅) replacement in api/Cargo.toml at line 51
[19.2720]→[10.44015:44059](∅→∅),
[2.603454]→[10.44015:44059](∅→∅) − libc = "0.2.185"
− libpijul = "1.0.0-beta.11"
+ libc = "0.2.186"
+ pijul-core.workspace = true
replacement in api/Cargo.toml at line 56
[3.14209]→[3.14209:14229](∅→∅) replacement in api/Cargo.toml at line 60
[3.14276]→[3.14276:14317](∅→∅) − pulldown-cmark = "0.13.0"
− rand = "0.9.2"
+ pulldown-cmark = "0.13.4"
+ rand = "0.9.4"
replacement in api/Cargo.toml at line 63
[2.603729]→[3.14318:14335](∅→∅) replacement in api/Cargo.toml at line 65
[2.603788]→[3.14336:14356](∅→∅) + reqwest.workspace = true
replacement in api/Cargo.toml at line 69
[3.14400]→[3.14400:14423](∅→∅) replacement in api/Cargo.toml at line 72
[3.14442]→[3.14442:14483](∅→∅) − tempfile = "3.23.0"
− thiserror = "2.0.17"
+ tempfile = "3.27.0"
+ thiserror = "2.0.18"
replacement in api/Cargo.toml at line 76
[3.14600]→[3.14600:14678](∅→∅),
[3.14678]→[2.604249:604273](∅→∅),
[2.604249]→[2.604249:604273](∅→∅),
[2.604273]→[3.14679:14842](∅→∅) − tokio = { version = "1.48.0", features = ["full"] }
− tokio-postgres = "0.7.15"
− tokio-stream = "0.1.17"
− toml = "0.9.8"
− tower-http = { version = "0.6.7", features = [ "trace", "cors", "compression-br", "compression-gzip", "compression-zstd", "compression-deflate" ] }
+ tokio = { version = "1.52.3", features = ["full"] }
+ tokio-postgres = "0.7.17"
+ tokio-stream = "0.1.18"
+ toml = "0.9.12"
+ tower-http = { version = "0.6.11", features = [ "trace", "cors", "compression-br", "compression-gzip", "compression-zstd", "compression-deflate", "fs" ] }
replacement in api/Cargo.toml at line 82
[2.604461]→[2.604461:604480](∅→∅),
[2.604480]→[3.14843:14966](∅→∅) − tracing = "0.1.41"
− tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
− url = "2.5.7"
− uuid = "1.18.1"
− webauthn-rs = "0.5.3"
+ tracing = "0.1.44"
+ tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
+ url = "2.5.8"
+ uuid = "1.23.2"
+ webauthn-rs = "0.5.5"
edit in api/Cargo.toml at line 88
replacement in Cargo.toml at line 2
[2.604677]→[2.604677:604719](∅→∅) − members = ["api", "replication", "hooks"]
+ members = ["api", "replication", "hooks", "ci"]
edit in Cargo.toml at line 4
+
+ [workspace.dependencies]
+ pijul-core = { version = "1.0.0-beta.14", features = ["tarball"] }
+ pijul-remote = { version = "1.0.0-beta.14" }
+ pijul-repository = { version = "1.0.0-beta.13" }
+ pijul-config = { version = "1.0.0-beta.12" }
+ pijul-interaction = { version = "1.0.0-beta.12" }
+
+ ci = { path = "ci" }
+ anyhow = "1.0.102"
+ axum = { version = "0.8.9", features = [ "macros", "ws" ] }
+ bincode = "1.3"
+ chrono = { version = "0.4.44", features = ["serde"] }
+ clap = { version = "4.6.1", features = ["derive"] }
+ env_logger = "0.11.10"
+ futures = "0.3.32"
+ log = "0.4.31"
+ serde = "1.0.228"
+ serde_derive = "1.0.228"
+ serde_json = "1.0.150"
+ thrussh = "0.40"
+ thrussh-keys = "0.23"
+ tokio = { version = "1.52", features = [ "process", "fs" ] }
+ toml = { version = "0.9.12" }
+ uuid = { version = "1.23.2", features = ["serde" ] }
+ tracing = "0.1.44"
+ tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
+ byteorder = "1.5.0"
+ thiserror = "1.0"
+ reqwest = { version = "0.11", features = ["stream", "json"] }
+ sanakirja = "2.0.0-beta"
+ tempfile = "3.27.0"
+ diesel = { version = "2.3.9", features = [ "postgres_backend", "extras", "network-address" ] }
+ diesel-async = { version = "0.7.4", features = [ "postgres", "deadpool" ] }
+ diesel-derive-enum = { version = "2.1.0", features = ["postgres"] }
+ axum-range = "1.0.0"
+ axum-extra = "0.12.6"
replacement in Cargo.lock at line 23
[2.605683]→[2.605683:605701](∅→∅) replacement in Cargo.lock at line 35
[2.605953]→[2.605953:605969](∅→∅) replacement in Cargo.lock at line 48
[2.606234]→[2.606234:606250](∅→∅) + "cpufeatures 0.2.17",
+ ]
+
+ [[package]]
+ name = "aes"
+ version = "0.9.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138"
+ dependencies = [
+ "cipher 0.5.2",
+ "cpubits",
+ "cpufeatures 0.3.0",
replacement in Cargo.lock at line 82
[2.606744]→[3.15065:15086](∅→∅) replacement in Cargo.lock at line 154
[2.608920]→[3.15460:15479](∅→∅) replacement in Cargo.lock at line 156
[2.609004]→[3.15480:15558](∅→∅) − checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
+ checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
replacement in Cargo.lock at line 169
[2.609253]→[3.15559:15578](∅→∅) replacement in Cargo.lock at line 171
[2.609337]→[3.15579:15657](∅→∅) − checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
+ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
replacement in Cargo.lock at line 175
[2.609451]→[3.15658:15676](∅→∅) replacement in Cargo.lock at line 177
[2.609534]→[3.15677:15755](∅→∅) − checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
+ checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
replacement in Cargo.lock at line 204
[2.610179]→[3.16024:16044](∅→∅) replacement in Cargo.lock at line 206
[2.610263]→[3.16045:16123](∅→∅) − checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
+ checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
replacement in Cargo.lock at line 210
[2.610372]→[2.610372:610390](∅→∅) replacement in Cargo.lock at line 212
[2.610455]→[2.610455:610533](∅→∅) − checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
+ checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207"
+ dependencies = [
+ "rustversion",
+ ]
replacement in Cargo.lock at line 253
[2.611493]→[3.16139:16155](∅→∅) replacement in Cargo.lock at line 265
[2.611766]→[3.16156:16172](∅→∅) replacement in Cargo.lock at line 270
[2.611823]→[3.16173:16192](∅→∅) replacement in Cargo.lock at line 272
[2.611907]→[3.16193:16271](∅→∅) − checksum = "0e86f6d3dc9dc4352edeea6b8e499e13e3f5dc3b964d7ca5fd411415a3498473"
+ checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac"
edit in Cargo.lock at line 276
[3.16316]→[2.612024:612041](∅→∅),
[2.612024]→[2.612024:612041](∅→∅) replacement in Cargo.lock at line 288
[2.612347]→[3.16416:16432](∅→∅) + "syn 2.0.117",
+ ]
+
+ [[package]]
+ name = "atomic"
+ version = "0.6.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340"
+ dependencies = [
+ "bytemuck",
replacement in Cargo.lock at line 308
[2.612590]→[3.16433:16451](∅→∅) replacement in Cargo.lock at line 310
[2.612673]→[3.16452:16530](∅→∅) − checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
replacement in Cargo.lock at line 314
[2.612783]→[3.16531:16550](∅→∅) replacement in Cargo.lock at line 316
[2.612867]→[3.16551:16629](∅→∅) − checksum = "6b5ce75405893cd713f9ab8e297d8e438f624dde7d706108285f7e17a25a180f"
+ checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00"
replacement in Cargo.lock at line 324
[2.613034]→[3.16630:16649](∅→∅) replacement in Cargo.lock at line 326
[2.613118]→[3.16650:16728](∅→∅) − checksum = "179c3777a8b5e70e90ea426114ffc565b2c1a9f82f6c4a0c5a34aa6ef5e781b6"
+ checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4"
replacement in Cargo.lock at line 336
[2.613304]→[3.16729:16747](∅→∅) replacement in Cargo.lock at line 338
[2.613387]→[3.16748:16826](∅→∅) − checksum = "5b098575ebe77cb6d14fc7f32749631a6e44edbef6b796f89b020e99ba20d425"
+ checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90"
replacement in Cargo.lock at line 346
[2.614184]→[19.12203:12226](∅→∅) + "http 1.4.1",
+ "http-body 1.0.1",
replacement in Cargo.lock at line 349
[2.614238]→[19.12227:12237](∅→∅) replacement in Cargo.lock at line 362
[10.46107]→[2.614444:614461](∅→∅),
[2.614444]→[2.614444:614461](∅→∅) replacement in Cargo.lock at line 373
[2.614985]→[3.16915:16933](∅→∅) replacement in Cargo.lock at line 375
[2.615068]→[3.16934:17012](∅→∅) − checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22"
+ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
replacement in Cargo.lock at line 379
[3.17030]→[19.12238:12261](∅→∅) + "http 1.4.1",
+ "http-body 1.0.1",
replacement in Cargo.lock at line 384
[2.615290]→[2.615290:615307](∅→∅) replacement in Cargo.lock at line 392
[2.615388]→[3.17046:17065](∅→∅) replacement in Cargo.lock at line 394
[2.615472]→[3.17066:17144](∅→∅) − checksum = "dbfe9f610fe4e99cf0cfcd03ccf8c63c28c616fe714d80475ef731f3b13dd21b"
+ checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96"
+ dependencies = [
+ "axum",
+ "axum-core",
+ "bytes",
+ "futures-util",
+ "headers",
+ "http 1.4.1",
+ "http-body 1.0.1",
+ "http-body-util",
+ "mime",
+ "pin-project-lite",
+ "rustversion",
+ "serde_core",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+ ]
+
+ [[package]]
+ name = "axum-extra"
+ version = "0.12.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "be44683b41ccb9ab2d23a5230015c9c3c55be97a25e4428366de8873103f7970"
replacement in Cargo.lock at line 426
[2.615652]→[19.12262:12285](∅→∅) + "http 1.4.1",
+ "http-body 1.0.1",
replacement in Cargo.lock at line 444
[2.616041]→[19.12286:12295](∅→∅) replacement in Cargo.lock at line 453
[2.616158]→[2.616158:616176](∅→∅) replacement in Cargo.lock at line 455
[2.616241]→[2.616241:616319](∅→∅) − checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c"
+ checksum = "7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca"
replacement in Cargo.lock at line 459
[2.616362]→[3.17351:17367](∅→∅) + "syn 2.0.117",
+ ]
+
+ [[package]]
+ name = "axum-range"
+ version = "1.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "6a30717ba4cd96521a74b1b847660f2823bc47d8da41db49a024552849fe9f5b"
+ dependencies = [
+ "axum",
+ "axum-extra 0.10.3",
+ "bytes",
+ "futures",
+ "http-body 1.0.1",
+ "pin-project",
+ "tokio",
replacement in Cargo.lock at line 485
[2.616625]→[19.12296:12305](∅→∅) replacement in Cargo.lock at line 500
[3.17611]→[19.12306:12339](∅→∅) − "http",
− "http-body",
− "hyper",
+ "http 1.4.1",
+ "http-body 1.0.1",
+ "hyper 1.10.1",
replacement in Cargo.lock at line 506
[2.617059]→[2.617059:617078](∅→∅) + "rustls-pemfile 2.2.0",
replacement in Cargo.lock at line 524
[2.617450]→[19.12340:12349](∅→∅),
[19.12349]→[2.617465:617480](∅→∅),
[3.17674]→[2.617465:617480](∅→∅),
[2.617465]→[2.617465:617480](∅→∅) + "http 1.4.1",
+ "rand 0.8.6",
replacement in Cargo.lock at line 527
[3.17691]→[3.17691:17712](∅→∅) replacement in Cargo.lock at line 564
[2.618680]→[3.17955:17973](∅→∅) replacement in Cargo.lock at line 566
[2.618763]→[3.17974:18052](∅→∅) − checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
+ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
replacement in Cargo.lock at line 570
[2.618881]→[3.18053:18071](∅→∅) replacement in Cargo.lock at line 572
[2.618964]→[3.18072:18150](∅→∅) − checksum = "215ee31f8a88f588c349ce2d20108b2ed96089b96b9c2b03775dc35dd72938e8"
+ checksum = "b08e33815c87d8cadcddb1e74ac307368a3751fbe40c961538afa21a1899f21c"
replacement in Cargo.lock at line 592
[2.619395]→[3.18180:18198](∅→∅) replacement in Cargo.lock at line 594
[2.619478]→[3.18199:18277](∅→∅) − checksum = "560f42649de9fa436b73517378a147ec21f6c997a546581df4b4b31677828934"
+ checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695"
edit in Cargo.lock at line 608
[2.619833]→[3.18278:18498](∅→∅) − dependencies = [
− "serde",
− ]
−
− [[package]]
− name = "bincode"
− version = "2.0.1"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740"
edit in Cargo.lock at line 609
[2.619850]→[3.18499:18518](∅→∅) edit in Cargo.lock at line 610
[2.619860]→[3.18519:18528](∅→∅) edit in Cargo.lock at line 613
[2.619875]→[3.18529:18571](∅→∅),
[3.18571]→[2.619911:619976](∅→∅),
[2.619911]→[2.619911:619976](∅→∅),
[2.619976]→[3.18572:18650](∅→∅),
[3.18650]→[2.620054:620071](∅→∅),
[2.620054]→[2.620054:620071](∅→∅),
[2.620071]→[3.18651:18662](∅→∅),
[3.18662]→[2.620281:620296](∅→∅),
[2.620281]→[2.620281:620296](∅→∅) − name = "bincode_derive"
− version = "2.0.1"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09"
− dependencies = [
− "virtue",
− ]
−
− [[package]]
replacement in Cargo.lock at line 626
[2.620697]→[3.18663:18682](∅→∅) replacement in Cargo.lock at line 628
[2.620780]→[3.18683:18761](∅→∅) − checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
+ checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a"
replacement in Cargo.lock at line 647
[2.621133]→[3.18762:18780](∅→∅) replacement in Cargo.lock at line 649
[2.621216]→[3.18781:18859](∅→∅) − checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0"
+ checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce"
edit in Cargo.lock at line 656
edit in Cargo.lock at line 675
+ ]
+
+ [[package]]
+ name = "block-buffer"
+ version = "0.12.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be"
+ dependencies = [
+ "hybrid-array",
replacement in Cargo.lock at line 714
[2.622562]→[3.18860:18878](∅→∅) replacement in Cargo.lock at line 716
[2.622645]→[3.18879:18957](∅→∅) − checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
+ checksum = "8119e4516436f5708bbc474a9d395bf12f1b5395e93a92a56e647ac3388c8610"
replacement in Cargo.lock at line 725
[2.622845]→[3.18958:18976](∅→∅) replacement in Cargo.lock at line 727
[2.622928]→[3.18977:19055](∅→∅) − checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
+ checksum = "5962523e1b92ce1b5e793d9169b9943eece10d39f62550bc04bb605d75b94924"
edit in Cargo.lock at line 788
+
+ [[package]]
+ name = "bytemuck"
+ version = "1.25.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
replacement in Cargo.lock at line 803
[2.624633]→[3.19292:19311](∅→∅) replacement in Cargo.lock at line 805
[2.624717]→[3.19312:19390](∅→∅) − checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
+ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
replacement in Cargo.lock at line 818
[2.625105]→[3.19530:19551](∅→∅) replacement in Cargo.lock at line 831
[2.625398]→[3.19672:19688](∅→∅) replacement in Cargo.lock at line 857
[2.625845]→[3.19917:19936](∅→∅) replacement in Cargo.lock at line 859
[2.625929]→[3.19937:20015](∅→∅) − checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07"
+ checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
edit in Cargo.lock at line 878
+
+ [[package]]
+ name = "chacha20"
+ version = "0.10.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"
+ dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.0",
+ "rand_core 0.10.1",
+ ]
replacement in Cargo.lock at line 903
[2.626745]→[3.20270:20289](∅→∅) replacement in Cargo.lock at line 905
[2.626829]→[3.20290:20368](∅→∅) − checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
+ checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
replacement in Cargo.lock at line 920
[2.627108]→[4.10640:10658](∅→∅) + "axum",
+ "axum-extra 0.12.6",
+ "axum-range",
+ "bincode",
edit in Cargo.lock at line 926
+ "diesel",
+ "diesel-async",
edit in Cargo.lock at line 930
[2.627167]→[2.627167:627180](∅→∅) edit in Cargo.lock at line 931
+ "pijul-config",
+ "pijul-core",
+ "pijul-interaction",
+ "pijul-remote",
+ "pijul-repository",
+ "reqwest",
+ "sanakirja",
edit in Cargo.lock at line 941
+ "tempfile",
+ "thiserror 1.0.69",
replacement in Cargo.lock at line 946
[2.627269]→[3.20406:20421](∅→∅) + "toml 0.9.12+spec-1.1.0",
replacement in Cargo.lock at line 967
[2.627765]→[2.627765:627793](∅→∅) − "crypto-common",
− "inout",
+ "crypto-common 0.1.6",
+ "inout 0.1.4",
+ ]
+
+ [[package]]
+ name = "cipher"
+ version = "0.5.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c"
+ dependencies = [
+ "block-buffer 0.12.0",
+ "crypto-common 0.2.2",
+ "inout 0.2.2",
replacement in Cargo.lock at line 984
[2.628067]→[3.20422:20441](∅→∅) replacement in Cargo.lock at line 986
[2.628151]→[3.20442:20520](∅→∅) − checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8"
+ checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
replacement in Cargo.lock at line 994
[2.628316]→[3.20521:20540](∅→∅) replacement in Cargo.lock at line 996
[2.628400]→[3.20541:20619](∅→∅) − checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00"
+ checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
replacement in Cargo.lock at line 1006
[2.628580]→[3.20620:20639](∅→∅) replacement in Cargo.lock at line 1008
[2.628664]→[3.20640:20718](∅→∅) − checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
+ checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
replacement in Cargo.lock at line 1013
[2.628800]→[3.20719:20735](∅→∅) replacement in Cargo.lock at line 1018
[2.628848]→[3.20736:20754](∅→∅) replacement in Cargo.lock at line 1020
[2.628931]→[3.20755:20833](∅→∅) − checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
+ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
replacement in Cargo.lock at line 1024
[2.629037]→[3.20834:20853](∅→∅) replacement in Cargo.lock at line 1026
[2.629121]→[3.20854:20932](∅→∅) − checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0"
+ checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
edit in Cargo.lock at line 1032
+ name = "cmov"
+ version = "0.5.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a"
+
+ [[package]]
+ name = "cobs"
+ version = "0.3.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"
+ dependencies = [
+ "thiserror 2.0.18",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 1048
[2.629259]→[3.20933:20951](∅→∅) replacement in Cargo.lock at line 1050
[2.629342]→[3.20952:21030](∅→∅) − checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
+ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
replacement in Cargo.lock at line 1054
[3.21052]→[3.21052:21070](∅→∅) replacement in Cargo.lock at line 1056
[2.629537]→[3.21071:21149](∅→∅) − checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a"
+ checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab"
replacement in Cargo.lock at line 1068
[3.21272]→[3.21272:21291](∅→∅) replacement in Cargo.lock at line 1070
[3.21356]→[3.21356:21434](∅→∅) − checksum = "302266479cb963552d11bd042013a58ef1adc56768016c8b82b4199488f2d4ad"
+ checksum = "ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf"
replacement in Cargo.lock at line 1082
[3.21555]→[3.21555:21574](∅→∅) + version = "0.4.32"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789"
+
+ [[package]]
+ name = "console"
+ version = "0.15.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
+ dependencies = [
+ "encode_unicode",
+ "libc",
+ "once_cell",
+ "unicode-width",
+ "windows-sys 0.59.0",
+ ]
+
+ [[package]]
+ name = "const-oid"
+ version = "0.10.2"
replacement in Cargo.lock at line 1103
[3.21639]→[3.21639:21717](∅→∅) − checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d"
+ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
replacement in Cargo.lock at line 1127
[2.630289]→[2.630289:630307](∅→∅) replacement in Cargo.lock at line 1129
[2.630372]→[2.630372:630450](∅→∅) − checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
+ checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b"
replacement in Cargo.lock at line 1150
[2.630965]→[2.630965:630980](∅→∅) edit in Cargo.lock at line 1162
+ dependencies = [
+ "core-foundation-sys",
+ "libc",
+ ]
+
+ [[package]]
+ name = "core-foundation"
+ version = "0.10.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
edit in Cargo.lock at line 1190
+ name = "cpubits"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae"
+
+ [[package]]
edit in Cargo.lock at line 1205
+ name = "cpufeatures"
+ version = "0.3.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
+ dependencies = [
+ "libc",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 1255
[2.632670]→[3.22232:22250](∅→∅) replacement in Cargo.lock at line 1257
[2.632753]→[3.22251:22329](∅→∅) − checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
+ checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
edit in Cargo.lock at line 1262
+ ]
+
+ [[package]]
+ name = "crypto-common"
+ version = "0.2.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
+ dependencies = [
+ "hybrid-array",
replacement in Cargo.lock at line 1335
[2.634120]→[3.22737:22753](∅→∅) edit in Cargo.lock at line 1357
+ name = "ctr"
+ version = "0.10.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21"
+ dependencies = [
+ "cipher 0.5.2",
+ ]
+
+ [[package]]
+ name = "ctutils"
+ version = "0.4.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e"
+ dependencies = [
+ "cmov",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 1418
[10.46419]→[10.46419:46435](∅→∅) replacement in Cargo.lock at line 1435
[10.46735]→[10.46735:46751](∅→∅) replacement in Cargo.lock at line 1469
[2.635947]→[3.23266:23282](∅→∅) replacement in Cargo.lock at line 1483
[3.23558]→[3.23558:23574](∅→∅) replacement in Cargo.lock at line 1494
[3.23790]→[3.23790:23806](∅→∅) replacement in Cargo.lock at line 1505
[2.636207]→[3.23968:23984](∅→∅) replacement in Cargo.lock at line 1523
[2.636557]→[3.24014:24032](∅→∅) replacement in Cargo.lock at line 1525
[2.636640]→[3.24033:24111](∅→∅) − checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
+ checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
edit in Cargo.lock at line 1534
+ ]
+
+ [[package]]
+ name = "dbus"
+ version = "0.9.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "b942602992bb7acfd1f51c49811c58a610ef9181b6e66f3e519d79b540a3bf73"
+ dependencies = [
+ "libc",
+ "libdbus-sys",
+ "windows-sys 0.61.2",
edit in Cargo.lock at line 1548
+ name = "dbus-secret-service"
+ version = "4.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "708b509edf7889e53d7efb0ffadd994cc6c2345ccb62f55cfd6b0682165e4fa6"
+ dependencies = [
+ "dbus",
+ "zeroize",
+ ]
+
+ [[package]]
edit in Cargo.lock at line 1566
[2.637185]→[2.637185:637445](∅→∅),
[2.637445]→[3.24228:24249](∅→∅) − "tokio",
− ]
−
− [[package]]
− name = "deadpool-postgres"
− version = "0.14.1"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "3d697d376cbfa018c23eb4caab1fd1883dd9c906a8c034e8d9a3cb06a7e0bef9"
− dependencies = [
− "async-trait",
− "deadpool",
− "getrandom 0.2.16",
edit in Cargo.lock at line 1567
[2.637476]→[2.637476:637507](∅→∅) − "tokio-postgres",
− "tracing",
edit in Cargo.lock at line 1574
[2.637709]→[2.637709:637738](∅→∅) − dependencies = [
− "tokio",
− ]
replacement in Cargo.lock at line 1591
[2.638068]→[3.24265:24283](∅→∅) replacement in Cargo.lock at line 1593
[2.638152]→[3.24284:24362](∅→∅) − checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
+ checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
edit in Cargo.lock at line 1599
+ name = "dialoguer"
+ version = "0.10.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87"
+ dependencies = [
+ "console",
+ "fuzzy-matcher",
+ "shell-words",
+ "tempfile",
+ "zeroize",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 1613
[2.638291]→[3.24363:24381](∅→∅) replacement in Cargo.lock at line 1615
[2.638374]→[3.24382:24460](∅→∅) − checksum = "5e7624a3bb9fffd82fff016be9a7f163d20e5a89eb8d28f9daaa6b30fff37500"
+ checksum = "9940fb8467a0a06312218ed384185cb8536aa10d8ec017d0ce7fad2c1bd882d5"
replacement in Cargo.lock at line 1618
[2.638484]→[3.24461:24481](∅→∅) replacement in Cargo.lock at line 1659
[2.639256]→[3.24629:24645](∅→∅) replacement in Cargo.lock at line 1664
[2.639310]→[3.24646:24664](∅→∅) replacement in Cargo.lock at line 1666
[2.639393]→[3.24665:24743](∅→∅) − checksum = "9daac6489a36e42570da165a10c424f3edcefdff70c5fd55e1847c23f3dd7562"
+ checksum = "d1817b7f4279b947fc4cafddec12b0e5f8727141706561ce3ac94a60bddd1cf5"
replacement in Cargo.lock at line 1672
[2.639562]→[3.24744:24760](∅→∅) replacement in Cargo.lock at line 1681
[2.639805]→[3.24859:24875](∅→∅) replacement in Cargo.lock at line 1706
[2.640470]→[2.640470:640488](∅→∅) edit in Cargo.lock at line 1708
+ ]
+
+ [[package]]
+ name = "digest"
+ version = "0.11.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
+ dependencies = [
+ "block-buffer 0.12.0",
+ "const-oid",
+ "crypto-common 0.2.2",
+ "ctutils",
edit in Cargo.lock at line 1732
+ name = "dirs-next"
+ version = "2.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+ dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+ ]
+
+ [[package]]
edit in Cargo.lock at line 1746
+ dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+ ]
+
+ [[package]]
+ name = "dirs-sys-next"
+ version = "0.1.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
replacement in Cargo.lock at line 1765
[2.641494]→[2.641494:641512](∅→∅) replacement in Cargo.lock at line 1767
[2.641577]→[2.641577:641655](∅→∅) − checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
replacement in Cargo.lock at line 1771
[2.641698]→[3.24876:24892](∅→∅) replacement in Cargo.lock at line 1797
[2.641993]→[3.25405:25421](∅→∅) replacement in Cargo.lock at line 1802
[2.642037]→[3.25422:25441](∅→∅) replacement in Cargo.lock at line 1804
[2.642120]→[3.25442:25520](∅→∅) − checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04"
+ checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
edit in Cargo.lock at line 1822
+ name = "duplicate"
+ version = "2.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "8e92f10a49176cbffacaedabfaa11d51db1ea0f80a83c26e1873b43cd1742c24"
+ dependencies = [
+ "heck 0.5.0",
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 1859
[2.643189]→[3.25521:25540](∅→∅) replacement in Cargo.lock at line 1861
[2.643273]→[3.25541:25619](∅→∅) − checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+ checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
edit in Cargo.lock at line 1878
+
+ [[package]]
+ name = "embedded-io"
+ version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
+
+ [[package]]
+ name = "embedded-io"
+ version = "0.6.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
edit in Cargo.lock at line 1892
+ name = "encode_unicode"
+ version = "1.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+ [[package]]
replacement in Cargo.lock at line 1908
[2.643610]→[3.25620:25638](∅→∅) replacement in Cargo.lock at line 1910
[2.643693]→[3.25639:25717](∅→∅) − checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2"
+ checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef"
replacement in Cargo.lock at line 1918
[2.643841]→[3.25718:25737](∅→∅) replacement in Cargo.lock at line 1920
[2.643925]→[3.25738:25816](∅→∅) − checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
+ checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a"
replacement in Cargo.lock at line 1953
[2.644751]→[2.644751:644769](∅→∅) replacement in Cargo.lock at line 1955
[2.644834]→[2.644834:644912](∅→∅) − checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
edit in Cargo.lock at line 1964
+ name = "figment"
+ version = "0.10.19"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3"
+ dependencies = [
+ "atomic",
+ "serde",
+ "toml 0.8.23",
+ "uncased",
+ "version_check",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 1978
[2.644943]→[3.26048:26067](∅→∅) replacement in Cargo.lock at line 1980
[2.645027]→[3.26068:26146](∅→∅) − checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed"
+ checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759"
edit in Cargo.lock at line 1984
[2.645142]→[2.645142:645155](∅→∅),
[2.645155]→[3.26147:26170](∅→∅) − "libredox",
− "windows-sys 0.60.2",
replacement in Cargo.lock at line 1988
[3.26196]→[3.26196:26214](∅→∅) replacement in Cargo.lock at line 1990
[3.26279]→[3.26279:26357](∅→∅) − checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
+ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
replacement in Cargo.lock at line 1994
[2.645209]→[3.26371:26389](∅→∅) replacement in Cargo.lock at line 1996
[2.645293]→[3.26390:26468](∅→∅) − checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
+ checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
replacement in Cargo.lock at line 2040
[3.26776]→[3.26776:26794](∅→∅) replacement in Cargo.lock at line 2042
[3.26859]→[3.26859:26937](∅→∅) − checksum = "62d91fd049c123429b018c47887d3f75a265540dd3c30ba9cb7bae9197edb03a"
+ checksum = "73fde052dbfc920003cfd2c8e2c6e6d4cc7c1091538c3a24226cec0665ab08c0"
replacement in Cargo.lock at line 2082
[2.647169]→[2.647169:647188](∅→∅) replacement in Cargo.lock at line 2084
[2.647253]→[2.647253:647331](∅→∅) − checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
+ checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
replacement in Cargo.lock at line 2097
[2.647512]→[2.647512:647531](∅→∅) replacement in Cargo.lock at line 2099
[2.647596]→[2.647596:647674](∅→∅) − checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
+ checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
replacement in Cargo.lock at line 2107
[2.647762]→[2.647762:647781](∅→∅) replacement in Cargo.lock at line 2109
[2.647846]→[2.647846:647924](∅→∅) − checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
+ checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
replacement in Cargo.lock at line 2113
[2.647963]→[2.647963:647982](∅→∅) replacement in Cargo.lock at line 2115
[2.648047]→[2.648047:648125](∅→∅) − checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
+ checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
replacement in Cargo.lock at line 2124
[2.648228]→[2.648228:648247](∅→∅) replacement in Cargo.lock at line 2126
[2.648312]→[2.648312:648390](∅→∅) − checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
+ checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
replacement in Cargo.lock at line 2130
[2.648426]→[2.648426:648445](∅→∅) replacement in Cargo.lock at line 2132
[2.648510]→[2.648510:648588](∅→∅) − checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
+ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
replacement in Cargo.lock at line 2136
[2.648631]→[3.26992:27008](∅→∅) replacement in Cargo.lock at line 2141
[2.648683]→[2.648683:648702](∅→∅) replacement in Cargo.lock at line 2143
[2.648767]→[2.648767:648845](∅→∅) − checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
+ checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
replacement in Cargo.lock at line 2147
[2.648880]→[2.648880:648899](∅→∅) replacement in Cargo.lock at line 2149
[2.648964]→[2.648964:649042](∅→∅) − checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
+ checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
replacement in Cargo.lock at line 2153
[2.649077]→[2.649077:649096](∅→∅) replacement in Cargo.lock at line 2155
[2.649161]→[2.649161:649239](∅→∅) − checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
+ checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
edit in Cargo.lock at line 2165
[2.649392]→[2.649392:649406](∅→∅) edit in Cargo.lock at line 2169
+ name = "fuzzy-matcher"
+ version = "0.3.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+ dependencies = [
+ "thread_local",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 2179
[2.649453]→[2.649453:649472](∅→∅) replacement in Cargo.lock at line 2181
[2.649537]→[2.649537:649615](∅→∅) − checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+ checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
replacement in Cargo.lock at line 2209
[2.650196]→[3.27108:27127](∅→∅) replacement in Cargo.lock at line 2211
[2.650280]→[3.27128:27206](∅→∅) − checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
+ checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
replacement in Cargo.lock at line 2228
[2.650694]→[3.27345:27355](∅→∅) replacement in Cargo.lock at line 2234
[4.10678]→[4.10678:10696](∅→∅) replacement in Cargo.lock at line 2236
[4.10761]→[4.10761:10839](∅→∅) − checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec"
+ checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
replacement in Cargo.lock at line 2240
[4.10876]→[4.10876:10886](∅→∅) + "r-efi 6.0.0",
+ "rand_core 0.10.1",
replacement in Cargo.lock at line 2271
[2.652032]→[3.27620:27639](∅→∅) replacement in Cargo.lock at line 2273
[2.652115]→[3.27640:27718](∅→∅) − checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
+ checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d"
+ dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http 0.2.12",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ ]
+
+ [[package]]
+ name = "h2"
+ version = "0.4.14"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733"
replacement in Cargo.lock at line 2299
[2.652279]→[19.12794:12803](∅→∅) edit in Cargo.lock at line 2352
+
+ [[package]]
+ name = "hashbrown"
+ version = "0.17.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
replacement in Cargo.lock at line 2368
[2.653710]→[19.12804:12813](∅→∅) replacement in Cargo.lock at line 2380
[2.653971]→[19.12814:12823](∅→∅) edit in Cargo.lock at line 2439
+ ]
+
+ [[package]]
+ name = "hmac"
+ version = "0.13.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f"
+ dependencies = [
+ "digest 0.11.3",
replacement in Cargo.lock at line 2488
[2.656708]→[3.28736:28754](∅→∅) + version = "0.2.12"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
+ dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+ ]
+
+ [[package]]
+ name = "http"
+ version = "1.4.1"
replacement in Cargo.lock at line 2501
[2.656791]→[3.28755:28833](∅→∅) − checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
+ checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0"
edit in Cargo.lock at line 2505
+ ]
+
+ [[package]]
+ name = "http-body"
+ version = "0.4.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
+ dependencies = [
+ "bytes",
+ "http 0.2.12",
+ "pin-project-lite",
replacement in Cargo.lock at line 2525
[2.657394]→[19.13073:13082](∅→∅) replacement in Cargo.lock at line 2536
[3.28965]→[19.13083:13106](∅→∅) + "http 1.4.1",
+ "http-body 1.0.1",
edit in Cargo.lock at line 2540
+
+ [[package]]
+ name = "http-range-header"
+ version = "0.4.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c"
edit in Cargo.lock at line 2560
+ name = "hybrid-array"
+ version = "0.4.12"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"
+ dependencies = [
+ "typenum",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 2570
[2.658758]→[3.29115:29133](∅→∅) replacement in Cargo.lock at line 2572
[2.658841]→[3.29134:29212](∅→∅) − checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11"
+ checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
edit in Cargo.lock at line 2574
[2.658936]→[3.29213:29230](∅→∅) replacement in Cargo.lock at line 2577
[3.29248]→[19.13107:13137](∅→∅) − "h2",
− "http",
− "http-body",
+ "futures-util",
+ "h2 0.3.27",
+ "http 0.2.12",
+ "http-body 0.4.6",
replacement in Cargo.lock at line 2585
[2.659087]→[3.29278:29292](∅→∅),
[3.29292]→[2.659087:659100](∅→∅),
[2.659087]→[2.659087:659100](∅→∅) − "pin-utils",
− "smallvec",
edit in Cargo.lock at line 2587
+ "tower-service",
+ "tracing",
replacement in Cargo.lock at line 2593
[2.659134]→[2.659134:659156](∅→∅),
[2.659156]→[3.29293:29312](∅→∅) − name = "hyper-rustls"
− version = "0.27.7"
+ name = "hyper"
+ version = "1.10.1"
replacement in Cargo.lock at line 2596
[2.659240]→[3.29313:29391](∅→∅) − checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
+ checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498"
replacement in Cargo.lock at line 2598
[2.659335]→[19.13138:13157](∅→∅),
[19.13157]→[2.659383:659430](∅→∅),
[3.29423]→[2.659383:659430](∅→∅),
[2.659383]→[2.659383:659430](∅→∅) − "http",
− "hyper",
− "hyper-util",
− "rustls",
− "rustls-pki-types",
+ "atomic-waker",
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "h2 0.4.14",
+ "http 1.4.1",
+ "http-body 1.0.1",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
replacement in Cargo.lock at line 2615
[2.659795]→[2.659795:659813](∅→∅) replacement in Cargo.lock at line 2617
[2.659878]→[2.659878:659956](∅→∅) − checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
+ checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
replacement in Cargo.lock at line 2620
[2.659983]→[2.659983:660002](∅→∅),
[2.660002]→[19.13158:13168](∅→∅),
[19.13168]→[2.660018:660033](∅→∅),
[3.29440]→[2.660018:660033](∅→∅),
[2.660018]→[2.660018:660033](∅→∅) − "http-body-util",
− "hyper",
− "hyper-util",
edit in Cargo.lock at line 2624
[2.660079]→[2.660079:660097](∅→∅) replacement in Cargo.lock at line 2628
[2.660132]→[3.29441:29460](∅→∅) replacement in Cargo.lock at line 2630
[2.660216]→[3.29461:29539](∅→∅) − checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56"
+ checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
edit in Cargo.lock at line 2632
[2.660311]→[3.29540:29558](∅→∅) replacement in Cargo.lock at line 2633
[2.660321]→[2.660321:660341](∅→∅),
[2.660341]→[3.29559:29576](∅→∅),
[3.29576]→[2.660341:660358](∅→∅),
[2.660341]→[2.660341:660358](∅→∅),
[2.660358]→[19.13169:13202](∅→∅),
[19.13202]→[3.29609:29649](∅→∅),
[3.29609]→[3.29609:29649](∅→∅) − "futures-channel",
− "futures-core",
− "futures-util",
− "http",
− "http-body",
− "hyper",
− "ipnet",
− "libc",
− "percent-encoding",
+ "http 1.4.1",
+ "http-body 1.0.1",
+ "hyper 1.10.1",
edit in Cargo.lock at line 2637
[2.660430]→[19.13203:13215](∅→∅),
[19.13215]→[3.29668:29693](∅→∅),
[3.29668]→[3.29668:29693](∅→∅) − "socket2",
− "system-configuration",
edit in Cargo.lock at line 2639
[2.660470]→[2.660470:660482](∅→∅),
[2.660482]→[3.29694:29715](∅→∅) − "tracing",
− "windows-registry",
replacement in Cargo.lock at line 2643
[2.660521]→[3.29716:29735](∅→∅) replacement in Cargo.lock at line 2645
[2.660605]→[3.29736:29814](∅→∅) − checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
+ checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
replacement in Cargo.lock at line 2667
[2.661094]→[3.29824:29842](∅→∅) replacement in Cargo.lock at line 2669
[2.661177]→[3.29843:29921](∅→∅) − checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
+ checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
edit in Cargo.lock at line 2673
replacement in Cargo.lock at line 2681
[3.29966]→[3.29966:29984](∅→∅) replacement in Cargo.lock at line 2683
[2.661438]→[3.29985:30063](∅→∅) − checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
+ checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
replacement in Cargo.lock at line 2694
[2.662166]→[3.30064:30082](∅→∅) replacement in Cargo.lock at line 2696
[2.662249]→[3.30083:30161](∅→∅) − checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
+ checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
replacement in Cargo.lock at line 2708
[2.662549]→[3.30162:30180](∅→∅) replacement in Cargo.lock at line 2710
[2.662632]→[3.30181:30259](∅→∅) − checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
+ checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
replacement in Cargo.lock at line 2714
[2.662747]→[3.30260:30278](∅→∅) replacement in Cargo.lock at line 2716
[2.662830]→[3.30279:30357](∅→∅) − checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
+ checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
replacement in Cargo.lock at line 2728
[2.663093]→[3.30393:30411](∅→∅) replacement in Cargo.lock at line 2730
[2.663176]→[3.30412:30490](∅→∅) − checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
+ checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
replacement in Cargo.lock at line 2734
[2.663289]→[3.30491:30509](∅→∅) replacement in Cargo.lock at line 2736
[2.663372]→[3.30510:30588](∅→∅) − checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
+ checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
replacement in Cargo.lock at line 2772
[2.664348]→[3.30722:30740](∅→∅) replacement in Cargo.lock at line 2774
[2.664431]→[3.30741:30819](∅→∅) − checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+ checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
replacement in Cargo.lock at line 2807
[2.664925]→[3.30939:30958](∅→∅) replacement in Cargo.lock at line 2809
[2.665008]→[3.30959:31037](∅→∅) − checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
+ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
replacement in Cargo.lock at line 2812
[2.665118]→[3.31038:31059](∅→∅) edit in Cargo.lock at line 2818
+ name = "indicatif"
+ version = "0.17.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
+ dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-segmentation",
+ "unicode-width",
+ "web-time",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 2833
[10.47412]→[10.47412:47431](∅→∅) replacement in Cargo.lock at line 2835
[10.47496]→[10.47496:47574](∅→∅) − checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199"
+ checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1"
replacement in Cargo.lock at line 2837
[10.47591]→[10.47591:47628](∅→∅) − "bitflags 2.10.0",
− "futures-core",
+ "bitflags 2.12.1",
+ "futures-util",
edit in Cargo.lock at line 2863
+ name = "inout"
+ version = "0.2.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7"
+ dependencies = [
+ "hybrid-array",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 2882
[2.665627]→[2.665627:665646](∅→∅) replacement in Cargo.lock at line 2884
[2.665711]→[2.665711:665789](∅→∅) − checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
+ checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
edit in Cargo.lock at line 2893
[3.31349]→[3.31349:31387](∅→∅),
[3.31387]→[2.665840:665905](∅→∅),
[2.665840]→[2.665840:665905](∅→∅),
[2.665905]→[3.31388:31466](∅→∅),
[3.31466]→[2.665983:666000](∅→∅),
[2.665983]→[2.665983:666000](∅→∅),
[2.666000]→[3.31467:31478](∅→∅),
[3.31478]→[2.666000:666025](∅→∅),
[2.666000]→[2.666000:666025](∅→∅) − name = "iri-string"
− version = "0.7.9"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
− dependencies = [
− "memchr",
− "serde",
− ]
−
− [[package]]
replacement in Cargo.lock at line 2918
[2.666886]→[3.31677:31696](∅→∅) replacement in Cargo.lock at line 2920
[3.31761]→[3.31761:31839](∅→∅) − checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
replacement in Cargo.lock at line 2924
[3.31866]→[3.31866:31885](∅→∅) replacement in Cargo.lock at line 2926
[3.31950]→[3.31950:32028](∅→∅) − checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35"
+ checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102"
replacement in Cargo.lock at line 2934
[3.32129]→[10.47912:47935](∅→∅) replacement in Cargo.lock at line 2949
[3.32165]→[3.32165:32184](∅→∅) replacement in Cargo.lock at line 2951
[2.666970]→[3.32185:32263](∅→∅) − checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69"
+ checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47"
replacement in Cargo.lock at line 2955
[3.32306]→[3.32306:32322](∅→∅) replacement in Cargo.lock at line 2985
[2.667299]→[3.32445:32464](∅→∅) replacement in Cargo.lock at line 2987
[2.667383]→[3.32465:32543](∅→∅) − checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
+ checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
edit in Cargo.lock at line 2989
+ "cfg-if",
+ "futures-util",
replacement in Cargo.lock at line 2997
[3.32570]→[3.32570:32588](∅→∅) + version = "3.0.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "35e770254dd7802184595b1d30da2a15cb72569e2aca2b177aef8d22eac8a693"
+
+ [[package]]
+ name = "keyring"
+ version = "3.6.3"
replacement in Cargo.lock at line 3005
[3.32653]→[3.32653:32731](∅→∅) − checksum = "a3c2a6c0b4b5637c41719973ef40c6a1cf564f9db6958350de6193fbee9c23f5"
+ checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c"
+ dependencies = [
+ "byteorder",
+ "dbus-secret-service",
+ "linux-keyutils",
+ "log",
+ "security-framework 2.11.1",
+ "security-framework 3.7.0",
+ "windows-sys 0.60.2",
+ "zeroize",
+ ]
replacement in Cargo.lock at line 3048
[19.13612]→[19.13612:13624](∅→∅) replacement in Cargo.lock at line 3055
[2.667925]→[10.48600:48620](∅→∅) replacement in Cargo.lock at line 3057
[2.668010]→[10.48621:48699](∅→∅) − checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
+ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
replacement in Cargo.lock at line 3060
[2.668345]→[2.668345:668359](∅→∅),
[2.668359]→[3.32845:32864](∅→∅) − name = "libm"
− version = "0.2.15"
+ name = "libdbus-sys"
+ version = "0.2.7"
replacement in Cargo.lock at line 3063
[2.668443]→[3.32865:32943](∅→∅) − checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
+ checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043"
+ dependencies = [
+ "pkg-config",
+ ]
replacement in Cargo.lock at line 3069
[2.668534]→[2.668534:668552](∅→∅),
[2.668552]→[10.48700:48726](∅→∅) − name = "libpijul"
− version = "1.0.0-beta.11"
+ name = "libm"
+ version = "0.2.16"
replacement in Cargo.lock at line 3072
[2.668643]→[10.48727:48805](∅→∅),
[10.48805]→[2.668721:668764](∅→∅),
[2.668721]→[2.668721:668764](∅→∅),
[2.668764]→[3.32944:32962](∅→∅),
[3.32962]→[10.48806:48826](∅→∅),
[10.48826]→[2.668795:668854](∅→∅),
[2.668795]→[2.668795:668854](∅→∅),
[2.668865]→[2.668865:668879](∅→∅),
[2.668890]→[2.668890:668910](∅→∅),
[2.668910]→[10.48827:48854](∅→∅),
[10.48854]→[2.668931:669022](∅→∅),
[2.668931]→[2.668931:669022](∅→∅),
[2.669022]→[3.32963:32984](∅→∅),
[3.32984]→[2.669043:669070](∅→∅),
[2.669043]→[2.669043:669070](∅→∅),
[2.669070]→[10.48855:48879](∅→∅),
[10.48879]→[2.669086:669108](∅→∅),
[2.669086]→[2.669086:669108](∅→∅),
[2.669119]→[3.32985:32999](∅→∅),
[3.32999]→[10.48880:48903](∅→∅),
[10.48903]→[2.669150:669199](∅→∅),
[2.669150]→[2.669150:669199](∅→∅),
[2.669199]→[10.48904:48919](∅→∅),
[10.48919]→[2.669214:669316](∅→∅),
[2.669214]→[2.669214:669316](∅→∅),
[2.669316]→[10.48920:48957](∅→∅),
[10.48957]→[2.669353:669387](∅→∅),
[2.669353]→[2.669353:669387](∅→∅) − checksum = "f625e90234ef1fd164dfe7980ffb04a3036a08e31e051cc29e6273a0c9a7a7e7"
− dependencies = [
− "adler32",
− "aes 0.7.5",
− "bincode 1.3.3",
− "bitflags 2.10.0",
− "blake3",
− "bs58 0.4.0",
− "byteorder",
− "canonical-path",
− "chardetng",
− "crossbeam-deque",
− "curve25519-dalek 4.1.3",
− "data-encoding",
− "diffs",
− "ed25519-dalek",
− "encoding_rs",
− "flate2",
− "generic-array",
− "getrandom 0.2.16",
− "hmac 0.11.0",
− "ignore",
− "imara-diff",
− "jiff",
− "log",
− "lru-cache",
− "nom 7.1.3",
− "parking_lot 0.12.5",
− "path-slash",
− "pbkdf2 0.9.0",
− "pijul-macros",
− "rand 0.9.2",
− "regex",
− "sanakirja",
− "serde",
− "serde_derive",
− "serde_json",
− "sha2 0.9.9",
− "tar",
− "tempfile",
− "thiserror 2.0.17",
− "toml 0.8.23",
− "twox-hash",
− "zstd-seekable",
− ]
+ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
replacement in Cargo.lock at line 3076
[2.669418]→[3.33000:33019](∅→∅) replacement in Cargo.lock at line 3078
[2.669501]→[3.33020:33098](∅→∅) − checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
+ checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3"
replacement in Cargo.lock at line 3080
[2.669596]→[3.33099:33119](∅→∅) replacement in Cargo.lock at line 3082
[2.669624]→[3.33120:33145](∅→∅) − "redox_syscall 0.5.18",
+ "plain",
+ "redox_syscall 0.8.1",
replacement in Cargo.lock at line 3100
[2.669944]→[3.33146:33173](∅→∅) − version = "1.0.0-alpha.68"
+ version = "1.0.0-alpha.71"
replacement in Cargo.lock at line 3102
[2.670036]→[3.33174:33252](∅→∅) − checksum = "b407ca668368d1d5a86cea58ac82d9f9f9ca4bac1e9dce6f16f875f0f081a911"
+ checksum = "cb6314c2f0590ac93c86099b98bb7ba8abcf759bfd89604ffca906472bb54937"
replacement in Cargo.lock at line 3105
[3.33270]→[3.33270:33290](∅→∅) edit in Cargo.lock at line 3145
+ name = "linux-keyutils"
+ version = "0.2.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "83270a18e9f90d0707c41e9f35efada77b64c0e6f3f1810e71c8368a864d5590"
+ dependencies = [
+ "bitflags 2.12.1",
+ "libc",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 3162
[10.49156]→[3.33365:33384](∅→∅),
[2.670965]→[3.33365:33384](∅→∅) replacement in Cargo.lock at line 3164
[2.671049]→[3.33385:33463](∅→∅) − checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
replacement in Cargo.lock at line 3168
[2.671157]→[3.33464:33482](∅→∅) replacement in Cargo.lock at line 3170
[2.671240]→[3.33483:33561](∅→∅) − checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
+ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
replacement in Cargo.lock at line 3183
[2.671583]→[3.33661:33680](∅→∅) replacement in Cargo.lock at line 3185
[2.671667]→[3.33681:33759](∅→∅) − checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
+ checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f"
replacement in Cargo.lock at line 3241
[3.34114]→[3.34114:34130](∅→∅) replacement in Cargo.lock at line 3275
[2.674056]→[3.34363:34384](∅→∅) replacement in Cargo.lock at line 3280
[2.674349]→[2.674349:674368](∅→∅) replacement in Cargo.lock at line 3282
[2.674433]→[2.674433:674511](∅→∅) − checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+ checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98"
replacement in Cargo.lock at line 3285
[2.674539]→[2.674539:674557](∅→∅) replacement in Cargo.lock at line 3296
[2.674775]→[3.34385:34403](∅→∅) replacement in Cargo.lock at line 3298
[2.674858]→[3.34404:34482](∅→∅) − checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
+ checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
edit in Cargo.lock at line 3301
[2.674949]→[2.674949:675178](∅→∅) − name = "memmap"
− version = "0.7.0"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
− dependencies = [
− "libc",
− "winapi",
− ]
−
− [[package]]
replacement in Cargo.lock at line 3302
[2.675195]→[3.34483:34501](∅→∅) replacement in Cargo.lock at line 3304
[2.675278]→[3.34502:34580](∅→∅) − checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490"
+ checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
edit in Cargo.lock at line 3316
+ name = "mime_guess"
+ version = "2.0.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
+ dependencies = [
+ "mime",
+ "unicase",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 3377
[2.677182]→[3.35080:35098](∅→∅) replacement in Cargo.lock at line 3379
[2.677265]→[3.35099:35177](∅→∅) − checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
+ checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
replacement in Cargo.lock at line 3388
[2.677466]→[3.35241:35260](∅→∅) replacement in Cargo.lock at line 3390
[2.677550]→[3.35261:35339](∅→∅) − checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
+ checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2"
replacement in Cargo.lock at line 3398
[2.677721]→[2.677721:677744](∅→∅) + "security-framework 3.7.0",
replacement in Cargo.lock at line 3410
[3.35349]→[2.677886:677901](∅→∅),
[2.677886]→[2.677886:677901](∅→∅) replacement in Cargo.lock at line 3416
[2.677987]→[3.35350:35388](∅→∅) − "bincode 1.3.3",
− "bitflags 2.10.0",
+ "bincode",
+ "bitflags 2.12.1",
replacement in Cargo.lock at line 3435
[2.678229]→[19.13658:13667](∅→∅) replacement in Cargo.lock at line 3438
[2.678276]→[19.13668:13678](∅→∅) edit in Cargo.lock at line 3447
[10.49205]→[2.678344:678357](∅→∅),
[2.678344]→[2.678344:678357](∅→∅) edit in Cargo.lock at line 3452
replacement in Cargo.lock at line 3456
[2.678482]→[3.35437:35452](∅→∅) replacement in Cargo.lock at line 3468
[2.678712]→[3.35453:35474](∅→∅) replacement in Cargo.lock at line 3474
[2.678808]→[3.35475:35490](∅→∅) + "tokio-util",
+ "toml 0.9.12+spec-1.1.0",
replacement in Cargo.lock at line 3498
[2.679355]→[3.35590:35610](∅→∅) replacement in Cargo.lock at line 3550
[2.680176]→[2.680176:680194](∅→∅) replacement in Cargo.lock at line 3552
[2.680259]→[2.680259:680337](∅→∅) − checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+ checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
edit in Cargo.lock at line 3580
+ ]
+
+ [[package]]
+ name = "number_prefix"
+ version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+ [[package]]
+ name = "objc2-core-foundation"
+ version = "0.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
+ dependencies = [
+ "bitflags 2.12.1",
+ ]
+
+ [[package]]
+ name = "objc2-system-configuration"
+ version = "0.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396"
+ dependencies = [
+ "objc2-core-foundation",
replacement in Cargo.lock at line 3617
[2.681509]→[3.36258:36277](∅→∅) replacement in Cargo.lock at line 3619
[3.36342]→[3.36342:36420](∅→∅) − checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
replacement in Cargo.lock at line 3629
[2.681698]→[3.36560:36578](∅→∅) replacement in Cargo.lock at line 3631
[2.681781]→[3.36579:36657](∅→∅) − checksum = "336b9c63443aceef14bea841b899035ae3abe89b7c486aaf4c5bd8aafedac3f0"
+ checksum = "0cc3cbf698f9438986c11a880c90a6d04b9de27575afd28bbf45b154b6c709e2"
replacement in Cargo.lock at line 3633
[2.681876]→[3.36658:36678](∅→∅) replacement in Cargo.lock at line 3641
[2.681964]→[3.36679:36698](∅→∅) replacement in Cargo.lock at line 3643
[2.682048]→[3.36699:36777](∅→∅) − checksum = "c7f86c6eef3d6df15f23bcfb6af487cbd2fed4e5581d58d5bf1f5f8b7f6727dc"
+ checksum = "1e68317604e77e53b85896388e1a803c1d21b74c899ec9e5e1112db90735edd7"
replacement in Cargo.lock at line 3657
[2.682393]→[3.36778:36798](∅→∅) replacement in Cargo.lock at line 3659
[2.682478]→[3.36799:36877](∅→∅) − checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328"
+ checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967"
replacement in Cargo.lock at line 3661
[2.682573]→[3.36878:36898](∅→∅) edit in Cargo.lock at line 3665
[2.682630]→[2.682630:682644](∅→∅) replacement in Cargo.lock at line 3677
[2.682922]→[3.36899:36915](∅→∅) replacement in Cargo.lock at line 3682
[2.682975]→[2.682975:682993](∅→∅) replacement in Cargo.lock at line 3684
[2.683058]→[2.683058:683136](∅→∅) − checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
+ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
replacement in Cargo.lock at line 3688
[2.683170]→[3.36916:36936](∅→∅) replacement in Cargo.lock at line 3690
[2.683255]→[3.36937:37015](∅→∅) − checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321"
+ checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4"
replacement in Cargo.lock at line 3712
[3.37239]→[3.37239:37257](∅→∅) replacement in Cargo.lock at line 3714
[3.37322]→[3.37322:37400](∅→∅) − checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52"
+ checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d"
replacement in Cargo.lock at line 3718
[3.37439]→[3.37439:37457](∅→∅) replacement in Cargo.lock at line 3720
[3.37522]→[3.37522:37600](∅→∅) − checksum = "f978be538ca5e2a64326d24b7991dc658cc8495132833ae387212ab3b8abd70a"
+ checksum = "abb7a1163a5501f935f8722d839b576491b749c695e7a066aa0b8df988b806df"
edit in Cargo.lock at line 3722
[3.37617]→[3.37617:37635](∅→∅) replacement in Cargo.lock at line 3723
[3.37646]→[3.37646:37660](∅→∅) replacement in Cargo.lock at line 3727
[3.37700]→[3.37700:37730](∅→∅) − "thiserror 2.0.17",
− "time",
replacement in Cargo.lock at line 3732
[3.37765]→[3.37765:37783](∅→∅) replacement in Cargo.lock at line 3734
[3.37848]→[3.37848:37926](∅→∅) − checksum = "f02105a875f3751a0b44b4c822b01177728dd9049ae6fb419e9b04887d730ed1"
+ checksum = "4356a61f2ed4c9b3610245215fbf48970eb277126919f87db9d0efa93a74245c"
replacement in Cargo.lock at line 3740
[3.38004]→[3.38004:38025](∅→∅) replacement in Cargo.lock at line 3747
[3.38098]→[3.38098:38116](∅→∅) replacement in Cargo.lock at line 3749
[3.38181]→[3.38181:38259](∅→∅) − checksum = "003b4612827f6501183873fb0735da92157e3c7daa71c40921c7d2758fec2229"
+ checksum = "b237422b014f8f8fff75bb9379e697d13f8d57551a22c88bebb39f073c1bf696"
replacement in Cargo.lock at line 3753
[3.38302]→[3.38302:38318](∅→∅) replacement in Cargo.lock at line 3775
[3.38837]→[3.38837:38857](∅→∅) replacement in Cargo.lock at line 3795
[3.39267]→[3.39267:39283](∅→∅) replacement in Cargo.lock at line 3816
[3.39773]→[3.39773:39793](∅→∅) replacement in Cargo.lock at line 3940
[3.42506]→[3.42506:42526](∅→∅) replacement in Cargo.lock at line 3963
[3.42984]→[3.42984:43004](∅→∅) replacement in Cargo.lock at line 3996
[3.43585]→[3.43585:43603](∅→∅) replacement in Cargo.lock at line 3998
[3.43668]→[3.43668:43746](∅→∅) − checksum = "36801dbbd025f2fa133367494e38eef75a53d334ae6746ba0c889fc4e76fa3a3"
+ checksum = "6d378eb8bad20e89d66276aebab51f6a5408571092cac94abdd3eabb773713d6"
replacement in Cargo.lock at line 4026
[3.44355]→[3.44355:44375](∅→∅) replacement in Cargo.lock at line 4064
[2.683993]→[3.45049:45069](∅→∅) replacement in Cargo.lock at line 4259
[2.688843]→[2.688843:688858](∅→∅) replacement in Cargo.lock at line 4269
[2.689097]→[2.689097:689112](∅→∅) replacement in Cargo.lock at line 4292
[2.689399]→[3.46151:46167](∅→∅) replacement in Cargo.lock at line 4305
[3.46454]→[3.46454:46470](∅→∅) replacement in Cargo.lock at line 4323
[2.689863]→[2.689863:689883](∅→∅) replacement in Cargo.lock at line 4332
[3.46670]→[3.46670:46690](∅→∅) + "siphasher 1.0.3",
+ ]
+
+ [[package]]
+ name = "pijul-config"
+ version = "1.0.0-beta.12"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "7920c9e7135f08f267de8539865c6a384a93613a64039afef51d7c6baa3fae72"
+ dependencies = [
+ "anyhow",
+ "dialoguer",
+ "dirs-next",
+ "figment",
+ "log",
+ "pijul-core",
+ "serde",
+ "serde_derive",
+ "toml 0.8.23",
+ "whoami 1.6.1",
+ ]
+
+ [[package]]
+ name = "pijul-core"
+ version = "1.0.0-beta.14"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "9e70164a087ed87f9ebda06a590afbe2443d5402c32fe66c0fe9e396de25a026"
+ dependencies = [
+ "adler32",
+ "aes 0.9.1",
+ "bincode",
+ "bitflags 2.12.1",
+ "blake3",
+ "bs58 0.4.0",
+ "byteorder",
+ "canonical-path",
+ "chardetng",
+ "crossbeam-deque",
+ "ctr 0.10.1",
+ "curve25519-dalek 4.1.3",
+ "data-encoding",
+ "diffs",
+ "ed25519-dalek",
+ "encoding_rs",
+ "flate2",
+ "generic-array",
+ "getrandom 0.2.17",
+ "hmac 0.11.0",
+ "ignore",
+ "imara-diff",
+ "jiff",
+ "log",
+ "lru-cache",
+ "nom 7.1.3",
+ "parking_lot 0.12.5",
+ "path-slash",
+ "pbkdf2 0.9.0",
+ "pijul-macros",
+ "rand 0.10.1",
+ "regex",
+ "sanakirja",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha2 0.9.9",
+ "tar",
+ "tempfile",
+ "thiserror 2.0.18",
+ "toml 0.8.23",
+ "twox-hash",
+ "zstd-seekable",
edit in Cargo.lock at line 4410
+ ]
+
+ [[package]]
+ name = "pijul-identity"
+ version = "1.0.0-beta.12"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "f1fc424f2842866a9c434fedc515b92bdf0fe50c2b2ce39c27fa527975612717"
+ dependencies = [
+ "anyhow",
+ "dirs-next",
+ "jiff",
+ "keyring",
+ "log",
+ "pijul-config",
+ "pijul-core",
+ "pijul-interaction",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "thiserror 2.0.18",
+ "thrussh-keys",
+ "toml 0.8.23",
+ "validator",
+ "whoami 1.6.1",
edit in Cargo.lock at line 4437
+ name = "pijul-interaction"
+ version = "1.0.0-beta.12"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "4787fd3e8d03df9f8e159690460d166a9a0578f5196b48cf5d81cc9b6253abcf"
+ dependencies = [
+ "dialoguer",
+ "duplicate",
+ "indicatif",
+ "log",
+ "pijul-config",
+ "thiserror 2.0.18",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 4452
[2.690018]→[10.49304:49330](∅→∅) − version = "1.0.0-beta.11"
+ version = "1.0.0-beta.13"
replacement in Cargo.lock at line 4454
[2.690101]→[10.49331:49409](∅→∅) − checksum = "a794a27eb67b7ae7f940c4b94e186a58a525f87d11de1c1a0e317c9b7aafb163"
+ checksum = "97375a282175b20c2f2bd2ae73c106a3c9ffc3d36e81c56e08ee8c87e204a588"
replacement in Cargo.lock at line 4458
[2.690222]→[10.49410:49426](∅→∅) + "syn 2.0.117",
+ ]
+
+ [[package]]
+ name = "pijul-remote"
+ version = "1.0.0-beta.14"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "1161f7ea30608aa03ba7b3db3eaa91e810e33679dfa9b7dd74599b37d02e4b03"
+ dependencies = [
+ "anyhow",
+ "byteorder",
+ "bytes",
+ "dirs-next",
+ "futures",
+ "futures-util",
+ "keyring",
+ "log",
+ "pijul-config",
+ "pijul-core",
+ "pijul-identity",
+ "pijul-interaction",
+ "pijul-repository",
+ "regex",
+ "reqwest",
+ "sanakirja",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "thrussh",
+ "thrussh-config",
+ "thrussh-keys",
+ "tokio",
+ "url",
+ ]
+
+ [[package]]
+ name = "pijul-repository"
+ version = "1.0.0-beta.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "74d10e411ec5dc5255614df7f569068a5f9056c439beffd3c790041ed95451af"
+ dependencies = [
+ "anyhow",
+ "log",
+ "pijul-config",
+ "pijul-core",
+ "rlimit",
+ "toml 0.8.23",
replacement in Cargo.lock at line 4509
[2.690284]→[3.46706:46725](∅→∅) replacement in Cargo.lock at line 4511
[2.690367]→[3.46726:46804](∅→∅) − checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
+ checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
replacement in Cargo.lock at line 4518
[2.690532]→[3.46805:46824](∅→∅) replacement in Cargo.lock at line 4520
[2.690615]→[3.46825:46903](∅→∅) − checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
+ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
replacement in Cargo.lock at line 4524
[2.690736]→[3.46904:46920](∅→∅) replacement in Cargo.lock at line 4529
[2.690792]→[2.690792:690811](∅→∅) replacement in Cargo.lock at line 4531
[2.690876]→[2.690876:690954](∅→∅) − checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
replacement in Cargo.lock at line 4534
[2.690967]→[2.690967:691004](∅→∅) − name = "pin-utils"
− version = "0.1.0"
+ name = "pkg-config"
+ version = "0.3.33"
replacement in Cargo.lock at line 4537
[2.691069]→[2.691069:691147](∅→∅) − checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+ checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
replacement in Cargo.lock at line 4540
[2.691160]→[2.691160:691180](∅→∅),
[2.691180]→[3.46921:46940](∅→∅) − name = "pkg-config"
− version = "0.3.32"
+ name = "plain"
+ version = "0.2.3"
replacement in Cargo.lock at line 4543
[2.691264]→[3.46941:47019](∅→∅) − checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
+ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
replacement in Cargo.lock at line 4547
[2.691370]→[3.47020:47038](∅→∅) replacement in Cargo.lock at line 4549
[2.691453]→[3.47039:47117](∅→∅) − checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
+ checksum = "092791278e026273c1b65bbdcfbba3a300f2994c896bd01ab01da613c29c46f1"
replacement in Cargo.lock at line 4565
[2.691833]→[2.691833:691849](∅→∅) replacement in Cargo.lock at line 4572
[3.47158]→[3.47158:47177](∅→∅) replacement in Cargo.lock at line 4574
[3.47242]→[3.47242:47320](∅→∅) − checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
replacement in Cargo.lock at line 4578
[3.47363]→[3.47363:47381](∅→∅) replacement in Cargo.lock at line 4580
[3.47446]→[3.47446:47524](∅→∅) − checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
+ checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
replacement in Cargo.lock at line 4586
[2.691900]→[2.691900:691925](∅→∅),
[2.691925]→[3.47562:47580](∅→∅) − name = "postgres-derive"
− version = "0.4.7"
+ name = "postcard"
+ version = "1.1.3"
replacement in Cargo.lock at line 4589
[2.692008]→[3.47581:47659](∅→∅) − checksum = "56df96f5394370d1b20e49de146f9e6c25aa9ae750f449c9d665eafecb3ccae6"
+ checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24"
replacement in Cargo.lock at line 4591
[2.692103]→[2.692103:692144](∅→∅),
[2.692144]→[3.47660:47676](∅→∅) − "heck 0.5.0",
− "proc-macro2",
− "quote",
− "syn 2.0.111",
+ "cobs",
+ "embedded-io 0.4.0",
+ "embedded-io 0.6.1",
+ "serde",
edit in Cargo.lock at line 4598
[2.692174]→[2.692174:692200](∅→∅),
[2.692200]→[3.47677:47695](∅→∅),
[3.47695]→[2.692218:692283](∅→∅),
[2.692218]→[2.692218:692283](∅→∅),
[2.692283]→[3.47696:47774](∅→∅),
[3.47774]→[2.692361:692452](∅→∅),
[2.692361]→[2.692361:692452](∅→∅) − name = "postgres-openssl"
− version = "0.5.2"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "8f86f073ad570f76e9e278ce6f05775fc723eed7daa6b4f9c2aa078080a564a0"
− dependencies = [
− "openssl",
− "tokio",
− "tokio-openssl",
− "tokio-postgres",
− ]
−
− [[package]]
replacement in Cargo.lock at line 4599
[2.692479]→[3.47775:47793](∅→∅) replacement in Cargo.lock at line 4601
[2.692562]→[3.47794:47872](∅→∅) − checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4"
+ checksum = "56201207dac53e2f38e848e31b4b91616a6bb6e0c7205b77718994a7f49e70fc"
replacement in Cargo.lock at line 4607
[2.692721]→[2.692721:692737](∅→∅) replacement in Cargo.lock at line 4610
[2.692764]→[3.47873:47904](∅→∅) − "rand 0.9.2",
− "sha2 0.10.9",
+ "rand 0.10.1",
+ "sha2 0.11.0",
replacement in Cargo.lock at line 4617
[2.692849]→[3.47905:47924](∅→∅) replacement in Cargo.lock at line 4619
[2.692932]→[3.47925:48003](∅→∅) − checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095"
+ checksum = "8dc729a129e682e8d24170cd30ae1aa01b336b096cbb56df6d534ffec133d186"
edit in Cargo.lock at line 4622
[2.693037]→[2.693037:693048](∅→∅) edit in Cargo.lock at line 4623
[2.693070]→[2.693070:693090](∅→∅) edit in Cargo.lock at line 4624
[2.693112]→[2.693112:693121](∅→∅) replacement in Cargo.lock at line 4628
[3.48027]→[3.48027:48045](∅→∅) replacement in Cargo.lock at line 4630
[3.48110]→[3.48110:48188](∅→∅) − checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
+ checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
replacement in Cargo.lock at line 4663
[4.11528]→[4.11528:11544](∅→∅) replacement in Cargo.lock at line 4678
[2.694258]→[3.48444:48464](∅→∅) replacement in Cargo.lock at line 4680
[2.694342]→[3.48465:48543](∅→∅) − checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
edit in Cargo.lock at line 4686
+ name = "proc-macro2-diagnostics"
+ version = "0.10.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
+ dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "version_check",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 4719
[2.694985]→[3.48544:48563](∅→∅) replacement in Cargo.lock at line 4721
[2.695069]→[3.48564:48642](∅→∅) − checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0"
+ checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e"
replacement in Cargo.lock at line 4723
[2.695164]→[3.48643:48663](∅→∅) replacement in Cargo.lock at line 4738
[2.695484]→[3.48664:48683](∅→∅) replacement in Cargo.lock at line 4740
[2.695568]→[3.48684:48762](∅→∅) − checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
+ checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e"
replacement in Cargo.lock at line 4747
[2.695704]→[3.48763:48782](∅→∅) replacement in Cargo.lock at line 4749
[2.695788]→[3.48783:48861](∅→∅) − checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
+ checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
edit in Cargo.lock at line 4767
+ name = "r-efi"
+ version = "6.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+
+ [[package]]
replacement in Cargo.lock at line 4804
[2.696674]→[2.696674:696692](∅→∅) replacement in Cargo.lock at line 4806
[2.696757]→[2.696757:696835](∅→∅) − checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+ checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
replacement in Cargo.lock at line 4815
[2.696932]→[3.49076:49094](∅→∅) replacement in Cargo.lock at line 4817
[2.697015]→[3.49095:49173](∅→∅) − checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+ checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
replacement in Cargo.lock at line 4820
[2.697132]→[3.49174:49194](∅→∅) + "rand_core 0.9.5",
+ ]
+
+ [[package]]
+ name = "rand"
+ version = "0.10.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
+ dependencies = [
+ "chacha20",
+ "getrandom 0.4.2",
+ "rand_core 0.10.1",
replacement in Cargo.lock at line 4861
[2.697899]→[3.49195:49215](∅→∅) replacement in Cargo.lock at line 4879
[2.698364]→[3.49216:49237](∅→∅) replacement in Cargo.lock at line 4884
[2.698419]→[3.49238:49256](∅→∅) replacement in Cargo.lock at line 4886
[2.698502]→[3.49257:49335](∅→∅) − checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+ checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
edit in Cargo.lock at line 4890
+
+ [[package]]
+ name = "rand_core"
+ version = "0.10.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
replacement in Cargo.lock at line 4908
[2.698897]→[3.49357:49376](∅→∅) replacement in Cargo.lock at line 4910
[2.698981]→[3.49377:49455](∅→∅) − checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
+ checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
replacement in Cargo.lock at line 4941
[2.699808]→[3.49654:49674](∅→∅) + "bitflags 2.12.1",
+ ]
+
+ [[package]]
+ name = "redox_syscall"
+ version = "0.8.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7"
+ dependencies = [
+ "bitflags 2.12.1",
replacement in Cargo.lock at line 4959
[2.700041]→[3.49675:49696](∅→∅) replacement in Cargo.lock at line 4966
[2.700126]→[3.49697:49716](∅→∅) replacement in Cargo.lock at line 4968
[2.700210]→[3.49717:49795](∅→∅) − checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
+ checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
replacement in Cargo.lock at line 4978
[2.700426]→[3.49851:49870](∅→∅) replacement in Cargo.lock at line 4980
[2.700510]→[3.49871:49949](∅→∅) − checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
+ checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
replacement in Cargo.lock at line 4989
[2.700940]→[3.49986:50004](∅→∅) replacement in Cargo.lock at line 4991
[2.701024]→[3.50005:50083](∅→∅) − checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
+ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
edit in Cargo.lock at line 5006
[2.701588]→[3.50084:50102](∅→∅),
[3.50102]→[2.701600:701670](∅→∅),
[2.701600]→[2.701600:701670](∅→∅) − "bincode 2.0.1",
− "byteorder",
− "bytes",
− "clap",
− "deadpool-postgres",
− "env_logger",
replacement in Cargo.lock at line 5007
[2.701682]→[2.701682:701804](∅→∅),
[2.701804]→[3.50103:50118](∅→∅),
[3.50118]→[2.701819:701829](∅→∅),
[2.701819]→[2.701819:701829](∅→∅) − "indexmap",
− "lazy_static",
− "libc",
− "libpijul",
− "log",
− "memmap",
− "openssl",
− "postgres-openssl",
− "postgres-types",
− "rand 0.9.2",
− "regex",
replacement in Cargo.lock at line 5010
[2.701856]→[3.50119:50140](∅→∅) edit in Cargo.lock at line 5012
[2.701887]→[2.701887:701924](∅→∅),
[2.701924]→[3.50141:50156](∅→∅) − "tokio-openssl",
− "tokio-postgres",
− "toml 0.9.8",
edit in Cargo.lock at line 5013
[2.701949]→[2.701949:701960](∅→∅) replacement in Cargo.lock at line 5017
[2.701992]→[3.50157:50177](∅→∅) replacement in Cargo.lock at line 5019
[2.702077]→[3.50178:50256](∅→∅) − checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
+ checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
replacement in Cargo.lock at line 5021
[2.702172]→[2.702172:702190](∅→∅) replacement in Cargo.lock at line 5025
[2.702233]→[19.13902:13932](∅→∅),
[19.13932]→[2.702298:702317](∅→∅),
[2.702298]→[2.702298:702317](∅→∅),
[2.702317]→[19.13933:13943](∅→∅),
[19.13943]→[2.702333:702350](∅→∅),
[3.50303]→[2.702333:702350](∅→∅),
[2.702333]→[2.702333:702350](∅→∅) − "h2",
− "http",
− "http-body",
− "http-body-util",
− "hyper",
− "hyper-rustls",
+ "futures-util",
+ "h2 0.3.27",
+ "http 0.2.12",
+ "http-body 0.4.6",
+ "hyper 0.14.32",
replacement in Cargo.lock at line 5031
[19.13958]→[2.702370:702385](∅→∅),
[2.702370]→[2.702370:702385](∅→∅) edit in Cargo.lock at line 5036
replacement in Cargo.lock at line 5039
[2.702494]→[3.50304:50325](∅→∅) + "rustls-pemfile 1.0.4",
replacement in Cargo.lock at line 5043
[2.702559]→[2.702559:702576](∅→∅) + "sync_wrapper 0.1.2",
+ "system-configuration",
replacement in Cargo.lock at line 5047
[2.702632]→[3.50326:50351](∅→∅) − "tower",
− "tower-http",
edit in Cargo.lock at line 5052
edit in Cargo.lock at line 5054
replacement in Cargo.lock at line 5065
[2.702975]→[3.50452:50473](∅→∅) replacement in Cargo.lock at line 5073
[2.703080]→[2.703080:703099](∅→∅) replacement in Cargo.lock at line 5075
[2.703164]→[2.703164:703242](∅→∅) − checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b"
+ checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1"
replacement in Cargo.lock at line 5091
[2.703422]→[2.703422:703441](∅→∅) replacement in Cargo.lock at line 5093
[2.703506]→[2.703506:703584](∅→∅) − checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0"
+ checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5"
edit in Cargo.lock at line 5098
+ ]
+
+ [[package]]
+ name = "rlimit"
+ version = "0.10.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "7043b63bd0cd1aaa628e476b80e6d4023a3b50eb32789f2728908107bd0c793a"
+ dependencies = [
+ "libc",
replacement in Cargo.lock at line 5111
[2.705676]→[2.705676:705694](∅→∅) replacement in Cargo.lock at line 5113
[2.705759]→[2.705759:705837](∅→∅) − checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+ checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
replacement in Cargo.lock at line 5139
[10.49607]→[10.49607:49627](∅→∅) replacement in Cargo.lock at line 5143
[10.49671]→[10.49671:49694](∅→∅) replacement in Cargo.lock at line 5148
[10.49725]→[3.50489:50507](∅→∅),
[2.706320]→[3.50489:50507](∅→∅) replacement in Cargo.lock at line 5150
[2.706405]→[3.50508:50586](∅→∅) − checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
+ checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
replacement in Cargo.lock at line 5152
[2.706500]→[3.50587:50607](∅→∅) replacement in Cargo.lock at line 5155
[2.706538]→[10.49726:49751](∅→∅) − "linux-raw-sys 0.11.0",
+ "linux-raw-sys 0.12.1",
replacement in Cargo.lock at line 5161
[2.706610]→[3.50632:50652](∅→∅) replacement in Cargo.lock at line 5163
[2.706695]→[3.50653:50731](∅→∅) − checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f"
+ checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b"
edit in Cargo.lock at line 5171
+ ]
+
+ [[package]]
+ name = "rustls-pemfile"
+ version = "1.0.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
+ dependencies = [
+ "base64 0.21.7",
replacement in Cargo.lock at line 5193
[2.707159]→[3.50732:50751](∅→∅) replacement in Cargo.lock at line 5195
[2.707243]→[3.50752:50830](∅→∅) − checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a"
+ checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9"
replacement in Cargo.lock at line 5202
[2.707357]→[3.50862:50882](∅→∅) replacement in Cargo.lock at line 5204
[2.707442]→[3.50883:50961](∅→∅) − checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
+ checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
replacement in Cargo.lock at line 5220
[2.707819]→[3.51061:51080](∅→∅) replacement in Cargo.lock at line 5222
[2.707903]→[3.51081:51159](∅→∅) − checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
replacement in Cargo.lock at line 5262
[2.708814]→[3.51160:51179](∅→∅) replacement in Cargo.lock at line 5264
[2.708898]→[3.51180:51258](∅→∅) − checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
+ checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
replacement in Cargo.lock at line 5305
[2.710108]→[3.51307:51327](∅→∅),
[3.51327]→[2.710127:710147](∅→∅),
[2.710127]→[2.710127:710147](∅→∅) − "bitflags 2.10.0",
− "core-foundation",
+ "bitflags 2.12.1",
+ "core-foundation 0.9.4",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+ ]
+
+ [[package]]
+ name = "security-framework"
+ version = "3.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
+ dependencies = [
+ "bitflags 2.12.1",
+ "core-foundation 0.10.1",
replacement in Cargo.lock at line 5327
[2.710254]→[3.51328:51347](∅→∅) replacement in Cargo.lock at line 5329
[2.710338]→[3.51348:51426](∅→∅) − checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
+ checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
replacement in Cargo.lock at line 5337
[3.51459]→[3.51459:51477](∅→∅) replacement in Cargo.lock at line 5339
[3.51542]→[3.51542:51620](∅→∅) − checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33"
+ checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89"
replacement in Cargo.lock at line 5343
[2.710497]→[3.51621:51640](∅→∅) replacement in Cargo.lock at line 5345
[3.51705]→[3.51705:51783](∅→∅) − checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
replacement in Cargo.lock at line 5409
[2.711592]→[3.52804:52820](∅→∅) replacement in Cargo.lock at line 5414
[2.711642]→[3.52821:52841](∅→∅) replacement in Cargo.lock at line 5416
[2.711727]→[3.52842:52920](∅→∅) − checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
+ checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
edit in Cargo.lock at line 5420
[2.711842]→[2.711842:711850](∅→∅) edit in Cargo.lock at line 5422
replacement in Cargo.lock at line 5447
[2.712140]→[3.53052:53070](∅→∅) replacement in Cargo.lock at line 5449
[2.712223]→[3.53071:53149](∅→∅) − checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
+ checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
replacement in Cargo.lock at line 5473
[2.712813]→[2.712813:712829](∅→∅) replacement in Cargo.lock at line 5485
[2.713088]→[2.713088:713104](∅→∅) replacement in Cargo.lock at line 5497
[2.713357]→[2.713357:713373](∅→∅) edit in Cargo.lock at line 5502
+ name = "sha2"
+ version = "0.11.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
+ dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.0",
+ "digest 0.11.3",
+ ]
+
+ [[package]]
edit in Cargo.lock at line 5522
+ name = "shell-words"
+ version = "1.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77"
+
+ [[package]]
replacement in Cargo.lock at line 5529
[2.713652]→[2.713652:713670](∅→∅) replacement in Cargo.lock at line 5531
[2.713735]→[2.713735:713813](∅→∅) − checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
replacement in Cargo.lock at line 5535
[2.713856]→[3.53265:53283](∅→∅) replacement in Cargo.lock at line 5537
[2.713939]→[3.53284:53362](∅→∅) − checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad"
+ checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
edit in Cargo.lock at line 5539
replacement in Cargo.lock at line 5560
[3.53416]→[3.53416:53434](∅→∅) replacement in Cargo.lock at line 5562
[3.53499]→[3.53499:53577](∅→∅) − checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+ checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
replacement in Cargo.lock at line 5578
[2.714886]→[2.714886:714904](∅→∅) replacement in Cargo.lock at line 5580
[2.714969]→[2.714969:715047](∅→∅) − checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+ checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
replacement in Cargo.lock at line 5584
[2.715074]→[3.53578:53597](∅→∅) replacement in Cargo.lock at line 5586
[2.715157]→[3.53598:53676](∅→∅) − checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
+ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
replacement in Cargo.lock at line 5602
[3.54081]→[3.54081:54099](∅→∅) replacement in Cargo.lock at line 5604
[3.54164]→[3.54164:54242](∅→∅) − checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
+ checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
replacement in Cargo.lock at line 5607
[3.54268]→[3.54268:54291](∅→∅) + "windows-sys 0.52.0",
+ ]
+
+ [[package]]
+ name = "socket2"
+ version = "0.6.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51"
+ dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
replacement in Cargo.lock at line 5706
[2.717843]→[3.54832:54852](∅→∅) replacement in Cargo.lock at line 5708
[2.717927]→[3.54853:54931](∅→∅) − checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
+ checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
edit in Cargo.lock at line 5714
+
+ [[package]]
+ name = "sync_wrapper"
+ version = "0.1.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
edit in Cargo.lock at line 5726
[2.718264]→[2.718264:718300](∅→∅) − dependencies = [
− "futures-core",
− ]
replacement in Cargo.lock at line 5735
[2.718540]→[3.55031:55047](∅→∅) replacement in Cargo.lock at line 5744
[2.718765]→[3.55146:55164](∅→∅) replacement in Cargo.lock at line 5754
[2.718913]→[3.55183:55204](∅→∅) replacement in Cargo.lock at line 5761
[2.719005]→[2.719005:719023](∅→∅) replacement in Cargo.lock at line 5763
[2.719088]→[2.719088:719166](∅→∅) − checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
+ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
replacement in Cargo.lock at line 5765
[2.719183]→[3.55205:55225](∅→∅),
[3.55225]→[2.719202:719222](∅→∅),
[2.719202]→[2.719202:719222](∅→∅) − "bitflags 2.10.0",
− "core-foundation",
+ "bitflags 1.3.2",
+ "core-foundation 0.9.4",
replacement in Cargo.lock at line 5772
[2.719300]→[2.719300:719318](∅→∅) replacement in Cargo.lock at line 5774
[2.719383]→[2.719383:719461](∅→∅) − checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
+ checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
replacement in Cargo.lock at line 5788
[2.719726]→[3.55226:55245](∅→∅) replacement in Cargo.lock at line 5790
[2.719810]→[3.55246:55324](∅→∅) − checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a"
+ checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840"
replacement in Cargo.lock at line 5799
[2.719970]→[3.55325:55344](∅→∅) replacement in Cargo.lock at line 5801
[2.720054]→[3.55345:55423](∅→∅) − checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
+ checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
replacement in Cargo.lock at line 5804
[2.720173]→[3.55424:55444](∅→∅) replacement in Cargo.lock at line 5806
[2.720207]→[10.50204:50221](∅→∅) replacement in Cargo.lock at line 5843
[2.720751]→[3.55732:55751](∅→∅) replacement in Cargo.lock at line 5845
[2.720835]→[3.55752:55830](∅→∅) − checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
+ checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
replacement in Cargo.lock at line 5847
[2.720930]→[3.55831:55857](∅→∅) − "thiserror-impl 2.0.17",
+ "thiserror-impl 2.0.18",
replacement in Cargo.lock at line 5858
[2.721200]→[3.55858:55874](∅→∅) replacement in Cargo.lock at line 5863
[2.721254]→[3.55875:55894](∅→∅) replacement in Cargo.lock at line 5865
[2.721338]→[3.55895:55973](∅→∅) − checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
+ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
replacement in Cargo.lock at line 5869
[2.721459]→[3.55974:55990](∅→∅) replacement in Cargo.lock at line 5905
[2.722276]→[3.56188:56203](∅→∅) edit in Cargo.lock at line 5910
+ "tokio",
+ ]
+
+ [[package]]
+ name = "thrussh-config"
+ version = "0.6.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "fa974aab89a724928e2fb4e526f6e9a5fa4fb9d544e824fc38bd177c48ca6622"
+ dependencies = [
+ "dirs-next",
+ "futures",
+ "log",
+ "thiserror 1.0.69",
edit in Cargo.lock at line 5924
replacement in Cargo.lock at line 5949
[2.722810]→[2.722810:722825](∅→∅) replacement in Cargo.lock at line 5975
[2.723264]→[3.56420:56439](∅→∅) replacement in Cargo.lock at line 5977
[2.723348]→[3.56440:56518](∅→∅) − checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
+ checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
replacement in Cargo.lock at line 5983
[2.723491]→[2.723491:723501](∅→∅) replacement in Cargo.lock at line 5990
[2.723565]→[3.56519:56537](∅→∅) replacement in Cargo.lock at line 5992
[2.723648]→[3.56538:56616](∅→∅) − checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
+ checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
replacement in Cargo.lock at line 5996
[2.723760]→[3.56617:56636](∅→∅) replacement in Cargo.lock at line 5998
[2.723844]→[3.56637:56715](∅→∅) − checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
+ checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
replacement in Cargo.lock at line 6006
[2.723998]→[3.56716:56734](∅→∅) replacement in Cargo.lock at line 6008
[2.724081]→[3.56735:56813](∅→∅) − checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
+ checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
replacement in Cargo.lock at line 6016
[2.724235]→[3.56814:56833](∅→∅) replacement in Cargo.lock at line 6018
[2.724318]→[3.56834:56912](∅→∅) − checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
+ checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3"
replacement in Cargo.lock at line 6031
[2.724660]→[3.56913:56932](∅→∅) replacement in Cargo.lock at line 6033
[2.724744]→[3.56933:57011](∅→∅) − checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
+ checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
replacement in Cargo.lock at line 6041
[2.724949]→[19.13959:13971](∅→∅) replacement in Cargo.lock at line 6048
[2.725038]→[3.57079:57097](∅→∅) replacement in Cargo.lock at line 6050
[2.725121]→[3.57098:57176](∅→∅) − checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
+ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
replacement in Cargo.lock at line 6054
[2.725242]→[3.57177:57193](∅→∅) edit in Cargo.lock at line 6064
[2.725491]→[2.725491:725745](∅→∅) − "tokio",
− ]
−
− [[package]]
− name = "tokio-openssl"
− version = "0.6.5"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "59df6849caa43bb7567f9a36f863c447d95a11d5903c9cc334ba32576a27eadd"
− dependencies = [
− "openssl",
− "openssl-sys",
replacement in Cargo.lock at line 6069
[2.725794]→[3.57194:57213](∅→∅) replacement in Cargo.lock at line 6071
[2.725878]→[3.57214:57292](∅→∅) − checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e"
+ checksum = "4dd8df5ef180f6364759a6f00f7aadda4fbbac86cdee37480826a6ff9f3574ce"
replacement in Cargo.lock at line 6086
[2.726201]→[3.57333:57348](∅→∅),
[3.57348]→[19.13972:13984](∅→∅) − "rand 0.9.2",
− "socket2",
+ "rand 0.10.1",
+ "socket2 0.6.4",
replacement in Cargo.lock at line 6090
[2.726253]→[2.726253:726264](∅→∅) replacement in Cargo.lock at line 6105
[2.726538]→[2.726538:726557](∅→∅) replacement in Cargo.lock at line 6107
[2.726622]→[2.726622:726700](∅→∅) − checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
+ checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
replacement in Cargo.lock at line 6116
[10.50249]→[10.50249:50268](∅→∅) replacement in Cargo.lock at line 6118
[10.50333]→[10.50333:50411](∅→∅) − checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857"
+ checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c"
replacement in Cargo.lock at line 6128
[2.726800]→[3.57466:57485](∅→∅) replacement in Cargo.lock at line 6130
[2.726884]→[3.57486:57564](∅→∅) − checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
+ checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
replacement in Cargo.lock at line 6154
[2.727301]→[3.57565:57583](∅→∅) + version = "0.9.12+spec-1.1.0"
replacement in Cargo.lock at line 6156
[2.727385]→[3.57584:57662](∅→∅) − checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
+ checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
replacement in Cargo.lock at line 6160
[3.57691]→[10.50672:50720](∅→∅) − "serde_spanned 1.0.3",
− "toml_datetime 0.7.3",
+ "serde_spanned 1.1.1",
+ "toml_datetime 0.7.5+spec-1.1.0",
replacement in Cargo.lock at line 6164
[3.57724]→[3.57724:57735](∅→∅) replacement in Cargo.lock at line 6178
[10.50948]→[3.57736:57754](∅→∅),
[2.727578]→[3.57736:57754](∅→∅) + version = "0.7.5+spec-1.1.0"
replacement in Cargo.lock at line 6180
[2.727661]→[3.57755:57833](∅→∅) − checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
+ checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
replacement in Cargo.lock at line 6196
[10.51235]→[10.51235:51246](∅→∅) replacement in Cargo.lock at line 6201
[3.57871]→[3.57871:57889](∅→∅) + version = "1.1.2+spec-1.1.0"
replacement in Cargo.lock at line 6203
[2.727885]→[3.57890:57968](∅→∅) − checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
+ checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
replacement in Cargo.lock at line 6205
[2.728039]→[2.728039:728050](∅→∅) replacement in Cargo.lock at line 6216
[3.57990]→[3.57990:58008](∅→∅) + version = "1.1.1+spec-1.1.0"
replacement in Cargo.lock at line 6218
[2.728164]→[3.58009:58087](∅→∅) − checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
+ checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
replacement in Cargo.lock at line 6222
[2.728406]→[2.728406:728424](∅→∅) replacement in Cargo.lock at line 6224
[2.728489]→[2.728489:728567](∅→∅) − checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
+ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
replacement in Cargo.lock at line 6229
[2.728639]→[2.728639:728656](∅→∅) replacement in Cargo.lock at line 6238
[2.728747]→[3.58088:58106](∅→∅) replacement in Cargo.lock at line 6240
[2.728830]→[3.58107:58185](∅→∅) − checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456"
+ checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840"
replacement in Cargo.lock at line 6243
[2.728947]→[3.58186:58206](∅→∅) replacement in Cargo.lock at line 6247
[3.58224]→[19.13985:14008](∅→∅),
[19.14008]→[3.58240:58255](∅→∅),
[2.729028]→[3.58240:58255](∅→∅) − "http",
− "http-body",
− "iri-string",
+ "http 1.4.1",
+ "http-body 1.0.1",
+ "http-body-util",
+ "http-range-header",
+ "httpdate",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
edit in Cargo.lock at line 6258
[2.729074]→[3.58256:58266](∅→∅) replacement in Cargo.lock at line 6277
[2.729544]→[2.729544:729563](∅→∅) replacement in Cargo.lock at line 6279
[2.729628]→[2.729628:729706](∅→∅) − checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
+ checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
replacement in Cargo.lock at line 6289
[2.729835]→[3.58267:58286](∅→∅) replacement in Cargo.lock at line 6291
[2.729919]→[3.58287:58365](∅→∅) − checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
+ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
replacement in Cargo.lock at line 6295
[2.730040]→[3.58366:58382](∅→∅) replacement in Cargo.lock at line 6300
[2.730092]→[3.58383:58402](∅→∅) replacement in Cargo.lock at line 6302
[2.730176]→[3.58403:58481](∅→∅) − checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
+ checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
replacement in Cargo.lock at line 6331
[2.730840]→[3.58482:58501](∅→∅) replacement in Cargo.lock at line 6333
[2.730924]→[3.58502:58580](∅→∅) − checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5"
+ checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
replacement in Cargo.lock at line 6355
[10.51491]→[10.51491:51510](∅→∅) replacement in Cargo.lock at line 6357
[10.51575]→[10.51575:51653](∅→∅) − checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442"
+ checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
replacement in Cargo.lock at line 6361
[10.51698]→[19.14009:14018](∅→∅) replacement in Cargo.lock at line 6364
[10.51734]→[10.51734:51749](∅→∅) replacement in Cargo.lock at line 6366
[10.51758]→[10.51758:51789](∅→∅) − "thiserror 2.0.17",
− "utf-8",
replacement in Cargo.lock at line 6376
[2.731580]→[2.731580:731595](∅→∅) replacement in Cargo.lock at line 6382
[2.731649]→[3.58601:58620](∅→∅) + version = "1.20.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
+
+ [[package]]
+ name = "uncased"
+ version = "0.9.10"
replacement in Cargo.lock at line 6390
[2.731733]→[3.58621:58699](∅→∅) − checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+ checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697"
+ dependencies = [
+ "version_check",
+ ]
replacement in Cargo.lock at line 6397
[2.731841]→[2.731841:731859](∅→∅) replacement in Cargo.lock at line 6399
[2.731924]→[2.731924:732002](∅→∅) − checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
+ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
replacement in Cargo.lock at line 6415
[2.732235]→[3.58901:58920](∅→∅) replacement in Cargo.lock at line 6417
[3.58985]→[3.58985:59063](∅→∅) − checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
replacement in Cargo.lock at line 6442
[2.732879]→[2.732879:732898](∅→∅) replacement in Cargo.lock at line 6444
[2.732963]→[2.732963:733041](∅→∅) − checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
+ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
replacement in Cargo.lock at line 6464
[2.733454]→[2.733454:733472](∅→∅) edit in Cargo.lock at line 6473
[2.733678]→[3.59496:59509](∅→∅),
[3.59509]→[3.59509:59684](∅→∅) −
− [[package]]
− name = "unty"
− version = "0.0.4"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae"
replacement in Cargo.lock at line 6476
[2.733704]→[3.59685:59703](∅→∅) replacement in Cargo.lock at line 6478
[2.733787]→[3.59704:59782](∅→∅) − checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
+ checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
edit in Cargo.lock at line 6484
replacement in Cargo.lock at line 6507
[2.734740]→[4.11756:11775](∅→∅) replacement in Cargo.lock at line 6509
[2.734824]→[4.11776:11854](∅→∅) − checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb"
+ checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7"
replacement in Cargo.lock at line 6511
[2.734919]→[4.11855:11875](∅→∅) edit in Cargo.lock at line 6524
+ name = "validator"
+ version = "0.20.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "43fb22e1a008ece370ce08a3e9e4447a910e92621bb49b85d6e48a45397e7cfa"
+ dependencies = [
+ "idna",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "url",
+ ]
+
+ [[package]]
edit in Cargo.lock at line 6557
[3.59945]→[3.59945:60123](∅→∅),
[3.60123]→[2.735727:735740](∅→∅),
[2.735727]→[2.735727:735740](∅→∅) − name = "virtue"
− version = "0.0.18"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1"
−
− [[package]]
edit in Cargo.lock at line 6598
+
+ [[package]]
+ name = "wasi"
+ version = "0.14.7+wasi-0.2.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
+ dependencies = [
+ "wasip2",
+ ]
replacement in Cargo.lock at line 6610
[3.60452]→[3.60452:60481](∅→∅) − version = "1.0.1+wasi-0.2.4"
+ version = "1.0.3+wasi-0.2.9"
replacement in Cargo.lock at line 6612
[2.736919]→[3.60482:60560](∅→∅) − checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
+ checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
replacement in Cargo.lock at line 6614
[2.737014]→[4.11892:11915](∅→∅) edit in Cargo.lock at line 6633
+ name = "wasite"
+ version = "1.0.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42"
+ dependencies = [
+ "wasi 0.14.7+wasi-0.2.4",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 6643
[2.737260]→[3.60578:60598](∅→∅) replacement in Cargo.lock at line 6645
[2.737345]→[3.60599:60677](∅→∅) − checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
+ checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
replacement in Cargo.lock at line 6656
[2.737859]→[3.60678:60697](∅→∅) replacement in Cargo.lock at line 6658
[2.737943]→[3.60698:60776](∅→∅) − checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
+ checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f"
edit in Cargo.lock at line 6660
[2.738038]→[2.738038:738049](∅→∅) edit in Cargo.lock at line 6661
[2.738060]→[2.738060:738074](∅→∅) edit in Cargo.lock at line 6662
[2.738091]→[2.738091:738103](∅→∅) replacement in Cargo.lock at line 6666
[2.738146]→[3.60777:60797](∅→∅) replacement in Cargo.lock at line 6668
[2.738231]→[3.60798:60876](∅→∅) − checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
+ checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
replacement in Cargo.lock at line 6676
[2.738418]→[3.60877:60897](∅→∅) replacement in Cargo.lock at line 6678
[2.738503]→[3.60898:60976](∅→∅) − checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
+ checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
replacement in Cargo.lock at line 6683
[2.738624]→[3.60990:61006](∅→∅) replacement in Cargo.lock at line 6689
[2.738732]→[3.61007:61027](∅→∅) replacement in Cargo.lock at line 6691
[2.738817]→[3.61028:61106](∅→∅) − checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
+ checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
edit in Cargo.lock at line 6719
+ name = "wasm-streams"
+ version = "0.4.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
+ dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ ]
+
+ [[package]]
replacement in Cargo.lock at line 6737
[4.12908]→[4.12908:12928](∅→∅) replacement in Cargo.lock at line 6745
[2.738962]→[3.61107:61126](∅→∅) replacement in Cargo.lock at line 6747
[2.739046]→[3.61127:61205](∅→∅) − checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
+ checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436"
replacement in Cargo.lock at line 6777
[2.739456]→[3.61499:61517](∅→∅) replacement in Cargo.lock at line 6779
[2.739539]→[3.61518:61596](∅→∅) − checksum = "f77a2892ec44032e6c48dad9aad1b05fada09c346ada11d8d32db119b4b4f205"
+ checksum = "6475c0bbd1a3f04afaa3e98880408c5be61680c5e6bd3c6f8c250990d5d3e18e"
replacement in Cargo.lock at line 6791
[2.739735]→[3.61614:61632](∅→∅) replacement in Cargo.lock at line 6793
[2.739818]→[3.61633:61711](∅→∅) − checksum = "eb7c3a2f9c8bddd524e47bbd427bcf3a28aa074de55d74470b42a91a41937b8e"
+ checksum = "6c548915e0e92ee946bbf2aecf01ea21bef53d974b0793cc6732ba81a03fc422"
replacement in Cargo.lock at line 6805
[2.740036]→[3.61712:61730](∅→∅) replacement in Cargo.lock at line 6807
[2.740119]→[3.61731:61809](∅→∅) − checksum = "19f1d80f3146382529fe70a3ab5d0feb2413a015204ed7843f9377cd39357fc4"
+ checksum = "296d2d501feb715d80b8e186fb88bab1073bca17f460303a1013d17b673bea6a"
replacement in Cargo.lock at line 6816
[3.61841]→[2.740313:740350](∅→∅),
[2.740313]→[2.740313:740350](∅→∅) − "rand 0.8.5",
− "rand_chacha 0.3.1",
+ "rand 0.9.4",
+ "rand_chacha 0.9.0",
replacement in Cargo.lock at line 6832
[2.740550]→[3.61842:61860](∅→∅) replacement in Cargo.lock at line 6834
[2.740633]→[3.61861:61939](∅→∅) − checksum = "9e786894f89facb9aaf1c5f6559670236723c98382e045521c76f3d5ca5047bd"
+ checksum = "c37393beac9c1ed1ca6dbb30b1e01783fb316ab3a45d90ecd48c99052dd7ef1e"
replacement in Cargo.lock at line 6844
[2.740816]→[2.740816:740851](∅→∅) − name = "webpki"
− version = "0.22.4"
+ name = "whoami"
+ version = "1.6.1"
replacement in Cargo.lock at line 6847
[2.740916]→[2.740916:740994](∅→∅) − checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53"
+ checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d"
replacement in Cargo.lock at line 6849
[2.741011]→[2.741011:741034](∅→∅) + "libredox",
+ "wasite 0.1.0",
+ "web-sys",
replacement in Cargo.lock at line 6856
[2.741318]→[3.61940:61958](∅→∅) replacement in Cargo.lock at line 6858
[2.741401]→[3.61959:62037](∅→∅) − checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d"
+ checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d"
edit in Cargo.lock at line 6860
replacement in Cargo.lock at line 6862
[3.62051]→[2.741520:741531](∅→∅),
[2.741520]→[2.741520:741531](∅→∅) + "objc2-system-configuration",
+ "wasite 1.0.2",
replacement in Cargo.lock at line 6919
[3.62621]→[3.62621:62637](∅→∅) replacement in Cargo.lock at line 6930
[3.62883]→[3.62883:62899](∅→∅) edit in Cargo.lock at line 6938
[3.63097]→[2.742713:742752](∅→∅),
[2.742713]→[2.742713:742752](∅→∅),
[2.742752]→[3.63098:63116](∅→∅),
[3.63116]→[2.742770:742835](∅→∅),
[2.742770]→[2.742770:742835](∅→∅),
[2.742835]→[3.63117:63195](∅→∅),
[3.63195]→[2.742913:742930](∅→∅),
[2.742913]→[2.742913:742930](∅→∅),
[2.742930]→[3.63196:63213](∅→∅),
[3.63213]→[2.742930:742969](∅→∅),
[2.742930]→[2.742930:742969](∅→∅),
[2.742989]→[2.742989:742991](∅→∅) −
− [[package]]
− name = "windows-registry"
− version = "0.6.1"
− source = "registry+https://github.com/rust-lang/crates.io-index"
− checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
− dependencies = [
− "windows-link",
− "windows-result",
− "windows-strings",
− ]
edit in Cargo.lock at line 6971
+ dependencies = [
+ "windows-targets 0.52.6",
+ ]
+
+ [[package]]
+ name = "windows-sys"
+ version = "0.59.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
replacement in Cargo.lock at line 7190
[3.66154]→[3.66154:66173](∅→∅) replacement in Cargo.lock at line 7192
[2.746345]→[3.66174:66252](∅→∅) − checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
+ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
replacement in Cargo.lock at line 7198
[2.746474]→[3.66253:66293](∅→∅) − name = "wit-bindgen"
− version = "0.46.0"
+ name = "winnow"
+ version = "1.0.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
+
+ [[package]]
+ name = "winreg"
+ version = "0.50.0"
replacement in Cargo.lock at line 7207
[2.746574]→[3.66294:66372](∅→∅) − checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
+ checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+ dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+ ]
edit in Cargo.lock at line 7223
+ name = "wit-bindgen"
+ version = "0.57.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
+
+ [[package]]
replacement in Cargo.lock at line 7249
[4.13751]→[4.13751:13767](∅→∅) replacement in Cargo.lock at line 7265
[4.14104]→[4.14104:14120](∅→∅) replacement in Cargo.lock at line 7277
[4.14391]→[4.14391:14411](∅→∅) replacement in Cargo.lock at line 7309
[2.746684]→[3.66373:66391](∅→∅) replacement in Cargo.lock at line 7311
[2.746767]→[3.66392:66470](∅→∅) − checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
+ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
replacement in Cargo.lock at line 7346
[2.747626]→[10.53942:53959](∅→∅) replacement in Cargo.lock at line 7370
[2.748342]→[3.66683:66701](∅→∅) replacement in Cargo.lock at line 7372
[2.748425]→[3.66702:66780](∅→∅) − checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
+ checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
replacement in Cargo.lock at line 7381
[2.748618]→[3.66781:66799](∅→∅) replacement in Cargo.lock at line 7383
[2.748701]→[3.66800:66878](∅→∅) − checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
+ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
replacement in Cargo.lock at line 7387
[2.748822]→[3.66879:66895](∅→∅) replacement in Cargo.lock at line 7393
[2.748887]→[3.66896:66915](∅→∅) replacement in Cargo.lock at line 7395
[2.748971]→[3.66916:66994](∅→∅) − checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c"
+ checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1"
replacement in Cargo.lock at line 7402
[2.749386]→[3.67016:67035](∅→∅) replacement in Cargo.lock at line 7404
[2.749730]→[3.67036:67114](∅→∅) − checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5"
+ checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639"
replacement in Cargo.lock at line 7408
[2.749851]→[3.67115:67131](∅→∅) replacement in Cargo.lock at line 7413
[2.749899]→[3.67132:67150](∅→∅) replacement in Cargo.lock at line 7415
[2.749982]→[3.67151:67229](∅→∅) − checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
+ checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
replacement in Cargo.lock at line 7422
[2.750137]→[3.67230:67248](∅→∅) replacement in Cargo.lock at line 7424
[2.750220]→[3.67249:67327](∅→∅) − checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
+ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
replacement in Cargo.lock at line 7428
[2.750341]→[3.67328:67344](∅→∅) replacement in Cargo.lock at line 7443
[2.750641]→[2.750641:750659](∅→∅) replacement in Cargo.lock at line 7445
[2.750724]→[2.750724:750802](∅→∅) − checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
+ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e"
replacement in Cargo.lock at line 7449
[2.750845]→[3.67443:67459](∅→∅) replacement in Cargo.lock at line 7454
[3.67492]→[3.67492:67510](∅→∅) replacement in Cargo.lock at line 7456
[3.67575]→[3.67575:67653](∅→∅) − checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
+ checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
replacement in Cargo.lock at line 7465
[2.750892]→[3.67708:67727](∅→∅) replacement in Cargo.lock at line 7467
[2.750976]→[3.67728:67806](∅→∅) − checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
+ checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
replacement in Cargo.lock at line 7476
[2.751151]→[3.67807:67826](∅→∅) replacement in Cargo.lock at line 7478
[2.751235]→[3.67827:67905](∅→∅) − checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
+ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
replacement in Cargo.lock at line 7482
[2.751356]→[3.67906:67922](∅→∅) edit in Cargo.lock at line 7484
+
+ [[package]]
+ name = "zmij"
+ version = "1.0.21"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
replacement in Cargo.lock at line 7515
[2.752035]→[3.68120:68138](∅→∅) edit in Cargo.lock at line 7534
[2.659440]→[2.659440:659475](∅→∅) − "tokio-rustls",
− "tower-service",
resolve order conflict in Cargo.lock at line 7534