Jordan Peck <jordan.me2@gmail.com> (jpeck)


Patch
r1935862, r1935857, r1935844, r1935843, r1935831, r1935830, r1935828, r1935663

r1935663 | jpeck | 2026-06-26 15:10:09 +0000 (Fri, 26 Jun 2026)

Add myself to COMMITTERS

r1935828 | jpeck | 2026-07-03 10:42:05 +0000 (Fri, 03 Jul 2026)

Create branch for mod_dav_svn proxy fix for move/copy operations
See: https://lists.apache.org/thread/blwxmspvj4k97zdhhqs43sml39hmy04x

r1935830 | jpeck | 2026-07-03 11:11:39 +0000 (Fri, 03 Jul 2026)

Harden the DAV mirror tests in dav-mirror-autocheck.sh:

- Use distinct master/slave locations so the proxy actually translates paths

- Assert the decoded "branch new/" name in the master repo
rather than only checking commit exit status (a double-encoded
destination could otherwise pass silently)

- Drop the removed neon http-library option and libsvn_ra_neon from LD_LIBRARY_PATH

- Switch the exit-status checks to the "|| fail" idiom

r1935831 | jpeck | 2026-07-03 11:22:47 +0000 (Fri, 03 Jul 2026)

Fix mod_dav_svn write-through proxy mangling of COPY/MOVE Destination headers.
See: https://lists.apache.org/thread/blwxmspvj4k97zdhhqs43sml39hmy04x

When proxying a COPY or MOVE to the master, the Destination header still
pointed at the slave and was never translated, so cross-location commits
(and paths containing characters like spaces) failed or were mis-encoded.

Adds a new helper function proxy_request_fixup_destination() that rewrites
a request's destination header from the slave location to the master URI,
keeping the path encoded exactly once.

r1935843 | jpeck | 2026-07-03 14:35:34 +0000 (Fri, 03 Jul 2026)

Run dav-mirror-autocheck.sh (mod_dav_svn) tests in davautocheck.sh

r1935844 | jpeck | 2026-07-03 14:37:23 +0000 (Fri, 03 Jul 2026)

Add tests to dav-mirror-autocheck.sh to catch SVN-3445
Tests committing a file with:
- Master server URL: PASS
- Slave server URL: XFAIL

r1935857 | jpeck | 2026-07-03 18:48:06 +0000 (Fri, 03 Jul 2026)

Create branch for svnsync atomic author/timestamp when syncing to a file:// path
See discussion here: https://lists.apache.org/thread/qnxqd4whjp62rk2pgndt8xyp40oqnom2

r1935862 | jpeck | 2026-07-03 20:59:45 +0000 (Fri, 03 Jul 2026)

On the 'svnsync-atomic-author' branch:

Let svnsync set svn:author and svn:date in the commit itself when the
destination supports it, instead of patching them up with a post-commit
revprop change. This makes mirroring a revision atomic for ra_local
destinations and removes the window where a mirrored revision briefly
carries the wrong author and date.

See discussion: https://lists.apache.org/thread/qnxqd4whjp62rk2pgndt8xyp40oqnom2

Introduce SVN_RA_CAPABILITY_COMMIT_PRESERVES_AUTHOR_DATE, advertised by
ra_local and wired through the standard capability negotiation for svn://
and http:// so future servers can opt in without client changes. Rev the
repos-layer commit APIs to carry transaction flags (SVN_FS_TXN_CLIENT_DATE).

* subversion/include/svn_ra.h
  (SVN_RA_CAPABILITY_COMMIT_PRESERVES_AUTHOR_DATE): New capability.
  (svn_ra_get_commit_editor3): Allow svn:author/svn:date in REVPROP_TABLE
    when the session advertises the new capability.

* subversion/include/svn_ra_svn.h
  (SVN_RA_SVN_CAP_COMMIT_PRESERVES_AUTHOR_DATE): New wire capability.

* subversion/include/svn_dav.h
  (SVN_DAV_NS_DAV_SVN_COMMIT_PRESERVES_AUTHOR_DATE): New OPTIONS header token.

* subversion/include/svn_repos.h
  (svn_repos_get_commit_editor6, svn_repos_fs_begin_txn_for_commit3): New,
    taking TXN_FLAGS.
  (svn_repos_get_commit_editor5, svn_repos_fs_begin_txn_for_commit2):
    Deprecate.

* subversion/include/private/svn_repos_private.h
  (svn_repos__get_commit_ev2): Take TXN_FLAGS.

* subversion/libsvn_repos/commit.c
  (edit_baton): Add TXN_FLAGS.
  (open_root): Pass them to svn_repos_fs_begin_txn_for_commit3().
  (svn_repos_get_commit_editor6, svn_repos__get_commit_ev2): Accept and
    forward TXN_FLAGS.

* subversion/libsvn_repos/fs-wrap.c
  (svn_repos_fs_begin_txn_for_commit3): New revision of ..._commit2(),
    OR-ing TXN_FLAGS into SVN_FS_TXN_CHECK_LOCKS.
  (svn_repos_fs_begin_txn_for_commit): Move to deprecated.c.

* subversion/libsvn_repos/deprecated.c
  (svn_repos_get_commit_editor5, svn_repos_fs_begin_txn_for_commit2,
   svn_repos_fs_begin_txn_for_commit): Implement as wrappers.

* subversion/libsvn_ra_local/ra_plugin.c
  (prepare_commit_revprops): New helper: default svn:author to the session
    username only when absent, and request SVN_FS_TXN_CLIENT_DATE iff the
    caller supplied svn:date.
  (svn_ra_local__get_commit_editor, svn_ra_local__get_commit_ev2): Use it.
  (svn_ra_local__has_capability): Advertise the new capability.

* subversion/libsvn_ra_svn/client.c
  (ra_svn_has_capability): Map the new capability to its wire word.

* subversion/libsvn_ra_serf/options.c
  (capabilities_headers_iterator_callback, options_response_handler):
    Parse and pre-seed the new capability.

* subversion/mod_dav_svn/activity.c (dav_svn__create_txn),
  subversion/mod_dav_svn/lock.c (append_locks),
  subversion/svnserve/serve.c (commit):
    Track the API revs; no functional change.

* subversion/svnsync/svnsync.c
  (is_svnsync_prop): New helper.
  (replay_baton_t, resolve_revprop_handling): Resolve once per sync how
    revprops split between the commit and a follow-up revprop update.
  (replay_rev_started, replay_rev_finished, do_synchronize): Use that
    decision; skip the follow-up pass entirely when the commit carries
    author/date.

* subversion/tests/libsvn_repos/repos-test.c
  (commit_add_file, commit_editor_preserve_revprops): New test for both
    SVN_FS_TXN_CLIENT_DATE polarities via the commit editor.

* subversion/tests/cmdline/svnsync_tests.py
  (sync_to_local_preserves_author_date): New test: an ra_local sync
    preserves author/date with no post-commit revprop copy.