sley_ref_filter/
context.rs1use super::contents::{ForEachRefContents, ForEachRefPeeledObject};
4use super::tracking::{ForEachRefPush, ForEachRefUpstream};
5use super::{ForEachRefQuoteMode, ForEachRefTrack, shorten_unambiguous_ref};
6use sley_core::{ObjectFormat, ObjectId};
7use sley_odb::FileObjectDatabase;
8use sley_object::ObjectType;
9use std::collections::HashSet;
10use std::path::Path;
11
12pub trait ForEachRefSignatureVerification {
16 fn bare_output(&self) -> &[u8];
18 fn grade_byte(&self) -> u8;
20 fn key(&self) -> &str;
21 fn signer(&self) -> &str;
22 fn fingerprint(&self) -> &str;
23 fn primary_fingerprint(&self) -> &str;
24 fn trust(&self) -> &str;
25}
26
27pub trait ForEachRefMailmapRewrite {
30 fn rewrite_identity(&self, identity: &[u8]) -> (Vec<u8>, Vec<u8>);
31}
32
33pub struct ForEachRefFormatContext<'a> {
34 pub git_dir: &'a Path,
35 pub db: &'a FileObjectDatabase,
36 pub format: ObjectFormat,
37 pub refname: &'a str,
38 pub oid: &'a ObjectId,
39 pub deltabase: &'a ObjectId,
40 pub object_type: ObjectType,
41 pub object_body: &'a [u8],
42 pub object_size: usize,
43 pub object_disk_size: Option<u64>,
44 pub color: bool,
45 pub quote: ForEachRefQuoteMode,
46 pub objectname_abbrev: Option<usize>,
47 pub objectname_candidates: &'a [ObjectId],
48 pub worktree_path: Option<&'a str>,
49 pub is_head: bool,
50 pub symref: Option<&'a str>,
51 pub upstream: Option<ForEachRefUpstream>,
52 pub push: Option<ForEachRefPush>,
53 pub upstream_track: Option<ForEachRefTrack>,
54 pub push_track: Option<ForEachRefTrack>,
55 pub contents: Option<ForEachRefContents<'a>>,
56 pub peeled_object: Option<ForEachRefPeeledObject<'a>>,
57 pub signature: Option<&'a dyn ForEachRefSignatureVerification>,
59 pub peeled_signature: Option<&'a dyn ForEachRefSignatureVerification>,
60 pub mailmap: &'a dyn ForEachRefMailmapRewrite,
61 pub ref_names: &'a HashSet<String>,
64 pub warn_ambiguous_refs: bool,
65}
66
67impl ForEachRefFormatContext<'_> {
68 pub fn shorten_ref(&self, refname: &str) -> String {
71 shorten_unambiguous_ref(refname, self.warn_ambiguous_refs, |candidate| {
72 self.ref_names.contains(candidate)
73 })
74 }
75}