Changelist: proper navigation + identicons

pmeunier
Mar 5, 2026, 10:31 AM
HSHYU5QM3HVRQUXY2WN4UK3CHN3RKJXU5AJVZU3SWFXYEJOANIQAC

Dependencies

Change contents

  • edit in ui/src/routes/[user]/[repo]/change/+page.svelte at line 55
    [2.96968]
    [2.96968]
    <a href="/{data.owner}/{data.repo}/change/{hash.hash}"
    ><code class="hash">{hash.hash}</code></a>
    </div>
    </div>
    {:else if hash.authors[0]?.login}
    <div class="size-12 my-auto">
    <img class="profile-picture" alt="" src="/identicon/{hash.authors[0].login}/small" />
    </div>
    <div>
    <a class="link" href="/{data.owner}/{data.repo}/change/{hash.hash}">{hash.message}</a>
    <div class="break-all">
    Created&nbsp;by&nbsp;<a class="link" href="/{hash.authors[0].login}"
    >{hash.authors[0].login}</a
    >&nbsp;{timefmt(hash.timestamp)}
    </div>
    <div class="break-all">
  • replacement in ui/src/routes/[user]/[repo]/change/+page.svelte at line 83
    [2.97461][3.1807:2070]()
    Created&nbsp;by&nbsp;{#if hash.authors[0].login}<a
    class="link"
    href="/{hash.authors[0].login}">{hash.authors[0].login}</a
    >{:else}{hash.authors[0].key}{/if}&nbsp;{timefmt(hash.timestamp)}
    [2.97461]
    [2.97611]
    Created&nbsp;by&nbsp;{hash.authors[0].key}&nbsp;{timefmt(hash.timestamp)}
  • replacement in ui/src/routes/[user]/[repo]/change/+page.svelte at line 106
    [2.98413][2.98413:98573]()
    {#if data.range && data.hashes[0].n < data.range[1]}
    <a class="btn btn-outline-secondary mx-2" href="?to={data.hashes[0].n + 1}">Previous</a>
    [2.98413]
    [2.98573]
    {#if data.hashes[0].n < data.last}
    <a class="btn btn-outline-secondary mx-2" href="?from={data.hashes[0].n + 1}">Newer</a>
  • replacement in ui/src/routes/[user]/[repo]/change/+page.svelte at line 110
    [2.98643][2.98643:98740]()
    <a class="btn btn-outline-secondary mx-2" href="?from={data.hashes[0].n + 1}">Next</a>
    [2.98643]
    [2.98740]
    <a
    class="btn btn-outline-secondary mx-2"
    href="?to={data.hashes[data.hashes.length - 1].n - 1}">Older</a>
  • edit in api/src/change/mod.rs at line 1
    [2.548943][2.548944:548974]()
    use crate::permissions::Perm;
  • edit in api/src/change/mod.rs at line 2
    [2.548993]
    [2.548993]
    use crate::permissions::Perm;
  • edit in api/src/change/mod.rs at line 4
    [2.549005]
    [2.549005]
    Form, Router,
  • edit in api/src/change/mod.rs at line 8
    [2.549101][2.549101:549119]()
    Form, Router,
  • edit in api/src/change/mod.rs at line 112
    [2.552179]
    [2.552179]
    debug!(
    "bs58 {:?}",
    data_encoding::HEXLOWER.encode(&bs58::decode(&key).into_vec().unwrap())
    );
  • replacement in api/src/change/mod.rs at line 156
    [2.553288][2.553288:553414]()
    let (id, _) = crate::repository::repository_id(&mut db, &repo.owner, &repo.repo, Some(uid), Perm::APPLY)
    .await?;
    [2.553288]
    [2.553414]
    let (id, _) =
    crate::repository::repository_id(&mut db, &repo.owner, &repo.repo, Some(uid), Perm::APPLY)
    .await?;
  • edit in api/src/change/list.rs at line 1
    [2.554127]
    [2.554128]
    use crate::Config;
  • edit in api/src/change/list.rs at line 4
    [2.554198][2.554198:554217]()
    use crate::Config;
  • replacement in api/src/change/list.rs at line 5
    [2.554229][2.554229:554248]()
    debug_handler,
    [2.554229]
    [2.554248]
    Json, debug_handler,
  • edit in api/src/change/list.rs at line 8
    [2.554317][2.554317:554327]()
    Json,
  • edit in api/src/change/list.rs at line 12
    [2.554425]
    [2.554425]
    Base32, ChangeId, ChannelTxnT, DepsTxnT, GraphTxnT, TxnT, TxnTExt,
  • edit in api/src/change/list.rs at line 15
    [2.554489][2.554489:554560]()
    Base32, ChangeId, ChannelTxnT, DepsTxnT, GraphTxnT, TxnT, TxnTExt,
  • edit in api/src/change/list.rs at line 24
    [2.554697]
    [2.554697]
    last: u64,
  • replacement in api/src/change/list.rs at line 48
    [2.555169][2.555169:555265]()
    Option<tokio::task::JoinHandle<libpijul::change::ChangeHeader_<libpijul::change::Author>>>,
    [2.555169]
    [2.555265]
    Option<tokio::task::JoinHandle<libpijul::change::ChangeHeader_<libpijul::change::Author>>>,
  • edit in api/src/change/list.rs at line 90
    [2.556473]
    [2.556473]
    let from = if let Some(from) = page.from {
    from + count
    } else if let Some(to) = page.to {
    to
    } else {
    0
    };
  • replacement in api/src/change/list.rs at line 98
    [2.556517][2.556517:556693]()
    let mut hashes = list_changes(
    &repo_locks,
    id,
    &channel,
    &req_paths,
    reverse,
    page.from,
    count,
    )
    .await?;
    [2.556517]
    [2.556693]
    let (last, mut hashes) =
    list_changes(&repo_locks, id, &channel, &req_paths, reverse, from, count).await?;
  • edit in api/src/change/list.rs at line 112
    [2.557048][2.557048:557049]()
  • edit in api/src/change/list.rs at line 117
    [2.557178]
    [2.557178]
    last,
  • replacement in api/src/change/list.rs at line 145
    [2.557945][2.557945:557968]()
    from: Option<u64>,
    [2.557945]
    [2.557968]
    from: u64,
  • replacement in api/src/change/list.rs at line 147
    [2.557984][2.557984:558025]()
    ) -> Result<Vec<Change>, crate::Error> {
    [2.557984]
    [2.558025]
    ) -> Result<(u64, Vec<Change>), crate::Error> {
  • replacement in api/src/change/list.rs at line 158
    [2.558405][2.558405:558427]()
    return Ok(v);
    [2.558405]
    [2.558427]
    return Ok((0, v));
  • replacement in api/src/change/list.rs at line 173
    [2.558972][2.558972:559019]()
    pos: u64::from_le(p.pos.0 .0),
    [2.558972]
    [2.559019]
    pos: u64::from_le(p.pos.0.0),
  • replacement in api/src/change/list.rs at line 190
    [2.559528][2.559528:559595]()
    .iter_tags(txn.tags(&*channel.read()), from.unwrap_or(0))?
    [2.559528]
    [2.559595]
    .iter_tags(txn.tags(&*channel.read()), from)?
  • replacement in api/src/change/list.rs at line 194
    [2.559679][2.559679:559718]()
    let mut from_ = from.unwrap_or(0);
    [2.559679]
    [2.559718]
    let mut from_ = from;
  • edit in api/src/change/list.rs at line 197
    [2.559766]
    [2.559766]
    let last = {
    let ch = channel.read();
    if let Some(Ok((n, _))) = txn.reverse_log(&ch, None)?.next() {
    n
    } else {
    0
    }
    };
  • replacement in api/src/change/list.rs at line 208
    [2.559853][2.559853:559879]()
    return Ok(v);
    [2.559853]
    [2.559879]
    return Ok((last, v));
  • replacement in api/src/change/list.rs at line 231
    [2.560532][2.560532:560562]()
    return Ok(v);
    [2.560532]
    [2.560562]
    return Ok((last, v));
  • replacement in api/src/change/list.rs at line 257
    [2.561225][2.561225:561255]()
    return Ok(v);
    [2.561225]
    [2.561255]
    return Ok((last, v));
  • replacement in api/src/change/list.rs at line 261
    [2.561285][2.561285:561295]()
    Ok(v)
    [2.561285]
    [2.561295]
    Ok((last, v))