This is probably going to be the single most useful stand-alone crate for anyone interacting with a pijul repository
CRQRKNFZMUM3LJQU2CG63JYLFI7WGP6HWQTTBVSK6YQKBK37LLBAC
WFBYDQB4WFU4EHL4EOQHZT5MPAKOJU4ITJJ4XW5TKG2552PCYQDQC
7P7G4J5ZT4S5BP6VAN226Z7CRZXEEVO5YHJ6IFMW27NHBR5TDJRAC
BPCAJCLTVK2GVWYURWJTPQ6XA34JUJZNZHG6ONX4ARM3QPJJ6UPQC
YK7EBTF6LAPMYEHPPOUKHO3IQTA4MTKOEI77I4UWXTM4T475QKRAC
QY4E6CLE6MFO6GGT5XVCPMGJQK22W4FZNLWRZKVMYYPOMAAZUX4AC
STOFOQI47HS22EDKDFUFF4Z5NNZ6MXJFXETEZSITTOD7OYTETB2AC
74AO75NC2QLA3CIKOSODATGAAKIXHOJ6Q4PTLMVA6UNMISOSKT4QC
ENWJBQGQUL3KLYPVGYP2ZSDB5ZUXLTY4W6NCHUA6VTHRRNPRUDHAC
SXEYMYF7P4RZMZ46WPL4IZUTSQ2ATBWYZX7QNVMS3SGOYXYOHAGQC
X243Z3Y54ULINQMMRIKLHRV5T237B7VUOAHVJ7DMPOQ6A6GQXY2AC
ZSFJT4SFIAS7WBODRZOFKKG4SVYBC5PC6XY75WYN7CCQ3SMV7IUQC
L4JXJHWXYNCL4QGJXNKKTOKKTAXKKXBJUUY7HFZGEUZ5A2V5H34QC
Q45BC4OC3NSRLJANNOBHENZCFSF7SG2MMYMZR4247CPZXOJ5VSSAC
76PCXGML77EZWTRI5E6KHLVRAFTJ2AB5YRN5EKOYNAPKTWY2KCGAC
MEK57BADGFCCZDNPUPUZGOJGNNS5R7UWRWCNJELKONGKOLLAQDDAC
A3RM526Y7LUXNYW4TL56YKQ5GVOK2R5D7JJVTSQ6TT5MEXIR6YAAC
H4AU6QRPRDRFW3V7NN5CJ6DHLEUBYGNLRZ5GYV6ULBGRMOPCJQXQC
TYAKEAJLABCZQDYAI4YBGIJNQ7HJS4DVULEGPCZOGJPJUYYNR6TAC
DAD6VPVMOCIO7MRJLYCBBV4W4YTBM2O3LLNMHWSZ65TBOY5QCXZAC
4KJ45IJLTIE35KQZUSFMFS67RNENG4P2FZMKMULJLGGYMKJUVRSQC
4OJWMSOWWNT5N4W4FDMKBZB5UARCLGV3SRZVKGR4EFAYFUMUHM7AC
LZOGKBJXRQJKXHYNNENJFGNLP5SHIXGSV6HDB7UVOP7FSA5EUNCQC
DO2Y5TY5JQISUHCVNPI2FXO7WWZVJQ3LGPWF4DNADMGZRIO6PT2QC
3FTEGCMRMELPIJRUKNKRTA5TDBXEOTOOVRUTZJ7DWD27ZTKKMV3QC
QL6K2ZM35B3NIXEMMCJWUSFXOBQHAGXRDMO7ID5DCKTJH4QJVY7QC
DX2FO4HZDTTBU436YRPQW3MIIVFB3ZFSZ3SI5GYLTIWCIGRTQ6DAC
2D7P2VKJASU7QDQZHGCLBIT6G2V5WUFYLWTCEVVEI2EZHGM6XYRAC
IVLLXQ5ZWZDKHO4TNQG3TPXN34H6Y2WXPAGSO4PWCYNSKUZWOEJQC
CCLLB7OIFNFYJZTG3UCI7536TOCWSCSXR67VELSB466R24WLJSDAC
DWSAYGVEOR4D2EKIICEZUWCRGJTUXQQLOUWMYIFV7XN62K44F4FAC
I24UEJQLCH2SOXA4UHIYWTRDCHSOPU7AFTRUOTX7HZIAV4AZKYEQC
5DVRL6MFXQOCPOZMYSKBERMRRVUTYRL2SRGRTU2MH4IEOFCDKM3QC
OU6JOR3CDZTH2H3NTGMV3WDIAWPD3VEJI7JRY3VJ7LPDR3QOA52QC
NAUECZW353R5RHT4GGQJIEZPA5EYRGQYTSP7IJNBJS3CXBSTNJDQC
UAXGGNAZFUQX2XTVNITFZG54E2W5V4RKJUGEKN7WD2HDLVT5QG6QC
U6TQX5Z2NF6GX3SRLUBQGCZ7WAXNYMWWZ2YMADUSG4EWVKNV2BIAC
VWJ2JL63I5OYZ2HS3N4EKM5TW7HRAF5U3OAHDQIVZINIO73IAE7AC
BD5PC25AB5MKVIYDFSDGRZ4YGX4PKW4SMZ3YAYAPNA5HLDVJUR3QC
I52XSRUH5RVHQBFWVMAQPTUSPAJ4KNVID2RMI3UGCVKFLYUO6WZAC
2K7JLB4Z7BS5VFNWD4DO3MKYU7VNPA5MTVHVSDI3FQZ5ICM6XM6QC
SGXOEWHUET7RVS5HANSYE7QRQAG56NIKTC56MLPZ5XBCXODEWUXQC
EJ7TFFOWLM5EXYX57NJZZX3NLPBLLMRX7CGJYC75DJZ5LYXOQPJAC
[package]
name = "pijul-repository"
description = "Functionality for interacting with a pijul repository"
version = "0.0.1"
authors = ["Pierre-Étienne Meunier <pe@pijul.org>"]
edition = "2018"
repository = "https://nest.pijul.com/pijul/pijul"
license = "GPL-2.0"
include = [ "Cargo.toml", "src" ]
[dependencies]
anyhow = { version = "1.0.71", features = ["backtrace"] }
log = "0.4.19"
libpijul = { path = "../libpijul" }
pijul-config = { path = "../pijul-config" }
pijul-term = { path = "../pijul-term" }
rlimit = "0.9.1"
toml = { version = "0.7.4", features = ["preserve_order"] }
impl Repository {
pub async fn remote(
&self,
self_path: Option<&Path>,
// User name in case it isn't provided in the `name` argument already.
user: Option<&str>,
name: &str,
channel: &str,
no_cert_check: bool,
with_path: bool,
) -> Result<RemoteRepo, anyhow::Error> {
if let Some(name) = self.config.remotes.iter().find(|e| e.name() == name) {
name.to_remote(channel, no_cert_check, with_path).await
} else {
unknown_remote(self_path, user, name, channel, no_cert_check, with_path).await
}
pub async fn remote_repository(
remote: &Repository,
self_path: Option<&Path>,
// User name in case it isn't provided in the `name` argument already.
user: Option<&str>,
name: &str,
channel: &str,
no_cert_check: bool,
with_path: bool,
) -> Result<RemoteRepo, anyhow::Error> {
if let Some(name) = remote.config.remotes.iter().find(|e| e.name() == name) {
name.to_remote(channel, no_cert_check, with_path).await
} else {
unknown_remote(self_path, user, name, channel, no_cert_check, with_path).await
use crate::remote::{PushDelta, RemoteDelta, RemoteRepo, CS};
use crate::repository::Repository;
use crate::remote::{remote_repository, PushDelta, RemoteDelta, RemoteRepo, CS};
use pijul_repository::Repository;
let mut remote = repo
.remote(
Some(&repo.path),
None,
&remote_name,
remote_channel,
self.no_cert_check,
true,
)
.await?;
let mut remote = remote_repository(
&repo,
Some(&repo.path),
None,
&remote_name,
remote_channel,
self.no_cert_check,
true,
)
.await?;
let mut remote = repo
.remote(
Some(&repo.path),
None,
&remote_name,
from_channel,
self.no_cert_check,
true,
)
.await?;
let mut remote = remote_repository(
&repo,
Some(&repo.path),
None,
&remote_name,
from_channel,
self.no_cert_check,
true,
)
.await?;
OutputFormat::Json => {
serde_json::to_writer_pretty(&mut stdout, &log_iter)?
OutputFormat::Json => serde_json::to_writer_pretty(&mut stdout, &log_iter)?,
OutputFormat::Plaintext => {
log_iter.for_each(|entry| match write!(&mut stdout, "{}", entry) {
Ok(_) => Ok(()),
Err(e) if e.kind() == std::io::ErrorKind::BrokenPipe => Ok(()),
Err(e) => Err(e),
})?