)]}'
{
  "log": [
    {
      "commit": "4de754a84e2c1def1771c5d30f0f876f0981d7d7",
      "tree": "7410e060793570bba5651d1b4e5c5e154a97ac79",
      "parents": [
        "bd4ba99aa358252b43b56a2521ef2b45e68ef794"
      ],
      "author": {
        "name": "Christian Brauner (Amutable)",
        "email": "brauner@kernel.org",
        "time": "Thu Mar 12 14:26:01 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 14:45:55 2026 +0100"
      },
      "message": "l2md, README: document manifest-based change detection and dlopen dependencies\n\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "bd4ba99aa358252b43b56a2521ef2b45e68ef794",
      "tree": "b7b2a67d9b8d8bff3f9ca1d89de998ae416e73ad",
      "parents": [
        "00941d74e401bc5182e0307e34ca4674e02cd260"
      ],
      "author": {
        "name": "Christian Brauner",
        "email": "brauner@kernel.org",
        "time": "Wed Mar 11 15:40:06 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 10:01:29 2026 +0100"
      },
      "message": "l2md, TODO: remove implemented items\n\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "00941d74e401bc5182e0307e34ca4674e02cd260",
      "tree": "2581b4d57c126f5480ded6bc6caccb614d77c3e8",
      "parents": [
        "1b421f0c2fa62ba835e74112a8b7f8ec109cb2ce"
      ],
      "author": {
        "name": "Christian Brauner",
        "email": "brauner@kernel.org",
        "time": "Wed Mar 11 15:40:05 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 10:01:06 2026 +0100"
      },
      "message": "l2md: integrate manifest fingerprint checks into sync loop\n\nWire up the manifest-based change detection into the existing sync\ninfrastructure:\n\n- env.c: In sync_env(), check manifest_url_changed() before each\n  repo_pull() and skip URLs whose fingerprint hasn\u0027t changed. Only\n  persist the new fingerprint after a successful repo_pull() (deferred\n  update pattern) to avoid marking a URL as current when the fetch\n  actually failed. Call manifest_sync_done() after each sync cycle to\n  free cached manifest JSON while preserving failure cooldown state.\n\n- config.c: Call manifest_cleanup() on shutdown in config_uninit().\n\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "1b421f0c2fa62ba835e74112a8b7f8ec109cb2ce",
      "tree": "e9667e1267b56c79f95a0e5d7f27da1bee510776",
      "parents": [
        "530a0f10e5c6a03b5699d3300f4cc70e4c38bced"
      ],
      "author": {
        "name": "Christian Brauner",
        "email": "brauner@kernel.org",
        "time": "Wed Mar 11 15:40:04 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 10:00:51 2026 +0100"
      },
      "message": "l2md: add manifest-based change detection\n\nImplement manifest-based change detection for lore.kernel.org that\nallows l2md to skip unnecessary git fetch operations by comparing\nfingerprints from per-list manifest.js.gz files.\n\nAll library dependencies (libcurl, zlib, libsystemd) are loaded via\ndlopen() at runtime with proper error handling and graceful degradation.\nIf any dependency is missing at compile time or runtime,\nmanifest_url_changed() returns true (assume changed, do normal git\nfetch). Uses RTLD_NOW|RTLD_NODELETE for security.\n\nThe implementation includes:\n\n- HTTP fetch of per-list manifest.js.gz files with redirect-aware\n  canonical name handling\n- Gzip decompression with bomb protection (1MB cap)\n- JSON parsing via libsystemd\u0027s sd_json_variant API\n- Per-list manifest caching (one HTTP request per list per sync cycle)\n  with 5-minute failure cooldown\n- URL normalization: short form (/bpf/0) to long form\n  (/bpf/git/0.git) for manifest key lookup\n- Fingerprint validation (40-char hex SHA-1) and comparison against\n  stored per-URL fingerprints\n\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "530a0f10e5c6a03b5699d3300f4cc70e4c38bced",
      "tree": "326ca5724ffb8964900df34dba8446d9bab6a9f9",
      "parents": [
        "46aa49370d49f86cff97ea4340f05cb5c6891a2e"
      ],
      "author": {
        "name": "Christian Brauner",
        "email": "brauner@kernel.org",
        "time": "Wed Mar 11 15:40:03 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 10:00:32 2026 +0100"
      },
      "message": "l2md: add fingerprint persistence plumbing\n\nAdd the storage layer for manifest fingerprints, independent of the\nactual manifest fetch/parse logic:\n\n- l2md.h: FINGERPRINTS directory constant, MANIFEST_FINGERPRINT_HEXSZ\n  (40-char SHA-1), fingerprint/fingerprint_known fields in config_url.\n\n- repo.c: repo_local_fingerprint() helper to construct the on-disk\n  fingerprint path.\n\n- env.c: Create per-repo fingerprint directories during bootstrap.\n\n- config.c: Probe stored fingerprints at startup via\n  config_probe_fingerprints(), display them in config_dump().\n\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "46aa49370d49f86cff97ea4340f05cb5c6891a2e",
      "tree": "2e68975331baf942247c10c142b17e2471080af4",
      "parents": [
        "378a816c4a16057b7d706ebb7864202bc8c80396"
      ],
      "author": {
        "name": "Christian Brauner",
        "email": "brauner@kernel.org",
        "time": "Wed Mar 11 15:40:02 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 10:00:13 2026 +0100"
      },
      "message": "l2md: make repo_pull() return int on failure\n\nChange repo_pull() from void to int so callers can detect fetch\nfailures. On git_remote_fetch() error, free resources and return -1\ninstead of falling through to the merge/checkout path via goto out.\n\nThis will be used by the manifest-based change detection to avoid\npersisting stale fingerprints when a fetch actually failed.\n\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "378a816c4a16057b7d706ebb7864202bc8c80396",
      "tree": "d2b98937239732bd6d0a7cd33c94b4c030de0da3",
      "parents": [
        "dd57f52b0433fbde52bd1225cdebb85f2c271af8"
      ],
      "author": {
        "name": "Christian Brauner",
        "email": "brauner@kernel.org",
        "time": "Wed Mar 11 15:40:01 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 09:59:47 2026 +0100"
      },
      "message": "l2md: add -ldl and MANIFEST build knob\n\nAdd build system support for the upcoming manifest-based change\ndetection feature:\n\n- MANIFEST variable (auto/0/1) to control the feature at build time.\n  When set to \"auto\" (default), manifest.c uses __has_include() to\n  detect headers at compile time.\n\n- Link -ldl on non-Darwin platforms for dlopen/dlsym support.\n\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "dd57f52b0433fbde52bd1225cdebb85f2c271af8",
      "tree": "7b6d5d4f360a3ca84a51ee739a5eb14c73eeb093",
      "parents": [
        "c400a9036ee9ed194747285ab35ed48781043732"
      ],
      "author": {
        "name": "Christian Brauner",
        "email": "brauner@kernel.org",
        "time": "Wed Mar 11 15:40:00 2026 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Mar 12 09:59:21 2026 +0100"
      },
      "message": "l2md: add dlopen/dlsym utility macros\n\nAdd dlfcn-util.h with dlopen/dlsym utility macros inspired by\nsystemd\u0027s src/basic/dlfcn-util.h and src/fundamental/macro-fundamental.h.\n\nProvides:\n- DLSYM_PROTOTYPE/DLSYM_ARG for type-safe dlsym() wrappers\n- ELF_NOTE_DLOPEN for embedding .note.dlopen metadata per the FDO spec\n\nThese will be used by the manifest-based change detection code to\ndlopen() libcurl, zlib, and libsystemd at runtime.\n\nLink: https://uapi-group.org/specifications/specs/elf_dlopen_metadata/\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "c400a9036ee9ed194747285ab35ed48781043732",
      "tree": "905cd793db3bd88323de944f771eae32ca591ed8",
      "parents": [
        "21c954d2cda1c00ba2fc22a2215078945b9b4704"
      ],
      "author": {
        "name": "Anthony Iliopoulos",
        "email": "ailiop@suse.com",
        "time": "Thu Nov 27 22:38:07 2025 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Mon Dec 01 17:16:58 2025 +0100"
      },
      "message": "l2md: add SIGHUP handler for manual sync triggering\n\nThis allows for immediate triggering of a sync between otherwise\npotentially long sleep periods, without having to restart the service.\n\nSigned-off-by: Anthony Iliopoulos \u003cailiop@suse.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "21c954d2cda1c00ba2fc22a2215078945b9b4704",
      "tree": "78f45317d6892fcb87e1de6a9266b7c163c76b7f",
      "parents": [
        "9db252bc1716ebaf0abd3a47a59ea78e4e6253d6"
      ],
      "author": {
        "name": "Sirius",
        "email": "sirius@trudheim.com",
        "time": "Tue Apr 29 11:41:30 2025 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Apr 29 11:55:24 2025 +0200"
      },
      "message": "l2md: support running against a single repo\n\nSirius mentioned:\n\n  I use l2md to sync a lot of lists, and when I add a list, it can end\n  up running for a long time. Even in one-shot mode.\n\n  So I hacked this up yesterday as a PoC to have a single config, but\n  run l2md for a single repo in that config. I do this via systemd units.\n\nA small howto is added into the README.\n\nSigned-off-by: Sirius \u003csirius@trudheim.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "9db252bc1716ebaf0abd3a47a59ea78e4e6253d6",
      "tree": "084777578df64175dfe78d69207f6d91509fb045",
      "parents": [
        "c98664189f440a7c86dcfc526b3bbf168be0d7c0"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@fb.com",
        "time": "Wed Oct 27 14:46:36 2021 -0700"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Oct 27 23:54:19 2021 +0200"
      },
      "message": "l2md: get l2md to compile and run on MacOS\n\nFew tweaks to make the code compile on MacOS. As a prerequisite to get\nit running, `brew install libgit2` is needed.\n\nSigned-off-by: Alexei Starovoitov \u003cast@fb.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "c98664189f440a7c86dcfc526b3bbf168be0d7c0",
      "tree": "2a45ccf2d13a2c7f49ec0540ff5ab6533322cf37",
      "parents": [
        "9e28c81ef2d07b0496e54c1b62d4787b6e3de7ca"
      ],
      "author": {
        "name": "Nicolas Schier",
        "email": "nicolas@fjasle.eu",
        "time": "Wed Aug 25 21:56:22 2021 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Mon Aug 30 11:09:25 2021 +0200"
      },
      "message": "l2md: use XDG compliant paths for config file and work dir\n\nChange the default locations of the config file and the work directory.\nPrefered config file is taken from ~/${XDG_CONFIG_HOME}/config\n(\u0027.config\u0027 as fallback for XDG_CONFIG_HOME), the old default location\n~/.l2mdconfig is used as fallback.\n\nTo avoid breakage of old setups, use ~/.l2md/ as default base directory\niff it exists. Otherwise, use ~/${XDG_DATA_HOME}/l2md/.\n\nSigned-off-by: Nicolas Schier \u003cnicolas@fjasle.eu\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "9e28c81ef2d07b0496e54c1b62d4787b6e3de7ca",
      "tree": "bcd346f0a46f23a3c876a11da757dbd3c6d52957",
      "parents": [
        "f7286b49bb5fce25c898c143712fe34ad4d7864e"
      ],
      "author": {
        "name": "Nicolas Schier",
        "email": "nicolas@fjasle.eu",
        "time": "Wed Aug 25 21:56:12 2021 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Mon Aug 30 10:25:14 2021 +0200"
      },
      "message": "l2md: enable -Wextra and fix compilability\n\nEnable -Wextra and add __noreturn to fix compilability.\n\nSigned-off-by: Nicolas Schier \u003cnicolas@fjasle.eu\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "f7286b49bb5fce25c898c143712fe34ad4d7864e",
      "tree": "2cb0abb41fb3ebe4f9e01fb5ad1111e3212c0c51",
      "parents": [
        "2b9fae141fc2129940e0337732a35a3fc1c33455"
      ],
      "author": {
        "name": "Xinglu Chen",
        "email": "public@yoctocell.xyz",
        "time": "Fri Feb 19 23:52:51 2021 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Feb 24 17:39:59 2021 +0100"
      },
      "message": "l2md, Makefile: add PREFIX flag\n\nThis allows the user to choose a different installation directory.\n\nSigned-off-by: Xinglu Chen \u003cpublic@yoctocell.xyz\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "2b9fae141fc2129940e0337732a35a3fc1c33455",
      "tree": "eaf1cb3b6c841b8272213794de5f808439bd1550",
      "parents": [
        "8c86c39ac527e70e054120ca7a9d3f235d7847ea"
      ],
      "author": {
        "name": "Jakub Kicinski",
        "email": "kuba@kernel.org",
        "time": "Fri Jul 31 10:18:05 2020 -0700"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Fri Jul 31 22:40:36 2020 +0200"
      },
      "message": "l2md: fix infinite loop on reading short files\n\nWhen (config) files get corrupted and are not the expected\nsize we\u0027d enter an infinite loop.\n\nSigned-off-by: Jakub Kicinski \u003ckuba@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "8c86c39ac527e70e054120ca7a9d3f235d7847ea",
      "tree": "611b002d5ad738ecf256636492e2e890e86afecd",
      "parents": [
        "11d4a3bb4a49e9f1303be072aaaceb0d27ab68e7"
      ],
      "author": {
        "name": "Jakub Kicinski",
        "email": "kuba@kernel.org",
        "time": "Tue Feb 25 15:50:09 2020 -0800"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Feb 26 09:25:45 2020 +0100"
      },
      "message": "l2md: enable proxy support\n\nlibgit2 requires an explicit opt-in to enable proxies.\nWith the option set it consults gitconfig like git would.\n\nSigned-off-by: Jakub Kicinski \u003ckuba@kernel.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "11d4a3bb4a49e9f1303be072aaaceb0d27ab68e7",
      "tree": "6e6f1bf237a4b3d077670a3dd529a74007113991",
      "parents": [
        "ffe6b92fd223cf56971f6d3790eb446b7f94c34c"
      ],
      "author": {
        "name": "Anthony Iliopoulos",
        "email": "ailiopoulos@suse.com",
        "time": "Thu Jan 16 02:15:49 2020 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Jan 16 12:40:54 2020 +0100"
      },
      "message": "l2md: add per-repo config option to enable or disable syncing\n\nIntroduce a config option to control the fetching/syncing on a\nper-repo granularity.\n\nSigned-off-by: Anthony Iliopoulos \u003cailiopoulos@suse.com\u003e\n[ Daniel: rename to sync_enabled to make it more self-documenting\n  and enable by default to avoid breaking existing user configs. ]\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "ffe6b92fd223cf56971f6d3790eb446b7f94c34c",
      "tree": "e85999b7e4fe9f1e338e997adaab5cdbb10fc425",
      "parents": [
        "29a394f40fd9caa6bc5bbcee05310b906351b24a"
      ],
      "author": {
        "name": "Anthony Iliopoulos",
        "email": "ailiopoulos@suse.com",
        "time": "Thu Jan 16 02:15:51 2020 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Jan 16 12:24:06 2020 +0100"
      },
      "message": "l2md: add oneshot option to sync once and exit\n\nBy default l2md will loop forever and periodically fetch and\nsync. Add a config option that enables l2md to sync once and\nexit, so that it could also be invoked for oneshot operation\n(e.g. via crontab), instead of running as a daemon service.\n\nSigned-off-by: Anthony Iliopoulos \u003cailiopoulos@suse.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "29a394f40fd9caa6bc5bbcee05310b906351b24a",
      "tree": "26b9fff029ce178dbf9a5039241e7c5786d15e8e",
      "parents": [
        "41619edb0509565e5d35192aecb0cfb2249277a5"
      ],
      "author": {
        "name": "Anthony Iliopoulos",
        "email": "ailiopoulos@suse.com",
        "time": "Thu Jan 16 02:15:50 2020 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Jan 16 12:24:06 2020 +0100"
      },
      "message": "l2md: don\u0027t panic on umatched git objects during repo walk\n\nDuring repo walking, revparse expects to find objects based on the\noid:\"m\" specification, but public-inbox encodes some specific objects\n(e.g. spam) differently, and that causes the walk to bail out. Fix by\nskipping all objects that don\u0027t match the default mail specification.\n\nSigned-off-by: Anthony Iliopoulos \u003cailiopoulos@suse.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "41619edb0509565e5d35192aecb0cfb2249277a5",
      "tree": "d1957fd3daca730cab01e88ab47d4211716bdd0b",
      "parents": [
        "45831af4fa6e1890f19d6e9e2f35ad4e36f35643"
      ],
      "author": {
        "name": "Jakub Kicinski",
        "email": "jakub.kicinski@netronome.com",
        "time": "Thu Dec 05 08:29:53 2019 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Dec 05 08:31:29 2019 +0100"
      },
      "message": "l2md: use correct path in error msg when config cannot be opened\n\nIt\u0027s the path variable and not tmp, so use the correct one.\n\nSigned-off-by: Jakub Kicinski \u003cjakub.kicinski@netronome.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "45831af4fa6e1890f19d6e9e2f35ad4e36f35643",
      "tree": "16bd9cc5c737fa2aad387862e2c516f4a3780fd2",
      "parents": [
        "ecdbb0c79d9274a04a1da9efd429c1c88fe9bd9a"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Nov 13 17:56:59 2019 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Nov 13 17:57:16 2019 +0100"
      },
      "message": "l2md: warn when revwalk did not succeed in prep step\n\nIf we couldn\u0027t even start walking the repo, throw a warning to\ninform what went wrong. Now that we\u0027ve bumped the open file limit\nthis issue should be mitigated, but this indicates that potentially\nthe repo needs a repack. Once libgit2 supports this, we can actually\ndo it here instead.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "ecdbb0c79d9274a04a1da9efd429c1c88fe9bd9a",
      "tree": "a356155806928ffca8d6120a6abad4008083ee6b",
      "parents": [
        "817767a385c083b672be3d3f72ad619719254d2d"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Nov 13 17:40:10 2019 +0100"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Nov 13 17:44:29 2019 +0100"
      },
      "message": "l2md: bump open file limit for repos with lots of pack files\n\nBump the limit to avoid bailing out in git_revwalk_next() without\nhaving walked any commits. This happens when the repo has a lot of\npack files where we otherwise surpass the open file limit with the\ndefault.\n\nIdeally doing an equivalent of ...\n\n  git repack -a -d -f --depth\u003d250 --window\u003d250\n\n... out of libgit2 would be best and solve this issue, but given\nGH issue [0], it\u0027s not there yet (if ever).\n\n  [0] https://github.com/libgit2/libgit2/issues/3247\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "817767a385c083b672be3d3f72ad619719254d2d",
      "tree": "3c6120e4a91031ea6cdc042354dcc877b087ac1a",
      "parents": [
        "96dc4476417ce0455369480052396c4e0be7210f"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Oct 03 22:00:19 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Thu Oct 03 22:03:36 2019 +0200"
      },
      "message": "l2md: add todo file to keep track of future improvements\n\nAdd two more suggestions from Konstantin with regards to using the\nmanifest file for checking updates and epoch roll-over.\n\nSuggested-by: Konstantin Ryabitsev \u003ckonstantin@linuxfoundation.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "96dc4476417ce0455369480052396c4e0be7210f",
      "tree": "400b7bce8a79ea14547a21fbd6ad727e650db3ed",
      "parents": [
        "fe7845cbe445802a1069b5e0eb8f7d823c2b5fed"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Oct 02 12:32:12 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Oct 02 12:33:16 2019 +0200"
      },
      "message": "l2md: document --verbose option in readme\n\nSeems this was missing in the README.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "fe7845cbe445802a1069b5e0eb8f7d823c2b5fed",
      "tree": "64c8429fda61a7ec8167e81c8fe6e6d2cdb3de0c",
      "parents": [
        "20d4421a5686afccbe0568f1ecca6992b8fcf2d7"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 21:13:33 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Oct 02 10:26:12 2019 +0200"
      },
      "message": "l2md: add support to pipe new mails to stdout for procmail et al\n\nAdd very initial/rough support for piping new mails to external MDAs.\n\nKonstantin says:\n\n  Thanks for working on this -- I\u0027ve started on a similar tool in the\n  past, but got distracted and never completed it. In my implementation,\n  it was piping messages to procmail, which allowed writing complex rules\n  for folders/pre-processing, etc. May I suggest that your tool also\n  offers a stdout that can be piped to procmail?\n\nUsed test config:\n\n$ cat ~/.l2mdconfig\n[general]\n\tbase \u003d /tmp/test/\n\tpipe \u003d /usr/bin/procmail\n\tperiod \u003d 30\n\n[repo bpf]\n\turl \u003d https://lore.kernel.org/bpf/0\n\tinitial_import \u003d 10\n\nTested l2md -\u003e procmail -\u003e mutt locally which seems to work fine.\n\nSuggested-by: Konstantin Ryabitsev \u003ckonstantin@linuxfoundation.org\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nLink: https://lore.kernel.org/workflows/20190930212410.GE14403@pure.paranoia.local/\n"
    },
    {
      "commit": "20d4421a5686afccbe0568f1ecca6992b8fcf2d7",
      "tree": "56e952bb30c1caf7034868a7f5b79144a4e07ba8",
      "parents": [
        "4740bcd111b9c106b426a4bb9807917e9a17d4fe"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 20:29:21 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 20:53:20 2019 +0200"
      },
      "message": "l2md: make output modular to support different modes\n\nRefactor the output handling of new mails in order to allow adding\nnew modes as next step.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "4740bcd111b9c106b426a4bb9807917e9a17d4fe",
      "tree": "e4d3b59eef67442494b3e45a12efefda7a0dadb6",
      "parents": [
        "a21797efe6648f8f9173fa0c33f50961ac286deb"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 14:03:58 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 14:15:13 2019 +0200"
      },
      "message": "l2md: rename/generalize oid_maildir into oid\n\nIt\u0027s not tied in any way to the fact that we\u0027re using maildir, plus\nwe want to support different output modes in future, therefore move\nto a more generic name.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "a21797efe6648f8f9173fa0c33f50961ac286deb",
      "tree": "9db58329c0924a0c712c132881bfedf97860286d",
      "parents": [
        "4b8f027664f015478b1dbcc977eccdfcace0f86c"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 09:42:55 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 14:14:40 2019 +0200"
      },
      "message": "l2md: move verbose mode to stderr and get rid of fflush\n\nAs not needed for !\u003d stdout and also if verbose() is disabled.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "4b8f027664f015478b1dbcc977eccdfcace0f86c",
      "tree": "59abaa5979052db38ef1b102885a852296a24532",
      "parents": [
        "74fb35981f37b37ba43b20f97784049f85ef49f0"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 09:15:41 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 09:18:15 2019 +0200"
      },
      "message": "l2md: minimal sanity check for general vs repo config\n\nGiven we may be deriving the repo-specific default paths from the\ngeneral config, add a sanity check that we have parsed the general\none before the repo specific sections, and simply just bail out if\nthis was not the case. Not really a point in making it more complex\nright now.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "74fb35981f37b37ba43b20f97784049f85ef49f0",
      "tree": "957893c16b40864ddef9e77fa6ec08a9acbd2360",
      "parents": [
        "efda942f992e490f8b97b54740614dfe876bfb1c"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 09:02:35 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 09:02:35 2019 +0200"
      },
      "message": "l2md: define default maildir based on prior set basedir\n\nNo need to hard code it once more, so just reuse what we\njust defined.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "efda942f992e490f8b97b54740614dfe876bfb1c",
      "tree": "2d70e57ec3884de3d3c5e3509820b46bd9069259",
      "parents": [
        "4af08961fc04082e2b53dbbb8c30b86d3f3c18c5"
      ],
      "author": {
        "name": "Anthony Iliopoulos",
        "email": "ailiopoulos@suse.com",
        "time": "Tue Oct 01 01:57:14 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 08:24:30 2019 +0200"
      },
      "message": "l2md: make the repo basedir path configurable\n\nEnable the config file to override the default global base path where\nthe git repos are cloned and reside, and dump the setting in the verbose\noutput, while at it. Also, add the default base path in the example\nl2mdconfig file.\n\nSigned-off-by: Anthony Iliopoulos \u003cailiopoulos@suse.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "4af08961fc04082e2b53dbbb8c30b86d3f3c18c5",
      "tree": "b76250f88ce7efb82779ab24b0cf6bf431916539",
      "parents": [
        "76ee0b229225193165ac2a6f49a9b9d0a714463f"
      ],
      "author": {
        "name": "Anthony Iliopoulos",
        "email": "ailiopoulos@suse.com",
        "time": "Tue Oct 01 01:56:59 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Oct 01 08:24:10 2019 +0200"
      },
      "message": "l2md: add a basic gitignore file\n\nIgnore object files and l2md binary.\n\nSigned-off-by: Anthony Iliopoulos \u003cailiopoulos@suse.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    },
    {
      "commit": "76ee0b229225193165ac2a6f49a9b9d0a714463f",
      "tree": "893746923f9a508aa291f9a1e7ebdada6612d9ec",
      "parents": [],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Tue Sep 17 12:43:21 2019 +0200"
      },
      "committer": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Sep 25 22:39:42 2019 +0200"
      },
      "message": "l2md: initial import of lore 2 maildir\n\nThere it is. See README for more details and setup.\n\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\n"
    }
  ]
}
