Debugging settings/repos

pmeunier
Mar 5, 2026, 9:57 AM
5VX32NQS4TFOXTKH3UOMTMTCUZ2IGCKO2BFBXRZAEQ3GKTTNX5SQC

Dependencies

Change contents

  • replacement in ui/vite.config.js at line 18
    [2.387][2.387:429]()
    target: 'https://127.0.0.1:8001',
    [2.387]
    [2.429]
    target: 'http://127.0.0.1:8001',
  • replacement in ui/vite.config.js at line 22
    [2.481][2.481:523]()
    target: 'https://127.0.0.1:8001',
    [2.481]
    [2.523]
    target: 'http://127.0.0.1:8001',
  • replacement in ui/vite.config.js at line 26
    [2.572][2.572:614]()
    target: 'https://127.0.0.1:8001',
    [2.572]
    [2.614]
    target: 'http://127.0.0.1:8001',
  • edit in ui/vite.config.js at line 28
    [2.636]
    [2.636]
    },
    '/identicon': {
    target: 'http://127.0.0.1:8001',
    secure: false
  • replacement in ui/src/routes/settings/+page.svelte at line 3
    [2.28742][2.28742:28782]()
    import { enhance } from '$app/forms';
    [2.28742]
    [2.28782]
    import Lock from '../Lock.svelte';
    import Trash from '../Trash.svelte';
  • edit in ui/src/routes/settings/+page.svelte at line 9
    [2.28842][2.28842:28985]()
    async function delRepo(ev: { cancel: () => void }, name: string) {
    if (!window.confirm(`Kill ${name}?`)) {
    ev.cancel();
    }
    }
  • replacement in ui/src/routes/settings/+page.svelte at line 12
    [2.29018][2.29018:29037]()
    <div class="py-5">
    [2.29018]
    [2.29037]
    <div class="py-5 flex">
  • replacement in ui/src/routes/settings/+page.svelte at line 14
    [2.29076][2.29076:29094]()
    <ul class="">
    [2.29076]
    [2.29094]
    <ul class="me-auto flex flex-col gap-3">
  • replacement in ui/src/routes/settings/+page.svelte at line 16
    [2.29140][2.29140:29768]()
    <li class="">
    <form
    method="POST"
    action="/api/settings/repo/delete"
    use:enhance={(ev) => delRepo(ev, repo)}>
    <input type="hidden" name="token" value={data.token} />
    <a id="repo-{repo}" href="/{data.login}/{repo}">{repo}</a>
    {#if data.repos[repo].private}
    <i class="bi bi-lock-fill" style="color:#aaa"></i>
    {/if}
    <button class="mx-3" name="repo" value={repo} aria-label="Delete">
    <span class="icon-[tdesign--delete-1] w-4 h-4 text-error"></span>
    </button>
    </form>
    [2.29140]
    [2.29768]
    <li class="flex w-full justify-between gap-10">
    <a id="repo-{repo}" href="/{data.login}/{repo}">{repo}</a>
    {#if data.repos[repo].private}
    <Lock />
    {/if}
    <button
    class="btn btn-sm mx-3 text-error"
    name="repo"
    value={repo}
    aria-label="Delete"
    onclick={() =>
    (document.getElementById(`del_${repo}`) as HTMLDialogElement).showModal()}>
    <Trash class_="size-5" />
    </button>
    <dialog id="del_{repo}" class="modal">
    <div class="modal-box">
    <h3 class="text-lg font-bold">Delete a repository</h3>
    <p class="py-4">
    If you are serious about deleting <span class="font-mono text-primary">{repo}</span
    >, please type its name here:
    </p>
    <form method="POST" action="/api/settings/repo/delete">
    <input type="hidden" name="token" value={data.token} />
    <input type="text" class="input w-full my-3" name="name" />
    <div class="modal-action">
    <button class="btn">Close</button>
    <button type="submit" class="btn btn-warning">Ok</button>
    </div>
    </form>
    </div>
    </dialog>
  • edit in ui/src/routes/[user]/[repo]/tree/[[pos]]/+page.svelte at line 6
    [2.56107]
    [2.56107]
    import Folder from '../../../../Folder.svelte';
    import File from '../../../../File.svelte';
  • replacement in ui/src/routes/[user]/[repo]/tree/[[pos]]/+page.svelte at line 38
    [2.56889][2.56889:57153](),[2.57153][3.907:998](),[3.998][2.57153:57184](),[2.57153][2.57153:57184](),[2.57334][2.57334:57353]()
    <li class="list-row">
    <div>
    <div class="col text-truncate col-6">
    <a
    class={ch.is_dir ? 'dir' : 'file'}
    href="/{data.owner}/{data.repo}{channel.length ? ':' + channel : ''}/tree/{ch.pos}"
    ><span class="me-3 icon-[tdesign--{ch.is_dir ? 'folder' : 'file'}]"></span
    >{ch.name}</a>
    </div>
    [2.56889]
    [2.57450]
    <li class="list-row p-1">
    <div class="text-truncate">
    <a
    class={ch.is_dir ? 'dir' : 'file'}
    href="/{data.owner}/{data.repo}{channel.length ? ':' + channel : ''}/tree/{ch.pos}">
    {#if ch.is_dir}
    <Folder />
    {:else}
    <File />
    {/if}
    {ch.name}</a>
  • file addition: Trash.svelte (----------)
    [2.2310]
    <script lang="ts">
    const { class_ = 'size-6' } = $props();
    </script>
    <svg
    xmlns="http://www.w3.org/2000/svg"
    fill="none"
    viewBox="0 0 24 24"
    stroke-width="1.5"
    stroke="currentColor"
    class={class_}>
    <path
    stroke-linecap="round"
    stroke-linejoin="round"
    d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
    </svg>
  • file addition: Lock.svelte (----------)
    [2.2310]
    <svg
    xmlns="http://www.w3.org/2000/svg"
    fill="none"
    viewBox="0 0 24 24"
    stroke-width="1.5"
    stroke="currentColor"
    class="size-6">
    <path
    stroke-linecap="round"
    stroke-linejoin="round"
    d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" />
    </svg>
  • file addition: Folder.svelte (----------)
    [2.2310]
    <svg
    xmlns="http://www.w3.org/2000/svg"
    fill="none"
    viewBox="0 0 24 24"
    stroke-width="1.5"
    stroke="currentColor"
    class="size-4 inline me-1">
    <path
    stroke-linecap="round"
    stroke-linejoin="round"
    d="M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z" />
    </svg>
  • file addition: File.svelte (----------)
    [2.2310]
    <svg
    xmlns="http://www.w3.org/2000/svg"
    fill="none"
    viewBox="0 0 24 24"
    stroke-width="1.5"
    stroke="currentColor"
    class="size-4 inline me-1">
    <path
    stroke-linecap="round"
    stroke-linejoin="round"
    d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z" />
    </svg>
  • file addition: config.toml (----------)
    [2.293060]
    repositories = "/home/pe/pijul/nest2/api/repositories"
  • edit in default.nix at line 36
    [2.309388]
    [2.309388]
    LD_LIBRARY_PATH="${libsodium}/lib:${openssl.out}/lib";
  • replacement in api/src/settings.rs at line 3
    [2.380267][2.380267:380353]()
    use crate::{db, get_user_id_strict, get_user_login_strict, Config, Repo, StatusCode};
    [2.380267]
    [2.380353]
    use crate::{Config, Repo, StatusCode, db, get_user_id_strict, get_user_login_strict};
  • replacement in api/src/settings.rs at line 5
    [2.380365][2.380365:380384]()
    debug_handler,
    [2.380365]
    [2.380384]
    Json, Router, debug_handler,
  • edit in api/src/settings.rs at line 9
    [2.380501][2.380501:380519]()
    Json, Router,
  • edit in api/src/settings.rs at line 280
    [2.388147]
    [2.388147]
    debug!("no user with id {:?}", owner);
  • replacement in api/src/settings.rs at line 345
    [2.390224][2.390224:390251]()
    .await.optional()?
    [2.390224]
    [2.390251]
    .await
    .optional()?
  • replacement in api/src/settings.rs at line 384
    [2.391408][2.391408:391669]()
    diesel::delete(pp::profile_pics.find(uid)).execute(&mut db).await?;
    diesel::delete(pk::publickeys.filter(pk::user_id.eq(uid))).execute(&mut db).await?;
    diesel::delete(sk::signingkeys.filter(sk::user_id.eq(uid))).execute(&mut db).await?;
    [2.391408]
    [2.391669]
    diesel::delete(pp::profile_pics.find(uid))
    .execute(&mut db)
    .await?;
    diesel::delete(pk::publickeys.filter(pk::user_id.eq(uid)))
    .execute(&mut db)
    .await?;
    diesel::delete(sk::signingkeys.filter(sk::user_id.eq(uid)))
    .execute(&mut db)
    .await?;
  • replacement in api/src/repository/changestore.rs at line 147
    [2.415541][2.415541:415615]()
    debug!("decompressed {:?} bytes from compressed {:?}", a, b);
    [2.415541]
    [2.415615]
    debug!(
    "decompressed {:?} bytes from compressed {:?} ({:?} < {:?}",
    a, b, ia, ib
    );
  • replacement in api/src/repository/changestore.rs at line 192
    [2.416883][2.416883:416957]()
    debug!("decompressed {:?} bytes from compressed {:?}", a, b);
    [2.416883]
    [2.416957]
    debug!(
    "decompressed {:?} bytes from compressed {:?} {:?} < {:?}",
    a, b, ia, ib
    );
  • replacement in api/src/repository/changestore.rs at line 373
    [2.423189][2.423189:423357]()
    let n = db.execute(
    "UPDATE users SET storage_used = GREATEST(0, storage_used - $2)
    [2.423189]
    [2.423357]
    let n = db.execute(
    "UPDATE users SET storage_used = GREATEST(0, storage_used - $2)
  • replacement in api/src/repository/changestore.rs at line 377
    [2.423478][2.423478:423640]()
    &[&id, &(meta.len() as i64)]
    ).await?;
    */
    [2.423478]
    [2.423640]
    &[&id, &(meta.len() as i64)]
    ).await?;
    */
  • replacement in api/src/replication.rs at line 67
    [2.433982][2.433982:434079]()
    txn.apply_change_rec(&repo_.changes, &mut *channel_.write(), &hash);
    [2.433982]
    [2.434079]
    txn.apply_change(&repo_.changes, &mut *channel_.write(), &hash);
  • replacement in api/src/proxy.rs at line 206
    [2.444962][4.6314:6360]()
    debug!("node_proxy_ localhost:5173");
    [2.444962]
    [2.444962]
    debug!("node_proxy_ 127.0.0.1:5173");
  • file addition: config.toml (----------)
    [2.310031]
    etcd_server = "localhost:2379"
    repository_cache_size = 128
    change_cache_size = 128
    max_body_length = 1048576 # 1M
    hard_max_body_length = 10485760
    lock_file = "./lock_file"
    repositories_path = "./repositories"
    profile_pictures_path = "profile_pictures"
    host = "localhost"
    hostname = "localhost"
    version_time = "Mon, 19 Nov 2018 14:37:00 GMT"
    geoip_database = "/nix/store/53ckc0xvyn24lwfwkxznm2l0dj0nq313-geolite2-city/share/GeoLite2-City.mmdb"
    failed_auth_timeout_millis = 10
    pbkdf2_iterations = 1
    origin = "http://localhost:5173"
    partial_change_size = 1048576
    max_password_attempts = 20
    pro_prix_euros = 10
    basic_size_limit = 100000000000 # 100G
    pro_size_limit = 100000000000 # 100G
    [email]
    source = "no-reply@nest.pijul.com"
    region = "eu-west-1"
    [time]
    max_relative_days = 2
    yesterday_threshold_hours = 7
    [http]
    http_port = 8000
    https_port = 8001
    ws_port = 8080
    ws_timeout_secs = 3600
    time_file = "./time"
    log_file = "logs"
    timeout_secs = 20
    [ssh]
    port = 2222
    timeout_secs = 120
    [ci]
    key_path = "id_ed25519"
    port = 2223
    timeout_secs = 120
    public_keys = [
    "AAAAC3NzaC1lZDI1NTE5AAAAILLpIgsG9nAoJwe64F8WNLTZdSz8OgOjL6P8a24ITvRU"
    ]
    log_path = "/home/pe/pijul/nest/nest/ci_log"
    tarball_path = "/home/pe/pijul/nest/nest/ci_tarball"
    [prometheus]
    buckets_start = 0.0
    buckets_width = 10
    n_buckets = 50
    [replication]
    port = 2224
    initial = [ "127.0.0.1" ]
    [editor]
    port = 4001
    [webauthn]
    rp_origin = "https://localhost:8001"
    rp_id = "localhost"