)]}'
{
  "log": [
    {
      "commit": "767da2809e9ca2cccf7fec8e73faf49fefa65a28",
      "tree": "d064a75be945618c21c65d59d74ac9a009c013df",
      "parents": [
        "c925fbbf45507589355773774208a125e57f1b39"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Fri Apr 10 10:14:43 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Fri Apr 10 10:14:43 2026 +0000"
      },
      "message": "svnbrowse: When going up a directory, select the recently visited node in the\nlist.\n\n* subversion/svnbrowse/model.c\n  (svn_browse__model_go_up): Loop through all items in the list to find the\n   node with the same matching name as the name we obtained from\n   svn_relpath_split(). In case if no items were found with this name (which is\n   possible as it could be deleted by now), just select the first element.\n* subversion/svnbrowse/svnbrowse.c\n  (view_on_event): Center the view after executing go_up action; The exact same\n   code as in \u0027z\u0027 handling.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932956 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c925fbbf45507589355773774208a125e57f1b39",
      "tree": "7237e2b6a619ea419609c9378505eb635ede502e",
      "parents": [
        "8b6d6847856295c32642d0ece6b3bedc25ca7815"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 09 15:38:24 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 09 15:38:24 2026 +0000"
      },
      "message": "svnbrowse: Sort all nodes in the list.\n\n* subversion/svnbrowse/model.c\n  (includes): Add private/svn_sorts_private.h for svn_sort__array().\n  (compare_cstrings_lexically, compare_node_kind,\n   sort_item_comparison_func): New functions.\n  (svn_browse__state_create): Sort the list.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932928 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8b6d6847856295c32642d0ece6b3bedc25ca7815",
      "tree": "e43f4e9f0533cc67ce191e489d2b06cebb10ac1c",
      "parents": [
        "4d7ad314152b256d4003523c3f217cd7b4fb347b"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 09 14:49:00 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 09 14:49:00 2026 +0000"
      },
      "message": "svnbrowse: More shortcuts for scrolling and moving around the list.\n\n### Current controls ###\n\n- kj, arrows - up/down\n- CTRL-P, CTRL-N - also up/down, common in vim list views\n- enter - enter, Unix terminals also produce \u0027\\n\u0027 via CTRL+M.\n- backspace, u, \u0027-\u0027 - up a directory. I think backspace would be pretty\n  intuative as the default shortcut. u and \u0027-\u0027 are stolen from vim\u0027s netrw.\n  Well technically u is defined as \"Change to recently-visited directory\" but\n  it\u0027s almost the same as going up and we\u0027re not going to implement history\n  anytime soon.\n- CTRL+Y/CTRL+E - scrolls one line up/down\n- CTRL+U/CTRL+D - scrolls half-page up/down\n- CTRL+B/CTRL+F (forward/backwards), page-up/page-down - scrolls whole page\n  up/down\n- g/HOME - select first element \n- G/END - select last element \n- z - center selection\n- q/ESC - get out of here\n\nTODO: Add repetition by entering a number+action that can be repeated (like\nmovement by one line). Also CTRL+U/CTRL+D should remember it for usages without\na number. (do we need all of that?)\n\nNote: According to [1], it\u0027s a bad practise to use shortcuts like CTRL+arrow or\nCTRL+SHIFT+KEY - TUI apps should only use basic combinations or\nCTRL+alphabetical symbol.\n\nIf there is a useful keybind that I missed, please feel free to extend the\ncode.\n\n* subversion/svnbrowse/svnbrowse.c\n  (view_on_event): Factor out scrollsize local variable and implement movement\n   from above.\n* subversion/svnbrowse/model.c\n  (svn_browse__model_scroll_in_view): Forbid scrolling into negatives.\n\n[1] https://invisible-island.net/ncurses/ncurses.faq.html#modified_keys\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932925 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "4d7ad314152b256d4003523c3f217cd7b4fb347b",
      "tree": "91556efc6ed54ced6564948b70e10459f1254a28",
      "parents": [
        "337d441637ecb8846f954abea67d59769c6fcf52"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 22:04:43 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 22:04:43 2026 +0000"
      },
      "message": "Follow-up to r1932915: Fix typo.\n\n* subversion/svnbrowse/svnbrowse.c\n  (view_on_event): one row/row one.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932916 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "337d441637ecb8846f954abea67d59769c6fcf52",
      "tree": "68f07899815fbfd4e9213cd9640e42faa713da6b",
      "parents": [
        "052bddc62af4e76621bcc30906ad7ee28a021b8a"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 22:00:21 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 22:00:21 2026 +0000"
      },
      "message": "svnbrowse: Implement scrolling so selected item always stays in the view on\nlong lists.\n\n* subversion/svnbrowse/svnbrowse.h\n  (svn_browse__state_t): Add scroller_offset to the struct.\n  (svn_browse__model_scroll_in_view): Declare func.\n* subversion/svnbrowse/model.c\n  (min, max): New macros.\n  (svn_browse__model_scroll_in_view): Implement func.\n* subversion/svnbrowse/svnbrowse.c\n  (view_on_event): Call svn_browse__model_scroll_in_view() to rearrange\n   scroller on every update.\n  (view_draw_item): Factor-out a function for convenience.\n  (view_draw): Smarter logic to handle scrollers and avoid rendering items out\n   of view. Use the new func.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932915 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "052bddc62af4e76621bcc30906ad7ee28a021b8a",
      "tree": "24c59f2d4109dd54d8530d7bd7c871bccb337e16",
      "parents": [
        "3136f16ab017a219d8f1a2c3ee4ace5229fe7a0f"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 21:26:10 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 21:26:10 2026 +0000"
      },
      "message": "svnbrowse: Implement exiting by ESC.\n\n* subversion/svnbrowse/svnbrowse.c\n  (KEY_ESC): Define.\n  (view_on_event): Add case for the ESC key.\n  (sub_main): Disable ESCDELAY and elaborate my thoughts about ESCDELAY and\n   this shortcut in general.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932913 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "3136f16ab017a219d8f1a2c3ee4ace5229fe7a0f",
      "tree": "a29fa3a70c975848b75d79a808a1f6ef0091ead1",
      "parents": [
        "515135a91574caf65f067108ce64b26ad66ce1bc"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 15:42:04 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 15:42:04 2026 +0000"
      },
      "message": "svnbrowse: Include ncurses from curses.h (instead of ncurses.h).\n\ncurses is a library that has multiple implementations and they all share the\nsame API. We should generally support compiling with all of them. ncurses.h\nitself is a symlink to curses.h.\n\nWe will probably use ncurses on Unix and PDCurses on Windows systems.\n\n* subversion/svnbrowse/svnbrowse.c\n  (includes): Change headers to use.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932909 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "515135a91574caf65f067108ce64b26ad66ce1bc",
      "tree": "29a33865d574e7bad3cf62de27ecc644ce5685a7",
      "parents": [
        "692ff3644d09778a0bafce4afe86c00af33ec7c8"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 15:23:42 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 15:23:42 2026 +0000"
      },
      "message": "svnbrowse: Factor-out view_on_event() for better error and cancellation\nhandling.\n\n* subversion/svnbrowse/svnbrowse.c\n  (view_on_event): New function that does the all getch handling stuff.\n  (sub_main): Forward-declare err, repeat the mainloop as long as error is\n   NULL, move all main keyhandling into view_on_event(), and deal with error at\n   the end.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932907 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "692ff3644d09778a0bafce4afe86c00af33ec7c8",
      "tree": "f780199961b9f0e6e13de2804cdd9bb0969e46fe",
      "parents": [
        "46277946efaaa6d9403ce202d9588eecfd5e5b4d"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 15:06:30 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 15:06:30 2026 +0000"
      },
      "message": "Follow-up to r1932903: Fix spelling mistakes in a comment.\n\n* subversion/svnbrowse/model.c\n  (svn_browse__model_create): Typofixes.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932906 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "46277946efaaa6d9403ce202d9588eecfd5e5b4d",
      "tree": "7ed3dc4b334de94a90c2e52eb385e3537a804150",
      "parents": [
        "69fceb7fbd7e5750792cd8686d8ab8e9188339ef"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 14:08:39 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 08 14:08:39 2026 +0000"
      },
      "message": "svnbrowse: Support proper revision/target system in the command-line handling.\n\nThe model, when created, will accept a path_or_url parameter and, if a path is\nsupplied, go and get the URL from WC. It also receives a revision/peg_revision\nas svn_opt_revision_t. The standard client framework will be used to resolve\nthose. If both of those revisions are HEAD, we\u0027ll directly read directories at\nHEAD.\n\n* subversion/svnbrowse/svnbrowse.h\n  (svn_browse__opt_state_t): Add revision, peg_revision, and path_or_url to\n   the struct.\n  (svn_browse__model_create): Update function declaration.\n* subversion/svnbrowse/model.c\n  (includes): Update includes.\n  (svn_browse__model_create): Update arguments that the function accepts, use\n   svn_client__ra_session_from_path2() instead of svn_client_open_ra_session2()\n   for initializing RA sessions, and use the revision/URL it resolves for the\n   newly created model.\n* subversion/svnbrowse/svnbrowse.c\n  (sub_main): Handle all extra args with svn_client_args_to_target_array2() and\n   extract \"the target\" from it (the array should only contain of those). Parse\n   this target onto peg_revision and path_or_url using svn_opt_parse_path().\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932903 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "69fceb7fbd7e5750792cd8686d8ab8e9188339ef",
      "tree": "e78168112dadd676d6bff6faffa29d57b5e37ac9",
      "parents": [
        "0194fcac2063887abb5e64af86fae35c337cbd20"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Mon Apr 06 15:38:20 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Mon Apr 06 15:38:20 2026 +0000"
      },
      "message": "svnbrowse: Plug in command-line specified parameters into authentication baton.\n\n* subversion/svnbrowse/svnbrowse.c\n  (sub_main): Use those in svn_cmdline_create_auth_baton2().\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932868 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0194fcac2063887abb5e64af86fae35c337cbd20",
      "tree": "e52ff9d83935f76cb92e378b43f5348b572b2acf",
      "parents": [
        "90bb10843a0c69a580968fab404b59aa00827f7e"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Mon Apr 06 09:05:44 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Mon Apr 06 09:05:44 2026 +0000"
      },
      "message": "Remove mentioning of IRC\n\n* README\n  (#PARTICIPATING IN THE SUBVERSION COMMUNITY): As above\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932863 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "90bb10843a0c69a580968fab404b59aa00827f7e",
      "tree": "9abfc08a0563105684b14905c50a498f2c9112f5",
      "parents": [
        "bc7b9b70423847aa217a7c95ae51302abfc4f908"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 17:59:47 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 17:59:47 2026 +0000"
      },
      "message": "Follow up to r1932855: Put SVN_ERR_OPT_REVISION_PARSE_ERROR to the right place\nso it doesn\u0027t clash with other error codes.\n\n* include/svn_error_codes.h\n  (SVN_ERR_OPT_REVISION_PARSE_ERROR): Fix error code.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932859 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "bc7b9b70423847aa217a7c95ae51302abfc4f908",
      "tree": "696a827d2713e4d43b8e2d4493b8749d1aeec42c",
      "parents": [
        "fafc167ef6937c971d85a5d4d943755d9eff0bfa"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 17:31:07 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 17:31:07 2026 +0000"
      },
      "message": "svnbrowse: Move client initialization away from the model; it will work with an\nalready pre-set client and *be* the same layer as the libsvn_client API.\n\nWe would like to provide more specific configuration to how our client behaves\nbased on the information we have only in the command-line parser. Like handling\n--username and --password.\n\n* subversion/svnbrowse/model.c\n  (svn_browse__model_create): Add ctx to parameters, remove client\n   initialization.\n* subversion/svnbrowse/svnbrowse.c\n  (sub_main): Initialize client and the auth baton.\n* subversion/svnbrowse/svnbrowse.h\n  (svn_browse__model_create): Add ctx to parameters.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932858 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "fafc167ef6937c971d85a5d4d943755d9eff0bfa",
      "tree": "4f144868cccd396dd084e1992b4ce859564df767",
      "parents": [
        "02cac16cd9011e13c3b78d2aca4d277426eb3edd"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 17:02:57 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 17:02:57 2026 +0000"
      },
      "message": "svnbrowse: Separate tool\u0027s code onto separate files; header, model, and the \"main\".\n\n* subversion/svnbrowse/svnbrowse.h: svncopy from svnbrowse.c\n  (includes): Cleanup.\n  (opt_): Declare enum. \n  (svn_browse__opt_state_t, svn_browse__item_t, svn_browse__state_t,\n   svn_browse__model_t): Declare structs.\n  (svn_browse__state_create, svn_browse__model_enter_path,\n   svn_browse__model_get_selected_item, svn_browse__model_go_enter,\n   svn_browse__model_go_up, svn_browse__model_move_selection,\n   svn_browse__model_create): Declare functions.\n* subversion/svnbrowse/model.c: svncopy from svnbrowse.c\n  (includes): Cleanup.\n  (svn_browse__state_create, svn_browse__model_enter_path,\n   svn_browse__model_get_selected_item, svn_browse__model_go_enter,\n   svn_browse__model_go_up, svn_browse__model_move_selection,\n   svn_browse__model_create): Leave those functions in this file.\n  (everywhere): Update references to model and state function becuase they\n   were renamed to include svn_browse__ prefix in it.\n* subversion/svnbrowse/svnbrowse.c\n  (svn_browse__state_create, svn_browse__model_enter_path,\n   svn_browse__model_get_selected_item, svn_browse__model_go_enter,\n   svn_browse__model_go_up, svn_browse__model_move_selection,\n   svn_browse__model_create, svn_browse__opt_state_t, svn_browse__item_t,\n   svn_browse__state_t, svn_browse__model_t, opt_): Those symbols have been\n   moved away from here.\n  (everywhere): Update references to model and state function becuase they\n   were renamed to include svn_browse__ prefix in it.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932857 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "02cac16cd9011e13c3b78d2aca4d277426eb3edd",
      "tree": "158e7c91f9de62e5cca492262896ee659e6f14d9",
      "parents": [
        "cbfaf2289248aa96cf0cfa47afe5777ab63abf15"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 12:49:23 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 12:49:23 2026 +0000"
      },
      "message": "svnbrowse: Use the Subversion framework for command-line argument\nparsing and help.\n\n* subversion/svnbrowse/svnbrowse.c\n  (includes): Add svn_cmdline.h, private/svn_cmdline_private.h, and\n   svn_private_config.\n  (opt_): New enum.\n  (svn_browse__opt_state_t): New struct.\n  (svn_browse__options): List all options.\n  (show_usage, show_help, show_version): New functions.\n  (sub_main, main): Mark argv as const.\n  (sub_main): Parse command line using getopt, and add some boilerplate-ish\n   stolen initialization code; the majority of options are no-op.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932856 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "cbfaf2289248aa96cf0cfa47afe5777ab63abf15",
      "tree": "8716eae59d4aa81f70a67b7379ec2150e58511c3",
      "parents": [
        "d3712e8032ed26caada754be19f7aa090b03b6b4"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 09:44:54 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Apr 05 09:44:54 2026 +0000"
      },
      "message": "Export a function for parsing a single opt_revision into the public API. We\u0027ll\nprobably use it in svnbrowse. Neither of other tools need it because they\nprimarly operate over a revision range for which there is a separate function\nin the API.\n\n* subversion/include/svn_error_codes.h\n  (SVN_ERR_OPT_REVISION_PARSE_ERROR): Define new error code.\n* subversion/include/svn_opt.h\n  (svn_opt_parse_one_revision): Define function.\n* subversion/libsvn_subr/opt_revision.c\n  (svn_opt_parse_one_revision): New function; forward most of the logic into\n   parse_one_rev() + error handling and dup string.\n* subversion/tests/libsvn_subr/opt-test.c\n  (test_parse_one_rev): New stupid test to cover up the fact that this function\n   has zero usages (yet).\n  (test_funcs): Run new test.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932855 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d3712e8032ed26caada754be19f7aa090b03b6b4",
      "tree": "003ae9bf7878293238b4a6b2ad666c7a8ad299aa",
      "parents": [
        "87bbab5555bf9418e59b890a996a31a9a57295a3"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 20:13:49 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 20:13:49 2026 +0000"
      },
      "message": "svnbrowse: Factor-out functions to performa all actions with the model.\n\n* subversion/svnbrowse/svnbrowse.c\n  (enter_path -\u003e model_enter_path): Rename for consistency.\n  (model_get_selected_item,\n   model_go_enter,\n   model_go_up,\n   model_move_selection): New functions.\n  (sub_main): Use those functions.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932767 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "87bbab5555bf9418e59b890a996a31a9a57295a3",
      "tree": "7d4c6e1f5f1e0c49c76b8f50d30b410417238eb8",
      "parents": [
        "c590aa1b59a28889b92516382e49a6a26b8e2ba9"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 17:51:18 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 17:51:18 2026 +0000"
      },
      "message": "svnbrowse: Reparent session to the root URL of the repository so we can go\nupper than a directory we intially started browsing with.\n\n* subversion/svnbrowse/svnbrowse.c\n  (model_create): Implement reparenting. Don\u0027t forget to split the URL and put\n   the part relative to root into model-\u003erelpath (in the right pool).\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932747 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c590aa1b59a28889b92516382e49a6a26b8e2ba9",
      "tree": "b7ff89508d1032a2b791c9fea3874fa5980650d8",
      "parents": [
        "bbb57e4dc0228a3fbb261cf58640e3cd0ff3146b"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 17:38:46 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 17:38:46 2026 +0000"
      },
      "message": "svnbrowse: Use svn_ra_get_dir2() instead of svn_ra_list(); It allows us to skip\nresolving revision (it would automatically fallback to HEAD if\nSVN_INVALID_REVNUM is passed). It also does not require a receiver callback and\nthe resulting information is more specific.\n\n* subversion/svnbrowse/svnbrowse.c\n  (list_cb): Remove function.\n  (state_create): Use new API and walk the hashtable to put everything into an\n   array; we cannot use the hashtable directly becuase we need it to be\n   accessible by a numeric consecutive index (for selection).\n  (view_draw): Don\u0027t treat first item as \"go up\"; we\u0027ll implement this later.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932746 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "bbb57e4dc0228a3fbb261cf58640e3cd0ff3146b",
      "tree": "19f1be9bfff9d0f167a034bc2aa544c84c921fe8",
      "parents": [
        "95c8919d7fcc79495e3c3e19a2f1e93342b946e2"
      ],
      "author": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Thu Apr 02 16:36:29 2026 +0000"
      },
      "committer": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Thu Apr 02 16:36:29 2026 +0000"
      },
      "message": "Follow-up to r1931334, fix adler32-test.exe not built with Visual Studio.\n\n* build.conf\n  (__ALL_TESTS__): Add adler32-test to libs of __ALL_TESTS__ section.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932745 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "95c8919d7fcc79495e3c3e19a2f1e93342b946e2",
      "tree": "04f9e52fdd89c0b27da9282474418f07c87ca992",
      "parents": [
        "48c69bb724a03940a9e5812bca22ce0cf3843d18"
      ],
      "author": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Thu Apr 02 16:32:56 2026 +0000"
      },
      "committer": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Thu Apr 02 16:32:56 2026 +0000"
      },
      "message": "Follow-up to r1931402, fix a warning while running gen-make.py on Windows.\n\n* build/generator/gen_base.py\n  (IncludeDependencyInfo._scan_for_includes):\n    Convert the path to a native path before comparing it with include_param.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932744 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "48c69bb724a03940a9e5812bca22ce0cf3843d18",
      "tree": "2da871ca64784d6e57fd9d53c2be1dd7bd8bc76a",
      "parents": [
        "8c1afddb441696b4883744f96dd0e75fffa72814"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 16:16:28 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 16:16:28 2026 +0000"
      },
      "message": "svnbrowse: Rename svn_browse__item_t-\u003erelpath to name. It\u0027s only a name of that\ndirectory, not a path to it. We still have to join those paths.\n\n* subversion/svnbrowse/svnbrowse.c\n  (svn_browse__item_t): Rename field.\n  (list_cb, view_draw, sub_main): Update references.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932743 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8c1afddb441696b4883744f96dd0e75fffa72814",
      "tree": "6fdea602d56fb965e69bfbdd8e56256ffbba3761",
      "parents": [
        "c0b732051f61b1acb297d0023dc26322326ac45c"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 15:51:07 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 15:51:07 2026 +0000"
      },
      "message": "svnbrowse: Use libsvn_ra API directly to query directories. Do so for improved\nperformance (by reusing the same session) and more control of what is\nactually transmitted over the wire.\n\n* subversion/svnbrowse/svnbrowse.c\n  (includes): Add svn_ra.h.\n  (svn_browse__state_t): Change abspath to relpath and the revision is now just\n   a number. Although most of the logic just ignore it for now.\n  (svn_browse__model_t): Store ra_session and change how we store revision.\n  (list_cb): Implement svn_ra_dirent_receiver_t instead of\n   svn_client_list_func2_t. Take basename of relpath when processing it.\n  (state_create): Change the API used to back the operation.\n  (enter_path): Update state_create() invokation and change abspath back to\n   relpath.\n  (model_create): Ask for a numeric revision and add code to initialize\n   ra_session.\n  (view_draw): Add back the logic that combines root and relpath for the\n   header.\n  (sub_main): Use numeric revisions and treat current path of browser as a\n   relative path.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932742 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c0b732051f61b1acb297d0023dc26322326ac45c",
      "tree": "aee71ae0e88e964ac9127b8ee332ea614985453d",
      "parents": [
        "831fd8da6e370462bfdd65a928488fe52199b07f"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 12:44:36 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Apr 02 12:44:36 2026 +0000"
      },
      "message": "svnbrowse: Separate state from the model. Now creating a new state does not\nneed a pointer to the model. Instead, it accepts everything it needs to\ninitialize it which is the client context, (absolute) url, and revision. It\u0027s\nnow close to a wrapper around svn_client_list().\n\nThis is a preparation to smoothly transition to the libsvn_ra API from\nlibsvn_client.\n\nIt was more convenient to store an absolute path in the state instead of\njoining root and relpath each time.\n\n* subversion/svnbrowse/svnbrowse.c\n  (svn_browse__state_t): Rename relpath to abspath.\n  (state_create): Replace model with the actual information it needs and remove\n   url joining logic.\n  (enter_path): Update usage of state_create().\n  (model_create): Update usage of state_create() and move it above model\n   initilization since it no longer needs and instance of one and the all fields\n   of model can be now set in one place.\n  (view_draw): Remove URL joining as the one in state is already an absolute\n   path.\n  (sub_main): Use right functions to work with current URL.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932737 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "831fd8da6e370462bfdd65a928488fe52199b07f",
      "tree": "8887e5286cda64ef0b884c20ad3e521ba715a95f",
      "parents": [
        "58f191d7b728c48feeea2222727575995f913f83"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 22:23:56 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 22:23:56 2026 +0000"
      },
      "message": "svnbrowse: Forward-declare local variables in the mainloop before cleaning the\niterpool.\n\n* subversion/svnbrowse/svnbrowse.c\n  (sub_main): Maintain C89 codestyle.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932722 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "58f191d7b728c48feeea2222727575995f913f83",
      "tree": "925de791a04797a0ea54e6a78e8b404d25f7b661",
      "parents": [
        "0198e146a67b3a3b0a8daefde8d8aa94d67bbe55"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 22:21:41 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 22:21:41 2026 +0000"
      },
      "message": "svnbrowse: Introduce \u0027view\u0027 that does the rendering of what the model has.\n\n* subversion/svnbrowse/svnbrowse.c\n  (svn_browse__view_t): New struct.\n  (view_make): New function.\n  (ui_draw -\u003e view_draw): Rename function and work with a view.\n  (sub_main): Construct and use the view.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932721 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0198e146a67b3a3b0a8daefde8d8aa94d67bbe55",
      "tree": "42325b846c676158de35bb773de65be6e5f1b2b5",
      "parents": [
        "f3e35bd56bec3d1b4ebc0f8d36dd66f7a8ac873f"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 20:13:34 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 20:13:34 2026 +0000"
      },
      "message": "svnbrowse: Add a function that creates model from a specific URL at revision\nand performs all required initialization.\n\n* subversion/svnbrowse/svnbrowse.c\n  (init_client): Remove function.\n  (model_create): New function that replaces init_client.\n  (sub_main): Forward to model_create() so it constructs the model; Make the it\n   so the ctx local variable is a pointer to that model.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932719 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f3e35bd56bec3d1b4ebc0f8d36dd66f7a8ac873f",
      "tree": "46b84d39e54cc29693c90ec9d1e3e86639efc9c9",
      "parents": [
        "6f4e6d21f4907049113d57898c30c51d47493fd5"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 19:57:01 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 19:57:01 2026 +0000"
      },
      "message": "svnbrowse: Rename svn_browse__ctx_t to svn_browse__model_t so we can use the\nmodel/view pattern where the model is responsible for data and view does the\nrendering stuff.\n\nThe list, state, path, and even selection with scroller would belong to the\nmodel.\n\nAll interactions with curses is what view is responsible for.\n\n* subversion/svnbrowse/svnbrowse.c\n  (svn_browse__ctx_t): rename...\n  (svn_browse__model_t): ...to this\n  (everywhere): adjust references\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932718 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "6f4e6d21f4907049113d57898c30c51d47493fd5",
      "tree": "42607c397fb68a77bd5df99f18c18e0c5d2e155c",
      "parents": [
        "01ecf470ca1793005ea2447b83418327201e3632"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 19:48:06 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 19:48:06 2026 +0000"
      },
      "message": "svnbrowse: Replace accidently left tabs with spaces.\n\n* subversion/svnbrowse/svnbrowse.c\n  (ui_draw): Fix indentation when calling mvprintw().\n\nSuggested by: hartmannathan\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932717 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "01ecf470ca1793005ea2447b83418327201e3632",
      "tree": "ff603b4473aa253df79076df4b741f14b0b3cd78",
      "parents": [
        "68a8fa235da569a2573254696ce7e5172540fa65"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 19:18:11 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 19:18:11 2026 +0000"
      },
      "message": "svnbrowse: Add an abstraction for \u0027browser state\u0027 which is a structure that can\nhold all information needed to display the contents of a path in the browser.\nWhen leaving a state, the previous one is droped.\n\n* subversion/svnbrowse/svnbrowse.c\n  (svn_browse__state_t): New struct.\n  (svn_browse__ctx_t): Store pointer to the current state, removing fields like\n   list, selection and relpath from the ctx \n  (list_cb): Treat baton as svn_browse__state_t.\n  (state_create): New function that retrieves \u0027svn list\u0027 data and loads it into\n   a newly created instance of svn_browse__state_t.\n  (enter_path): Use state_create() and properly destroy previous state.\n  (ui_draw, sub_main): Use ctx-\u003ecurrent to access the state.\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932716 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "68a8fa235da569a2573254696ce7e5172540fa65",
      "tree": "2374bd2beafb982cc822b0ce8a176c1bb68bcc70",
      "parents": [
        "648538de1f60dd15cd3251f05248b50e5635539c"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 18:20:52 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 18:20:52 2026 +0000"
      },
      "message": "svnbrowse: Add an iterpool into the mainloop so we don\u0027t leak temporary memory.\n\n* subversion/svnbrowse/svnbrowse.c\n  (sub_main): Add iterpool and use it for all operations that need a pool for\n   intermediate data.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932713 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "648538de1f60dd15cd3251f05248b50e5635539c",
      "tree": "3d9a885ed6ffbf974543f3c9ce24ac8a5fd5b9ad",
      "parents": [
        "cd67a56c5d13f01119ba3ad14e8bfbafe97ab740"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 18:15:35 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 18:15:35 2026 +0000"
      },
      "message": "svnbrowse: Recompute the abspath every time it is needed instead of storing one\nin the browser context; It more convenient and we don\u0027t really care about every\nbit of performance that it would make up.\n\n* subversion/svnbrowse/svnbrowse.c\n  (svn_browse__ctx_t): Remove abspath field.\n  (enter_path): Store combined path in a local variable instead of writing it\n   into the ctx.\n  (ui_draw): Call svn_path_url_add_component2() to join URL for displaying in\n   the header.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932712 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "cd67a56c5d13f01119ba3ad14e8bfbafe97ab740",
      "tree": "4c2365a5beef6a45f3b90c4ec3e05f707b96f3fb",
      "parents": [
        "602f56c069fe7d6b7217429d2c54772896735d07"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:58:16 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:58:16 2026 +0000"
      },
      "message": "svnbrowse: Add parenthesis around ch in the CTRL() macro to avoid potential\nissues when expanded.\n\n* subversion/svnbrowse/svnbrowse.c\n  (CTRL): Fix macro.\n\nSuggested by: hartmannathan\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932711 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "602f56c069fe7d6b7217429d2c54772896735d07",
      "tree": "e5a22fde013fe45a1b6a93560684d3779c25a841",
      "parents": [
        "02958b1cd4444e9745946e5c0039df8877b46068"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:53:35 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:53:35 2026 +0000"
      },
      "message": "svnbrowse: Use switch statement instead of if-else to process getch() input\ndata.\n\n* subversion/svnbrowse/svnbrowse.c\n  (sub_main): Change logical construction in the main event loop and\n   forward-declare some variables.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932710 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "02958b1cd4444e9745946e5c0039df8877b46068",
      "tree": "f1eb686bc7e1210393b480a366d0c76aed84ea0c",
      "parents": [
        "8c40132911570b2fb1fc4d348cd3d70f113ab8d7"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:47:29 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:47:29 2026 +0000"
      },
      "message": "svnbrowse: Rename the item_t structure into svn_browse__item_t.\n\n* subversion/svnbrowse/svnbrowse.c\n  (item_t): Rename structure. \n  (svn_browse__item_t): Into this.\n  (everywhere): Adjust references and format code.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932709 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8c40132911570b2fb1fc4d348cd3d70f113ab8d7",
      "tree": "418e88605004c8b6aed0277486b40f85a319dd99",
      "parents": [
        "f85b9914cc261215916291d415ef7d8258d2ca7d"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:44:08 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:44:08 2026 +0000"
      },
      "message": "svnbrowse: Implement the most basic functionality of the directory browser. \n\n- Simple command-line parser that takes the first argument processes it as the\n  URL to operate on.\n- Initialize the client context with pre-set authentication handlers. Use the\n  standard command line handlers for that.\n- Retrieving the directory contents and display them.\n- Allow some control to navigate to subdirs.\n\n* subversion/svnbrowse/svnbrowse.c\n  (includes): Include required headers.\n  (item_t): Declare struct to hold information about a single directory.\n  (svn_browse__ctx_t): Declare struct to hold context of the browser.\n  (init_client, list_cb, enter_path): New functions.\n  (ui_draw): Render the list.\n  (sub_main): Add initialization and handle browser commands.\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932708 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f85b9914cc261215916291d415ef7d8258d2ca7d",
      "tree": "6b79ffbb0067ef3f9e8fa5189caa76208bd12c61",
      "parents": [
        "94a76c3dc43c74f2ff9b514d1a9ea5d0c907c35b"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:21:18 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:21:18 2026 +0000"
      },
      "message": "Follow-up to r1932705: svnbrowse is an executable target, not a library, so the\ncheck should be done accordingly.\n\n* build/generator/gen_cmake.py\n  (get_target_conditions): Move check to the right category.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932707 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "94a76c3dc43c74f2ff9b514d1a9ea5d0c907c35b",
      "tree": "3b47a0671ad25769c7a7ad3d19db6ce9f56d9290",
      "parents": [
        "90cb83ae28c193763cea4bc7c7316416ed87a11f"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:14:18 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 17:14:18 2026 +0000"
      },
      "message": "Follow-up to r1932705: Change the value of \u0027install\u0027 field of the svnbrowse\nprogram from \u0027bin\u0027 to \u0027tui\u0027 because otherwise it completelly breaks build with\nthe autoconf buildsystem.\n\n* build.conf\n  (svnbrowse): Fix build configuration.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932706 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "90cb83ae28c193763cea4bc7c7316416ed87a11f",
      "tree": "f9f2cc955fbbbb2cd14baf53a6afd39cc4910bde",
      "parents": [
        "f2d4fc53cad98be3203dc06eed3d8c857bc50d70"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 16:52:16 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Apr 01 16:52:16 2026 +0000"
      },
      "message": "svnbrowse: Create new blank program to implement a TUI browser for repository\ndirectories. i.e. interactive interface for \u0027svn ls\u0027.\n\nThe program itself is an empty application with some boilerplate copied from\nother command-line tools. Also perform ncurses initialization, and test that\neverything works great; No real functionality is implemented yet.\n\n* CMakeLists.txt\n  (SVN_ENABLE_TUI): New option.\n  (ncurses): Look for the library.\n  (configsummary): Log state of SVN_ENABLE_TUI.\n* build.conf\n  (svnbrowse): Declare target.\n* build/generator/gen_cmake.py\n  (get_target_conditions): Add special handling for svnbrowse target so it is\n   enabled only if TUIs are ON.\n* subversion/svnbrowse/svnbrowse.c: New file.\n  (ui_draw): This function will be rendering everything to the screen.  \n  (sub_main): New function, a wrapper around main() with pools and svn-errors.\n  (main): New main.\n\nPlease follow the discussion on dev@s.a.o. for more info.\n\n[1] https://lists.apache.org/thread/knc20xgb6h56jl0tvxbywhgt5yvh90vg\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932705 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f2d4fc53cad98be3203dc06eed3d8c857bc50d70",
      "tree": "9c5692069fd2912253b1a82ab034499d507e1176",
      "parents": [
        "fcf8c3063f85b85d189b62b9b02028b1f04a960a"
      ],
      "author": {
        "name": "svn-role",
        "email": "svn-role@unknown",
        "time": "Wed Apr 01 04:00:07 2026 +0000"
      },
      "committer": {
        "name": "svn-role",
        "email": "svn-role@unknown",
        "time": "Wed Apr 01 04:00:07 2026 +0000"
      },
      "message": "Add myself as a full committer.\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932691 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "fcf8c3063f85b85d189b62b9b02028b1f04a960a",
      "tree": "e206d35a05179ce2378043d9b39fd8a5171e43fd",
      "parents": [
        "e0e292d3419716ad74d6ebf0200e5f1fa6403a39"
      ],
      "author": {
        "name": "Nathan Hartman",
        "email": "hartmannathan@apache.org",
        "time": "Tue Mar 31 23:01:28 2026 +0000"
      },
      "committer": {
        "name": "Nathan Hartman",
        "email": "hartmannathan@apache.org",
        "time": "Tue Mar 31 23:01:28 2026 +0000"
      },
      "message": "Reverting r1932579.\n\n* tools/dev/unix-build/Makefile.svn:\n  (\u0027do_check\u0027): In r1932579, I intended to pass the path of the python binary\n   we built to svn\u0027s \u0027make check\u0027 but inadvertently passed the path to its\n   enclosing directory instead.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932688 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e0e292d3419716ad74d6ebf0200e5f1fa6403a39",
      "tree": "8276f22b97f0a608adc916ce7b1ad209689b03b1",
      "parents": [
        "cb25bfdf9fc902ebf3b66d3ca9772bbd5b406e46"
      ],
      "author": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Sun Mar 29 01:32:13 2026 +0000"
      },
      "committer": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Sun Mar 29 01:32:13 2026 +0000"
      },
      "message": "cmake: Follow-up to r1932395, fix build failing with cmake 3.31 on\nwindows-latest.\n\n* CMakeLists.txt\n  (SQLite3):\n    Bind directly to external-sqlite rather than the intermediate alias.\n\nReview by: rinrab\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932649 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "cb25bfdf9fc902ebf3b66d3ca9772bbd5b406e46",
      "tree": "eecd8c7320780594fca8019e9f6ff883979fd379",
      "parents": [
        "5d5d05f1ae53e40022b922e7432de44505277cf8"
      ],
      "author": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Fri Mar 27 01:56:06 2026 +0000"
      },
      "committer": {
        "name": "Jun Omae",
        "email": "jun66j5@apache.org",
        "time": "Fri Mar 27 01:56:06 2026 +0000"
      },
      "message": "GitHub Actions: Adapt to apache-serf package separated from subversion\npackage on homebrew on Feb 19, 2026.\n\n* .github/workflows/cmake.yml\n  (Install dependencies (Mac OS, homebrew)):\n    Install apache-serf instead of subversion package.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932585 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "5d5d05f1ae53e40022b922e7432de44505277cf8",
      "tree": "5dd21656d352f0cfbd49d16e4bd57fca4b45f35a",
      "parents": [
        "e977b6b87030295acd3bef98884f87256abbedc2"
      ],
      "author": {
        "name": "Nathan Hartman",
        "email": "hartmannathan@apache.org",
        "time": "Thu Mar 26 23:44:15 2026 +0000"
      },
      "committer": {
        "name": "Nathan Hartman",
        "email": "hartmannathan@apache.org",
        "time": "Thu Mar 26 23:44:15 2026 +0000"
      },
      "message": "* tools/dev/unix-build/Makefile.svn\n  (\u0027do_check\u0027): Explicitly pass the path of the python binary we build to svn\u0027s\n   \u0027make check\u0027. Without this, svn\u0027s \u0027make check\u0027 picks up my system\u0027s python,\n   despite the fact that we are setting up an env with the PATH to our python\n   binary first.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932579 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e977b6b87030295acd3bef98884f87256abbedc2",
      "tree": "2d516c31351ccfebcf2b5eb856f354f137f27db5",
      "parents": [
        "4b1e4082f4897c267204e29589d75d06e398bd21"
      ],
      "author": {
        "name": "Nathan Hartman",
        "email": "hartmannathan@apache.org",
        "time": "Wed Mar 25 05:29:18 2026 +0000"
      },
      "committer": {
        "name": "Nathan Hartman",
        "email": "hartmannathan@apache.org",
        "time": "Wed Mar 25 05:29:18 2026 +0000"
      },
      "message": "* tools/dev/unix-build/Makefile.svn\n  (\u0027svn-retrieve\u0027 target): Add quoting to avoid an error like:\n   /bin/sh: 4: [: !\u003d: unexpected operator\n   which occurs if $(BRANCH) is the empty string.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932524 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "4b1e4082f4897c267204e29589d75d06e398bd21",
      "tree": "8a82785826ecba04c40a3f5d1446ed206337eb29",
      "parents": [
        "a99104fc56a360daca0eb375f31e427061d703bf"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat Mar 21 13:50:18 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Sat Mar 21 13:50:18 2026 +0000"
      },
      "message": "The svntest framework is Python3 since many years. Update the readme to reflect\nthis.\n\nThere is no code change in this commit, only documentation. It reflects my best\nknowledge at the time of writing, with no other feedback on dev@ (see [1]).\n\n* tools/dist/README.backport\n  As above\n\n[1] https://lists.apache.org/thread/bm3sfrnolqjrd5mhy7rq8lp443kqylkm\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932433 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a99104fc56a360daca0eb375f31e427061d703bf",
      "tree": "8d997a64fe2a9b4acd0a6a68e85f67592cb25e81",
      "parents": [
        "b96c8c2fa8104e5f38618df1f851ce6ac36e9f86"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 21:24:06 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 21:24:06 2026 +0000"
      },
      "message": "cmake: Both policy checks for SWIG no longer needed at all since cmake 3.14.\n\n* CMakeLists.txt\n  (CMP0078, CMP0086): Don\u0027t do anything with those policies.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932397 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b96c8c2fa8104e5f38618df1f851ce6ac36e9f86",
      "tree": "77a55795ae408e9bde86e67b3b2a216eacd7d93e",
      "parents": [
        "801b3bf975da3ccbd69582994e348e6d0587da80"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 21:17:15 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 21:17:15 2026 +0000"
      },
      "message": "cmake: Bump minimum required version of CMake 3.12 -\u003e 3.14; as it turns out the\nFindSQLite3 module was available in 3.12.\n\n* CMakeLists.txt\n  (cmake_minimum_required): Change version number.\n  (CMP0078): Drop pre-3.14 compat code becuase we no longer support these\n   cmake versions.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932396 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "801b3bf975da3ccbd69582994e348e6d0587da80",
      "tree": "7f2686828e52bbc4892c7e1cea09bf3482bddcfb",
      "parents": [
        "fad70e9e47083e81dec428b62067ec2bd2ae4711"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 21:06:44 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 21:06:44 2026 +0000"
      },
      "message": "cmake: Use newer sqlite targets due to deprecation.\n\nIn cmake 4.3, the standard module to locate the sqlite library, changed names\nof its exported targets. I have a lot to say, but I would prefer to stay quite\nabout that.\n\nFixed by updating target that we use, with a code to handle older cmake\nversions.\n\n* CMakeLists.txt\n  (sqlite): Use new targets.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932395 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "fad70e9e47083e81dec428b62067ec2bd2ae4711",
      "tree": "74825c509ef2e082d832e322c0c019fc5673d584",
      "parents": [
        "1272a1c91b4089e3d028b20444f6258f5dbb24de"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 20:57:55 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Mar 19 20:57:55 2026 +0000"
      },
      "message": "Use svn_io_stat() instead of apr_stat() when checking if --message is a file\n(in this case we should show a warning because user might have intendent to\nused it as a log message, i.e. [svn ci -F svn-commit.tmp]).\n\n1.  svn_io_stat, unlike apr_stat uses svn_error error handling which are more\n    convenient to use.\n\n2.  It works in UTF8 encoding. This change will act  as a groundwork change for\n    switching the command-line to a canonical encoding entirely.\n\nDon\u0027t forget to convert encoding to UTF8. As svn_io_stat actually does a\nconversion back to cstring, they basically \"cancel out\".\n\nPlease refer to a small discussion on dev@s.a.o about this change [1].\n\n* subversion/svn/svn.c\n  (sub_main): Use new function.\n\n[1] https://lists.apache.org/thread/mlht6fwy62jr598p8kqx5q5gjwfl0ccl\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932394 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "1272a1c91b4089e3d028b20444f6258f5dbb24de",
      "tree": "515448b33400457c1c0a0c6e2a0a9afe76ad691b",
      "parents": [
        "0d183e20dd0db74fa45812cb8b97299d126772df"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Mon Mar 16 19:44:32 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Mon Mar 16 19:44:32 2026 +0000"
      },
      "message": "Remove casts of data to PUCHAR where we don\u0027t need to.\n\nPUCHAR is an alias to \u0027unsigned char*\u0027. Which means that a general\nNULL-terminated string can be implicitly casted into it as the (Windows API)\nfunction is called. Internally it\u0027s handled as \u0027char *\u0027 the reason we want to\ndo that is 1) so we don\u0027t lose constantness of this pointer and 2) prevents\nthe compiler from accidently reinterpreting this pointer as a different type.\nAccording to my understanding, it is generally intendent that PUCHAR is a type\nthat is compatible with other kinds of strings. \n\n* subversion/libsvn_subr/checksum_bcrypt.c\n  (bcrypt_ctx_update, bcrypt_ctx_final, bcrypt_checksum): Remove casts.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932343 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0d183e20dd0db74fa45812cb8b97299d126772df",
      "tree": "714a6c7e02abea4f488e7a9ac9b6b7bbdf237737",
      "parents": [
        "100fd2776f68d4d2551a1d0064c1b237fde255cb"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Mar 15 18:50:57 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Mar 15 18:50:57 2026 +0000"
      },
      "message": "Implement properly-sized updates when computing contextless checksum via\nWindows BCrypt. \n\n* subversion/libsvn_subr/checksum_bcrypt.c\n  (bcrypt_checksum): Update declaration so the function requires a char*\n   instead of void* and add a loop to process as blocks of ULONG_MAX. Note: we\n   cannot use already existing bcrypt_ctx_update because we don\u0027t have\n   a bcrypt_ctx_t in this context - this just a different nature where all\n   allocation should be done on stack.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932307 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "100fd2776f68d4d2551a1d0064c1b237fde255cb",
      "tree": "7ff6afdef97b2360cbe144185388ff0da561e775",
      "parents": [
        "a45bf200cf27267548582dc08a45af7f513c3149"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Mar 15 15:57:42 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Mar 15 15:57:42 2026 +0000"
      },
      "message": "win32 bcrypt: Handle blocks with sizes larger than what fits in ULONG (32 bits\non Windows). Use a similar code as we recently did to APR-backed checksums.\n\n* subversion/libsvn_subr/checksum_bcrypt.c\n  (bcrypt_ctx_update): Update declaration so the function requires a char*\n   instead of void*. This is needed to make this pointer incrementable by one\n   char. Adding a loop that iterates each the data block-by-block with a size\n   of what fits into an integer that is then passed into Win32 API call\n   (ULONG). The loop all replaces the assertion that was checking that the\n   input parameters match the requirements as now the loop makes the updates\n   safe.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932305 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a45bf200cf27267548582dc08a45af7f513c3149",
      "tree": "b639615da4f8dc51ecc56f8fcb14917519373980",
      "parents": [
        "007844d495d71ca3cf3411c6c1628d0cb9b600a4"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 16:29:13 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 16:29:13 2026 +0000"
      },
      "message": "Propagate constantness in parse-diff.c:git_start.\n\n* subversion/libsvn_diff/parse-diff.c\n  (git_start): Undo const in old_path_start, new_path_start, and\n   old_path_marker.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932160 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "007844d495d71ca3cf3411c6c1628d0cb9b600a4",
      "tree": "c7f17ddf377aabb36bcd03b735755a66a2ceca18",
      "parents": [
        "063a898a079b60db2d2bd945e700440c26f10e30"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 16:24:20 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 16:24:20 2026 +0000"
      },
      "message": "Access elements as non-const from an array if a modification follows after to\nfix compilation warning.\n\n* subversion/libsvn_subr/subst.c\n  (build_keywords): Treat keyword as non-const \u0027char*\u0027 when accessing array.\n* subversion/libsvn_subr/version.c\n  (svn_version__parse_version_striong): Make piece non-constant and adjust\n   cast. \n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932159 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "063a898a079b60db2d2bd945e700440c26f10e30",
      "tree": "349c108e8bbcf1c35b7ee4d023ed86fecd1da12e",
      "parents": [
        "14c98d70899192d51dcc382d8aaad329ad880204"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 15:16:10 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 15:16:10 2026 +0000"
      },
      "message": "Fix misusing of \u0027const\u0027 pointers.\n\nThese are a few obvious places of some that were discovered by compiler with\nC23 checks when a pointer is assigned to result of functions like strchr() and\nthe arguments are const. In such case, it essentially works as something like\n\u0027char non_const \u003d (char *)constant\u0027. Please refer to discussion on dev: [1].\n\n* subversion/libsvn_fs/fs-loader.c\n  (svn_fs__path_valid): Remove const from declration of \u0027c\u0027.\n* subversion/libsvn_fs_fs/tree.c\n  (check_newline): Remove const from declration of \u0027c\u0027.\n* subversion/libsvn_subr/gpg_agent.c\n  (find_running_gpg_agent): Remove const from declration of \u0027p\u0027.\n\n[1] https://lists.apache.org/thread/855lf41fz1ks3fng2m6b7wp2sdr6ly2s\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932158 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "14c98d70899192d51dcc382d8aaad329ad880204",
      "tree": "85f0055bb73210359bead9b6724921933350d3b8",
      "parents": [
        "a7fe1acdcebe702590fe6f2735c11dc670349e49"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 13:25:40 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Mar 04 13:25:40 2026 +0000"
      },
      "message": "Return an array of \u0027char*\u0027 from svn_cstring_split()/svn_cstring_split_append()\ninstead of \u0027const char*\u0027. There is some existing code that already treats it\nlike that.\n\nFurther reasoning and discussion can be found on the mailing list [1].\n\n* subversion/include/svn_string.h\n  (svn_cstring_split): Update description of return value type in docstring.\n* subversion/libsvn_subr/string.c\n  (svn_cstring_split_append): Use \u0027char*\u0027 instead of \u0027const char*\u0027 when\n   pushing a new array element. \n\nReviewed by: brane\n\n[1] https://lists.apache.org/thread/jpd1wm9nqcwkb5cc5q429txxhb1n63kx\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932154 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a7fe1acdcebe702590fe6f2735c11dc670349e49",
      "tree": "2698e896a9ef0f1604dbae77c2fdb03b85466473",
      "parents": [
        "d8f58fdef6718e102c04d2a78d48966890fab67b"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Mar 03 16:13:20 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Mar 03 16:13:20 2026 +0000"
      },
      "message": "Follow-up to r1932040: Fix include of private/svn_atomic.h header file.\n\n* subversion/libsvn_subr/checksum_xdigest.c\n  (includes): Use h-char (\"header.h\") syntax instead of q-char (\u003cheader.h\u003e) to\n   include private/svn_atomic.h.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932138 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d8f58fdef6718e102c04d2a78d48966890fab67b",
      "tree": "677f6c32515d873f1eebfdb1e6acfdb6a8c0e546",
      "parents": [
        "281eca0127c589a47703b74665dc30590f55a295"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Feb 25 07:55:18 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Wed Feb 25 07:55:18 2026 +0000"
      },
      "message": "Support xdigest checksum backend.\n\nThis library is a collection of OpenSSL\u0027s checksum algorithm implementations\nwith focus on performance and simplicity. In other words, it brings the same\nperformance improvent as OpenSSL but is built to be lightweight.\n\nThis feature remains experemental and optional. The current default backend is\nAPR. Users are expected to explicitly change it if they want to.\n\n* CMakeLists.txt\n  (SVN_CHECKSUM_BACKEND): Add xdigest to the list of allowed values.\n  (xdigest): Look for the library if this backend is requested.\n\n* build/cmake/FindXDIGEST.cmake: New module that performs the search.\n\n* subversion/libsvn_subr/checksum_xdigest.c: New backend. Effectivily a copy of\n  OpenSSL backend, with some tweaks and replace of the backend itself.\n  (init_status): Declare global state for atomic initilization.\n  (xdigest_init_once, ensure_xdigest_init): New function to perform library\n   initilization.\n  (svn_checksum__md5_ctx_reset, svn_checksum__md5_ctx_update,\n   svn_checksum__md5_ctx_final, svn_checksum__sha1_ctx_reset,\n   svn_checksum__sha1_ctx_update, svn_checksum__sha1_ctx_final): Implement the\n   backend.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932040 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "281eca0127c589a47703b74665dc30590f55a295",
      "tree": "0ba2a91c85b90e6d30bcd1709b9690f4c8f1486d",
      "parents": [
        "14164025e0ee853f2e707017291e31ffc54c54fb"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Feb 24 19:00:33 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Feb 24 19:00:33 2026 +0000"
      },
      "message": "Add atomic initializatoin function which doesn\u0027t return error and doesn\u0027t use\npools svn_atomic__init_once_void().\n\nThis is never yet used but is a groundwork to add xdigest checksum backend\nwhich does require initialization. This initilization will be performed in\nerrorless context (inside of svn_checksum__sha1_ctx_create for example).\n\n* include/private/svn_atomic.h\n  (svn_atomic__void_init_func_t): New callback declaration.\n  (svn_atomic__init_once_void): New function.\n\n* libsvn_subr/atomic.c\n  (init_baton_t): Add void_init_func field.\n  (void_init_func_wrapper): Add function to wrap initilization in case of\n   init_once_void.\n  (svn_atomic__init_once_void): Implement function.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932028 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "14164025e0ee853f2e707017291e31ffc54c54fb",
      "tree": "ba3f2a9f71918e93b4791b4213d4d517f7356bd1",
      "parents": [
        "3f285e79c98e07023a164ebea294739cf9613b4c"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Feb 24 18:46:32 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Feb 24 18:46:32 2026 +0000"
      },
      "message": "Remove extra traling newline from OpenSSL backed checksum implementation.\n\n* subversion/libsvn_subr/checksum_openssl.c\n  (): Ditto.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1932027 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "3f285e79c98e07023a164ebea294739cf9613b4c",
      "tree": "87a114a461f75467f218143f79da21ba3fa95bf0",
      "parents": [
        "d8c1ba7af7936f4e35a7e562df890e76f69b3c1c"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Feb 13 11:18:44 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Feb 13 11:18:44 2026 +0000"
      },
      "message": "Use a raw string as argument to re.compile()\n\n* tools/server-side/svn-backup-dumps.py\n  (get_last_dumped_rev): As above\n\nPatch by: koumotoyouichi@gmail.com\n\ndev@:  https://lists.apache.org/thread/owpvst9pw7sg5rq79snnxxkpcxn0w6k2\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931849 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d8c1ba7af7936f4e35a7e562df890e76f69b3c1c",
      "tree": "bf3b3efcc9190ffaf363f2bf38f13df5bbf2b523",
      "parents": [
        "1ad16530801833654a20b1b0be02c0ff4d73dd85"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Feb 05 21:41:56 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Thu Feb 05 21:41:56 2026 +0000"
      },
      "message": "Follow-up to r1931690: Swap arguments when calling find_package() for serf\nbecause version must be the second positional argument.\n\n* CMakeLists.txt\n  (serf): Ditto.\n\nFound by: jun66j5\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931732 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "1ad16530801833654a20b1b0be02c0ff4d73dd85",
      "tree": "22b8642cd280b27de415fe2296e1a814631bdf74",
      "parents": [
        "afcffef86f568435153e8eee269fa61a8c1d6f31"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Feb 03 16:49:29 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Tue Feb 03 16:49:29 2026 +0000"
      },
      "message": "cmake: Use a simpler magic to enforce serf version requirements.\n\n* CMakeLists.txt\n  (serf): Pass serf-1\u003e\u003d1.3.4 as package name so pkg_search_module() would take\n   care of version checking. Specify version when checking dependency via cmake.\n   They both will result an error if found version doesn\u0027t satisfy the\n   requirements. Removing old code that was doing that manually.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931690 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "afcffef86f568435153e8eee269fa61a8c1d6f31",
      "tree": "23b167c80559e124c8132361ac5a7e3dca857f7c",
      "parents": [
        "ccf14c2bde750c56848cb01d2f9acbe9efcb808b"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Feb 01 10:56:51 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Feb 01 10:56:51 2026 +0000"
      },
      "message": "cmake: Include minor and patch versions into shared objects names.\n\nThis replicates r1931484 in cmake.\n\nExamples for SVN 1.14.5:\n  Filename before:          libsvn_subr-1.so.0.0.0\n  Filename after:           libsvn_subr-1.so.0.14.5\n  SONAME before and after:  libsvn_subr-1.so.0\n\n* CMakeLists.txt\n  (read_version): Export each version component from the function.\n\n* build/generator/templates/targets.cmake.ezt\n  (libs): Add minor and patch versions to VERSION target property of\n   each library.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931642 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "ccf14c2bde750c56848cb01d2f9acbe9efcb808b",
      "tree": "9d692b22129bd77abf74776d0e0d56dec6f59635",
      "parents": [
        "583ddb0bf11520d8bff08b6926a2c1d444f96f48"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 31 23:12:30 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 31 23:12:30 2026 +0000"
      },
      "message": "cmake: Produce an error when configuring with serf \u003c version 1.3.4. This\nreplicates behaviour of autoconf build system.\n\n* CMakeLists.txt\n  (serf): Collect version into DETECTED_SERF_VERSION and verify that it\u0027s\n   supported.\n\nReviewed by: dsahlberg\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931636 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "583ddb0bf11520d8bff08b6926a2c1d444f96f48",
      "tree": "f088d2a5bde77652ea8682e16197e0fe6abbb5df",
      "parents": [
        "f8ac4c36e0f82da955bff97f3d096d4cd88ae9a2"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 31 22:16:57 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 31 22:16:57 2026 +0000"
      },
      "message": "cmake: Make sure that serf is checked as a REQUIRED dependency.\n\n- Tested that current trunk will successfully configure when using serf though\n  pkcconfig even when removing the serf-1.pc itself. Errors will only reveal\n  after executing the build. After this change, an explicit error message is\n  shown.\n\n(now i have to restore it...)\n\n* CMakeLists.txt\n  (serf): Call pkg_search_module() with REQUIRED argument and remove\n   unnecessary condition.\n\nReviewed by: dsahlberg\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931635 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f8ac4c36e0f82da955bff97f3d096d4cd88ae9a2",
      "tree": "f6653688f3413f1b95473c42137197fe5dab0148",
      "parents": [
        "0f6ac3e52b8025a3975f450807d322bb1399bd81"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Tue Jan 27 13:36:46 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Tue Jan 27 13:36:46 2026 +0000"
      },
      "message": "Followup to r1808139, use the allow_unver_obstructions argument in the\ncall to svn_client_checkout4 instead of hardcoding FALSE.\n\nThis was probably missed due to a copy-paste error from svn_client_checkout2.\n\n* subversion/libsvn_client/deprecated.c\n  (svn_client_checkout3): As above\n\nDiscussed on dev@:\nhttps://lists.apache.org/thread/y6pxsq5v7s5ns7c88hd42b5ky9ns8wvb\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931570 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0f6ac3e52b8025a3975f450807d322bb1399bd81",
      "tree": "3ba1f3853df953a228a933d4e54993d8f3a6b277",
      "parents": [
        "1f52ec4bd4917d5f2bf981ce4b55b2ffa7b270e6"
      ],
      "author": {
        "name": "Evgeny Kotkov",
        "email": "kotkov@apache.org",
        "time": "Mon Jan 26 18:08:45 2026 +0000"
      },
      "committer": {
        "name": "Evgeny Kotkov",
        "email": "kotkov@apache.org",
        "time": "Mon Jan 26 18:08:45 2026 +0000"
      },
      "message": "Following up on r1931298, correct the Doxygen documentation markup by\nsubstituting `@c svn_tristate_unknown` with `#svn_tristate_unknown`.\n\nThis is consistent with how we reference other `svn_` types and values,\nand should render the value as a link rather than just a name.\n\n* subversion/include/svn_client.h\n  (svn_client_checkout3): Update the docstring as mentioned above.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931552 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "1f52ec4bd4917d5f2bf981ce4b55b2ffa7b270e6",
      "tree": "c7d3c8e226365552a15e5c28430d1c4dffd7b35e",
      "parents": [
        "d62023db7f5a9bc2c581f6acd40ee9ae98e082c4"
      ],
      "author": {
        "name": "Evgeny Kotkov",
        "email": "kotkov@apache.org",
        "time": "Mon Jan 26 17:41:18 2026 +0000"
      },
      "committer": {
        "name": "Evgeny Kotkov",
        "email": "kotkov@apache.org",
        "time": "Mon Jan 26 17:41:18 2026 +0000"
      },
      "message": "Use bytewise content comparison in the \"is the file modified?\" working copy\nchecks if we have the pristine file content in the working copy.\n\nThe revised approach prefers bytewise comparison to the checksum comparison\nif the pristine content is available.  This also restores the 1.14.x behavior\nfor existing working copies with pristines or new working copies created\nwith the --store-pristine\u003dyes option, and avoids a potential change in\ncharacteristics for file comparisons in them.\n\nDiscussed in [1].\n\n* subversion/libsvn_wc/questions.c\n  (compare_exact): New helper function, factored out from compare_and_verify()\n   and extended to support both bytewise and checksum-based comparisons.\n  (compare_and_verify): Accept `pristine_stream` and `pristine_size` from\n   the caller.  Perform bytewise or checksum-based comparison depending on\n   whether `pristine_stream` is available.\n  (svn_wc__internal_file_modified_p): Call svn_wc__db_pristine_read().\n   Adjust the call to compare_and_verify().  Handle EACCES to\n   SVN_ERR_WC_PATH_ACCESS_DENIED error conversion at this level.\n\n[1]: https://lists.apache.org/thread/128rgf7ozn72ljfzn7o18gfhb9l43y26\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931549 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d62023db7f5a9bc2c581f6acd40ee9ae98e082c4",
      "tree": "485e526ade41be7ed994ce6c22b5aa389b2d8812",
      "parents": [
        "78b099b3697ed8663f4af9351475d4ef4157c2b4"
      ],
      "author": {
        "name": "Joe Orton",
        "email": "jorton@apache.org",
        "time": "Fri Jan 23 11:57:40 2026 +0000"
      },
      "committer": {
        "name": "Joe Orton",
        "email": "jorton@apache.org",
        "time": "Fri Jan 23 11:57:40 2026 +0000"
      },
      "message": "* configure.ac: Pass complete library version information to libtool\n  via $SVN_LT_SOVERSION, so library filenames are unique to each\n  release rather than constant, while keeping the sonames intact.\n  This follow standard/best-practice for libtool library versioning.\n  Closes #34.\n\n  Examples for SVN 1.14.5:\n   Filename before:          libsvn_subr-1.so.0.0.0\n   Filename after:           libsvn_subr-1.so.0.14.5\n   SONAME before and after:  libsvn_subr-1.so.0\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931484 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "78b099b3697ed8663f4af9351475d4ef4157c2b4",
      "tree": "7157999beea7c00b2ba9a9d0899882c0207cbdca",
      "parents": [
        "044b16c10cedacfbdbe5537f23588779db87b411"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 14:17:49 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 14:17:49 2026 +0000"
      },
      "message": "Update the internal lz4 to version 1.10.0.\nOn platforms that support __attribute__((visibility)), the internal LZ4\u0027s\nAPI will no longer be exported from libsvn_subr.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931406 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "044b16c10cedacfbdbe5537f23588779db87b411",
      "tree": "9ddf1e492555e2ccf4603e9c339686e688b01e35",
      "parents": [
        "ae8820b99b684a5c61846e8b4e7bbd8c4709f663"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 12:53:04 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 12:53:04 2026 +0000"
      },
      "message": "Upgrade the internal utf8proc to version 2.11.3.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931404 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "ae8820b99b684a5c61846e8b4e7bbd8c4709f663",
      "tree": "585b5fe85b0a77e55627652c6d488dc7020d1bf9",
      "parents": [
        "f48123e9370743f5c137832cf4b615436cf2abfb"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 18 11:17:27 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 18 11:17:27 2026 +0000"
      },
      "message": "Follow-up to r1931389: Cast \u0027len\u0027 to uint (it\u0027s safe because we\u0027re in a branch\nthat alredy verified that \u0027len\u0027 is in boudries).\n\n* subversion/libsvn_subr/checksum_apr.c\n  (sha1_update): Add cast.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931403 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f48123e9370743f5c137832cf4b615436cf2abfb",
      "tree": "07c081a390a957f0fad756a23b62ca5ea7d651b7",
      "parents": [
        "d5ba5bdaa23e15bc07e1255d4e86530f59a347ff"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 09:08:13 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 09:08:13 2026 +0000"
      },
      "message": "Add another test for the Adler-32 implementation. All code branches\nshould now be covered with tests, even if this new test is a bit\ncontrived.\n\n* subversion/libsvn_subr/adler32.c\n  (SVN__ADLER32_SIZE_MAX): Do not define this constant if SVN__ADLER32_STATIC\n   is defined. This allows adler32-test.c to locally override the maximum\n   block size.\n\n* subversion/tests/libsvn_subr/adler32-test.c: Add a comment about sorting\n   the constant arrays that contain test inputs.\n  (do_random_test): Move common code from the dependent test functions\n   that call to here.\n  (test_magic_length, test_prime_length, test_power2_length): Rename from\n   test_random_magic, test_random_prime and test_random_power2,\n   respectively; and just call do_random_test.\n  (local_adler32): New, defined implicitly by including adler32.c\n   with a modified maximum block size.\n  (test_large_size): New test case; exercises the unlikely code branch in\n   our Adler-32 implementation.\n  (test_funcs): Update the whole array.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931402 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d5ba5bdaa23e15bc07e1255d4e86530f59a347ff",
      "tree": "3c7486f7125aeb68c9ac97d9d7778168aedd9e03",
      "parents": [
        "61a40e68ff162fed324899027339480f09bc3bcf"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 08:13:06 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Sun Jan 18 08:13:06 2026 +0000"
      },
      "message": "Fix a warning about an unused function when debug mode is disabled.\n\n* subversion/libsvn_subr/mergeinfo.c\n  (rangelist_to_string_debug): Define this function only #ifdef SVN_DEBUG.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931400 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "61a40e68ff162fed324899027339480f09bc3bcf",
      "tree": "fa59d72642a0aa6d3b42e7cb992265264dd74a96",
      "parents": [
        "eeadac05ede2ca4b48bb5503a04265ba5669cb3a"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 19:36:27 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 19:36:27 2026 +0000"
      },
      "message": "Follow-up to r1931389: Fix argument type.\n\n* subversion/libsvn_subr/checksum_apr.c\n  (sha1_update): Accept \u0027char *\u0027 instead of \u0027void *\u0027.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931395 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "eeadac05ede2ca4b48bb5503a04265ba5669cb3a",
      "tree": "6310483e9a036a5587926bb91cd0e99e49881151",
      "parents": [
        "d42780f0219f7e6400e9cab45173a790d1e2886b"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 19:30:44 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 19:30:44 2026 +0000"
      },
      "message": "Revert r1931392.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931394 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d42780f0219f7e6400e9cab45173a790d1e2886b",
      "tree": "8c7132e5a657287d0e1ca9324590f617f0a5e597",
      "parents": [
        "bf87b58a0ca16b4395d15140319faf7c38c07baa"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 18:17:34 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 18:17:34 2026 +0000"
      },
      "message": "Follow-up to r1931389: Fix compilation with MSVC.\n\n* subversion/libsvn_subr/checksum_apr.c\n  (svn_checksum__sha1, svn_checksum__sha1_ctx_update): Cast \u0027void *\u0027 to\n  \u0027char *\u0027 explicitly.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931392 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "bf87b58a0ca16b4395d15140319faf7c38c07baa",
      "tree": "6310483e9a036a5587926bb91cd0e99e49881151",
      "parents": [
        "5e0b9db0c5eb1f69d349d207c01ccb787fc867d6"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 18:11:49 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 18:11:49 2026 +0000"
      },
      "message": "Follow-up to r1930988: Fix backend type logging in cmake configure summary.\n\n* CMakeLists.txt\n  (configsummary): Log SVN_CHECKSUM_BACKEND instead of\n   SVN_CHECKSUM_USE_OPENSSL.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931391 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "5e0b9db0c5eb1f69d349d207c01ccb787fc867d6",
      "tree": "30672593a00a5cdc9fd470c9250f03ee88d17e92",
      "parents": [
        "2f080d3ead7771f200fb4e9b6f6b2ea36591281d"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 18:08:26 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 18:08:26 2026 +0000"
      },
      "message": "Add separate target to the build system for checksum backend linkage. This\neliminates the need of adding openssl directly (which acted in the same way\nbefore), only it\u0027s more convinient for other backends like Windows BCrypt.\n\n* CMakeLists.txt\n  (checksum backend): Setup backends via external-checksum-libs target.\n* build/generator/gen_win_dependencies.py\n  (GenDependenciesBase): Ignore \u0027checksum-libs\u0027.\n* build.conf\n  (libsvn_subr): Link against checksum-libs\n  (checksum-libs): New target.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931390 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "2f080d3ead7771f200fb4e9b6f6b2ea36591281d",
      "tree": "ca4b9d3912d8988057b99a32f929e21fc09471f6",
      "parents": [
        "0220a0ef730c12935b50cad72745577128ce6903"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 17:11:02 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sat Jan 17 17:11:02 2026 +0000"
      },
      "message": "Handle SHA1 checksum update with APR backend (whose update consumes size as\n`unsigned int`, not a size_t) if a buffer with a size more than the limit of\nunsigned integer by iterating trough data via blocks and invoking the backend\nmultiple times.\n\n* subversion/libsvn_subr/checksum_apr.c\n  (sha1_update): New helper function to provide \"proper\" update.\n  (svn_checksum__sha1, svn_checksum__sha1_ctx_update): Call local sha1_update()\n   and remove assertion.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931389 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0220a0ef730c12935b50cad72745577128ce6903",
      "tree": "21d202e6bf6e4c27a20e3f0ff793824abe66b858",
      "parents": [
        "f7b6e48dbbd22627e7f2834043ac5dd6be04cc62"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 16:41:29 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 16:41:29 2026 +0000"
      },
      "message": "* build.conf (adler32-test): Add missing dependency on zlib.\n\nFound by: jun66j5\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931373 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f7b6e48dbbd22627e7f2834043ac5dd6be04cc62",
      "tree": "df788a9139d9b25acfe02f21b34354732d64796b",
      "parents": [
        "30f672483526f5b37a089e1bf9b1e770d7ad8d84"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 15:50:19 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 15:50:19 2026 +0000"
      },
      "message": "Don\u0027t allocate four times more space than needed. Duh.\n\n* subversion/tests/libsvn_subr/adler32-test.c\n  (make_random_data): We just worked out how many 32-bit random\n   integers we\u0027ll generate, so maybe allocate space for only so many?\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931369 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "30f672483526f5b37a089e1bf9b1e770d7ad8d84",
      "tree": "17df9e812a285722f2882ff53ba4719ecf044226",
      "parents": [
        "8323ae1ab5a23fac014cd45902b6007218498a5b"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 13:51:21 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 13:51:21 2026 +0000"
      },
      "message": "Follow up to r1931334: Correct and clarify comments. No functional change.\n\n* subversion/libsvn_subr/adler32.c\n  (svn__adler32): Fix the comment about compile-time code elision.\n   Add another to explain why we use a not strictly necessary variable.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931359 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "8323ae1ab5a23fac014cd45902b6007218498a5b",
      "tree": "7907cc3d79ad32e5afec595035c71e4a50beec28",
      "parents": [
        "488970e5bc3c6d580a9fc233e16c7ed1303dad48"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 04:40:05 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Fri Jan 16 04:40:05 2026 +0000"
      },
      "message": "Follow up to r1931334: Look for adler32_z() in the CMake build, too.\n\n* CMakeLists.txt: Add authckeck for adler32_z() in zlib.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931337 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "488970e5bc3c6d580a9fc233e16c7ed1303dad48",
      "tree": "427a5606154162f11fd2414fd7ada03aeb3be669",
      "parents": [
        "2126567c6462bd1d1f246cfda5989fbd313f14ab"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 15 23:45:34 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Thu Jan 15 23:45:34 2026 +0000"
      },
      "message": "Remove another unchecked narrowing cast, this time in the implementation\nof the adler32 checksum. Make sure we consume all the data, no matter\nhow improbably large it may be.\n\n\n* build/ac-macros/zlib.m4\n  (SVN_LIB_Z): Check if we\u0027re using a version of zlib that provides the\n   function adler32_z(), which uses size_t instead of unsigned int for\n   the length of the input data.\n\n* build.conf\n  (adler32-test): Define a new unit test program.\n\n* subversion/libsvn_subr/adler32.c: Include svn_private_config.h.\n  (svn__adler32_impl, svn__adler32_fn, svn__adler32_size_t,\n   SVN__ADLER32_SIZE_MAX): New type and macros to use adler32_z() if\n   available and adler32() if not, without too much clutter elsewhere.\n  (SVN__ADLER_MOD_BASE): Renamed from ADLER_MOD_BASE and made unsigned.\n  (svn__adler32): Consume huge input data sets in SVN__ADLER32_SIZE_MAX\n   -sized chunks. Shortcut the result if someone fed us zero-length data.\n\n* subversion/tests/libsvn_subr/adler32-test.c: New file with tests\n   that compare our adler32 implementation with the one in zlib.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931334 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "2126567c6462bd1d1f246cfda5989fbd313f14ab",
      "tree": "dc8599ab5aa64886b6dae20fb4c098c9eb71b671",
      "parents": [
        "c7372efb6560c849c9690f6ab6fc4c0b590f7d83"
      ],
      "author": {
        "name": "Evgeny Kotkov",
        "email": "kotkov@apache.org",
        "time": "Thu Jan 15 14:24:42 2026 +0000"
      },
      "committer": {
        "name": "Evgeny Kotkov",
        "email": "kotkov@apache.org",
        "time": "Thu Jan 15 14:24:42 2026 +0000"
      },
      "message": "* CHANGES: Draft initial changelog for 1.15.0.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931332 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c7372efb6560c849c9690f6ab6fc4c0b590f7d83",
      "tree": "01098f106d7b2f1090926628723577f7553302b6",
      "parents": [
        "f9b51707db841e77d63517a7ed892ff947014b57"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jan 14 19:42:39 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jan 14 19:42:39 2026 +0000"
      },
      "message": "Cherry-pick r1931314 from the better-pristines branch, removing the parts\ndealing with WC format 33 that don\u0027t belong on trunk.\n\nOriginal log message:\n\u003e On the better-pristines branch: Move all knowledge of mapping between\n\u003e working copy formats and Subversion versions into libsvn_wc. Having them\n\u003e in two places was slightly unmaintainable if the format numberw changed.\n\n* subversion/include/private/svn_wc_private.h: Include svn_version.h.\n  (svn_wc__version_string_from_format): Update the docstring.\n  (svn_wc__version_info_t,\n   svn_wc__version_info_from_format): New.\n\n* subversion/libsvn_wc/wc.h\n  (SVN_WC__VERSION): Note dependents in the docstring.\n  (SVN_WC__SUPPORTED_VERSION): Likewise.\n\n* subversion/libsvn_wc/upgrade.c\n  (version_info_null..version_info_1_15): New constants with version\n   strings and related version numbers.\n  (svn_wc__version_info_from_format): This is the single format-\u003eversion\n   mapping, using the new version_info_* static data.\n  (svn_wc__version_string_from_format): Use the info returned by\n   svn_wc__version_info_from_format().\n\n* subversion/libsvn_client/upgrade.c\n  (svn_client_wc_version_from_format): Delete the local version mapping\n   and use svn_wc__version_info_from_format() instead.\n  (svn_client_oldest_wc_version,\n   svn_client_default_wc_version,\n   svn_client_latest_wc_version,\n   svn_client__compatible_wc_version_optional_pristine): Use the data\n   returned by svn_wc__version_info_from_format(), instead of hard-\n   coded, copy-pasted versions. This eliminates the need to update\n   these functions when supported format numbers change.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931325 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "f9b51707db841e77d63517a7ed892ff947014b57",
      "tree": "9fc0b6c313f377ea9c0166d2a82c6f7d0f317f69",
      "parents": [
        "aaaf01c6bc4826038d1e60db16d88103b9c1599b"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jan 14 04:33:05 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Wed Jan 14 04:33:05 2026 +0000"
      },
      "message": "Update an omission in a docstring.\n\n* subversion/include/svn_client.h\n  (svn_client_checkout3): Mention the store_pristine parameter.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931298 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "aaaf01c6bc4826038d1e60db16d88103b9c1599b",
      "tree": "6d40bca213587f54fbc70228a41e9a09fb38b400",
      "parents": [
        "63999b33dc2741e40bdd184b40bbee1a9a3a8d4a"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 15:45:18 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 15:45:18 2026 +0000"
      },
      "message": "In Python 3, hashlib input data must be byte strings, not Unicode.\n\n* subversion/tests/cmdline/svntest/main.py\n  (trust_ssl_cert): Convert the location to bytes. This makes davautocheck\n   tests with USE_SSL\u003d1 work again.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931266 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "63999b33dc2741e40bdd184b40bbee1a9a3a8d4a",
      "tree": "5dbcdef8294118cfb55c4a61b8a255475f506a44",
      "parents": [
        "1b528961fa22c8e1bb537706f52d1661634d5397"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 15:35:16 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 15:35:16 2026 +0000"
      },
      "message": "Newest OpenSSL/httpd does not like server certificates with tiny keys.\n\n* subversion/tests/cmdline/davautocheck.sh: Regenerate the server certificate\n   and key with 2048-bit RSA instead of the previous 768-bit keys.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931265 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "1b528961fa22c8e1bb537706f52d1661634d5397",
      "tree": "8cebe1e0946a6b8fdff001179ec8729c6c8fecd5",
      "parents": [
        "7abfe5160d8497672256c17109d30c6527f3eb1f"
      ],
      "author": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 11:52:07 2026 +0000"
      },
      "committer": {
        "name": "Branko Čibej",
        "email": "brane@apache.org",
        "time": "Mon Jan 12 11:52:07 2026 +0000"
      },
      "message": "Fix warnings in the new checksum code.\n\n* subversion/libsvn_subr/checksum.c\n  (svn_checksum): Remove unused variable.\n* subversion/libsvn_subr/checksum_apr.c: Include \u003climits.h\u003e.\n  (svn_checksum__sha1, svn_checksum__sha1_ctx_update): Do not blindly cast\n   or implicitly narrow the data length. Check the limits first.\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931262 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "7abfe5160d8497672256c17109d30c6527f3eb1f",
      "tree": "333808987127e79948b2c32ba43bef6528ba5ffa",
      "parents": [
        "5c2c1ff8df2dfc0e4c4085e314587231032baf0e"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Jan 09 14:43:21 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Fri Jan 09 14:43:21 2026 +0000"
      },
      "message": "Clear out some not-needed-anymore stuff related to Serf.\n\n\n* subversion/libsvn_ra_serf/ra_serf.h\n  Remove SERF version check. The same check exists in configure.ac.\n  It doesn\u0027t (yet) exist in the CMake build system but it is discussed on dev@\n* subversion/include/private/svn_dep_compat.h\n  Remove the macro SERF_VERSION_AT_LEAST. It exists in all supported SERF\n  versions already.\n\nThread on dev@ https://lists.apache.org/thread/d20734r67zd4qrgx79tt82xl8g1z5g2r\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931194 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "5c2c1ff8df2dfc0e4c4085e314587231032baf0e",
      "tree": "b4173a68e190f529c5bb62781a65d28cf182370f",
      "parents": [
        "80c5d5fbdce0a82df157c2de121f16bfb5c5c5e3"
      ],
      "author": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Wed Jan 07 21:20:40 2026 +0000"
      },
      "committer": {
        "name": "Daniel Sahlberg",
        "email": "dsahlberg@apache.org",
        "time": "Wed Jan 07 21:20:40 2026 +0000"
      },
      "message": "Update checks for SERF 1.4.0 to check for SERF 1.5.0. There will never\nbe a SERF 1.4.0 release and these APIs are officially available from 1.5.0\nso it should not be a functional change but make things consistent.\n\n* subversion/libsvn_ra_serf/serf.c,\n  subversion/libsvn_ra_serf/update.c,\n  subversion/libsvn_ra_serf/update.c: Above\n\n\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931176 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "80c5d5fbdce0a82df157c2de121f16bfb5c5c5e3",
      "tree": "fe9a708305b35256c615d1029001f4cbc9d0478d",
      "parents": [
        "15e05d4e76774a3aa2ed46fad7b16d3cbe57cb9f"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 13:08:15 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 13:08:15 2026 +0000"
      },
      "message": "bcrypt: Use Win32 API directly when computing checksum without a context\ninstead of creating a context on stack. It\u0027s more convenient and it feels\nwrong to use our \"public\" API with additional custom manipulations here.\n\n* subversion/libsvn_subr/checksum_bcrypt.c\n  (bcrypt_checksum): Replace bcrypt_ctx_t with a plain BCRYPT_HANDLE, use\n   BCryptHashData() and BCryptFinishHash() instead of bcrypt_ctx_update() and\n   bcrypt_ctx_final().\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931095 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "15e05d4e76774a3aa2ed46fad7b16d3cbe57cb9f",
      "tree": "6d10728e8e3f6fc747ea429c231766c89ebc55ee",
      "parents": [
        "d3fab50f62f49ea7b49702ce6f59728499599e6a"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 12:48:14 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 12:48:14 2026 +0000"
      },
      "message": "bcrypt: Allocate buffer for checksum context object in a pool.\n\n* subversion/libsvn_subr/checksum_bcrypt.c\n  (bcrypt_ctx_t): Store a pointer to the object buffer to reuse later and\n   the pool where it can be allocated in delayed initialization.\n  (bcrypt_ctx_cleanup): Remove, because we no longer need to cleanup the buffer\n   manually -- it is allocated in a pool.\n  (bcrypt_ctx_init): Create the object buffer if it\u0027s NULL and supply it to\n   BCryptCreateHash().\n  (bcrypt_ctx_reset): memset object_buf with all-zeros instead of cleaning it\n   up via BCryptDestroyHash(). It\u0027s not mandatory to reset the memory but a\n   it\u0027s just a security consideration.\n  (svn_checksum__md5_ctx_create,\n   svn_checksum__sha1_ctx_create): Don\u0027t setup pool cleanup handler. Initialize\n   bcrypt_ctx.pool field.\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931094 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d3fab50f62f49ea7b49702ce6f59728499599e6a",
      "tree": "a5271dafe788357f945f95d757adf5c30e8f3670",
      "parents": [
        "366e9c6bed084989f838ba70b0efdbde1e1e355c"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 12:24:35 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 12:24:35 2026 +0000"
      },
      "message": "bcrypt: Eliminate heap allocations when computing checksum contextless of a\nsingle data block. Use forbidden alloca() function to create the buffer and\npass it to the initialization function. According to the documentation\n[1]#pbHashObject, we should not call BCryptDestroyHash() if non-null buffer\nis supplied.\n\n* subversion/libsvn_subr/checksum_bcrypt.c\n  (bcrypt_checksum): Manually initialize the context and the algorithm.\n   Remove BCryptDestroyHash() call.\n  \n[1] https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptcreatehash\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931093 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "366e9c6bed084989f838ba70b0efdbde1e1e355c",
      "tree": "298f17ec3b314ebe989d0502b88864dffd458b68",
      "parents": [
        "3b4cf7b3914bdeb6e941c2904a27f34320747682"
      ],
      "author": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 11:51:52 2026 +0000"
      },
      "committer": {
        "name": "Timofei Zhakov",
        "email": "rinrab@apache.org",
        "time": "Sun Jan 04 11:51:52 2026 +0000"
      },
      "message": "bcrypt: Follow-up to r1931082: Don\u0027t forget to cleanup context when resetting\nto prevent memory leak.\n\n* subversion/libsvn_subr/checksum_bcrypt.c\n  (bcrypt_ctx_reset): Call bcrypt_ctx_cleanup().\n\ngit-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1931091 13f79535-47bb-0310-9956-ffa450edef68\n"
    }
  ],
  "next": "3b4cf7b3914bdeb6e941c2904a27f34320747682"
}
