feat: configure personal pull request review indicators

This commit is contained in:
Valdemar Lorenzen
2026-10-21 11:14:50 +02:00
parent bd71d463a4
commit 0202644efa
18 changed files with 901 additions and 88 deletions
+25 -5
View File
@@ -101,11 +101,19 @@ pub struct Catalog {
pub entries: Vec<Revision>,
pub notice: Option<String>,
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub enum PullRequestReviewState {
#[default]
None,
Approved,
Requested,
}
#[derive(Debug)]
pub struct PullRequestPage {
pub kind: RepoKind,
pub remote: String,
pub entries: Vec<(Revision, String)>,
pub entries: Vec<(Revision, String, PullRequestReviewState)>,
pub has_more: bool,
}
@@ -572,7 +580,7 @@ pub struct DiffState {
pub catalog: Option<Catalog>,
pub pull_request_remote: Option<String>,
pull_request_categories: [PullRequestCategory; 2],
pull_request_order: BTreeMap<u64, (String, usize)>,
pull_request_order: BTreeMap<u64, (String, usize, PullRequestReviewState)>,
pub(crate) pull_request_retries: [u64; 2],
pub phase: Phase,
pub word_wrap: bool,
@@ -934,16 +942,18 @@ impl DiffState {
entries: Vec::new(),
notice: Some(format!("Pull requests from {}", page.remote)),
});
for (revision, created_at) in page.entries {
for (revision, created_at, review_state) in page.entries {
let RevisionTarget::PullRequest { number, .. } = &revision.target else {
continue;
};
if let Some((date, index)) = self.pull_request_order.get_mut(number) {
if let Some((date, index, state)) = self.pull_request_order.get_mut(number)
{
*date = created_at;
*state = review_state;
catalog.entries[*index] = revision;
} else {
self.pull_request_order
.insert(*number, (created_at, catalog.entries.len()));
.insert(*number, (created_at, catalog.entries.len(), review_state));
catalog.entries.push(revision);
}
}
@@ -1222,6 +1232,16 @@ impl DiffState {
}
}
pub(crate) fn pull_request_review_state(&self, revision: &Revision) -> PullRequestReviewState {
if let RevisionTarget::PullRequest { number, .. } = revision.target {
self.pull_request_order
.get(&number)
.map_or(PullRequestReviewState::None, |entry| entry.2)
} else {
PullRequestReviewState::None
}
}
pub(crate) fn pull_request_partial(&self) -> bool {
self.pull_request_remote.is_some()
&& self