Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: apache/subversion
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: trunk
Choose a base ref
...
head repository: apache/subversion
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: svnsync-atomic-author
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 2 commits
  • 17 files changed
  • 1 contributor

Commits on Jul 3, 2026

  1. Configuration menu
    Copy the full SHA
    aacf58c View commit details
    Browse the repository at this point in the history
  2. 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
     * is committed; otherwise it will be overwritten with the commit
     *
     * @SInCE New in 1.16.
    
                                       svn_repos_t *repos,
    t32_t txn_flags,
                                       apr_pool_t *pool);
    
    
    /** Like svn_repos_fs_begin_txn_for_commit3(), but with @A flags
    /** Like svn_repos_fs_begin_txn_for_commit3(), but with @A txn_flags
     * set to #SVN_FS_TXN_CHECK_LOCKS only.
     *
     * @note @A revprop_table may contain an #SVN_PROP_REVISION_DATE property,
    
      Read 1 file
    
    ● Update(subversion\libsvn_repos\fs-wrap.c)
    Added 1 line, removed 1 line
                                       svn_repos_t *repos,
                                       svn_revnum_t rev,
    _t *pool)
    {
      apr_array_header_t *revprops;
    
    ● Update(subversion\libsvn_repos\fs-wrap.c)
    Added 1 line, removed 1 line
      /* Begin the transaction, ask for the fs to do on-the-fly lock checks.
         We fetch its name, too, so the start-commit hook can use it.  */
      SVN_ERR(svn_fs_begin_txn2(&txn, repos->fs, rev,
                                SVN_FS_TXN_CHECK_LOCKS | flags, pool));
                                SVN_FS_TXN_CHECK_LOCKS | txn_flags, poo
      err = svn_fs_txn_name(&txn_name, txn, pool);
      if (err)
        return svn_error_compose_create(err, svn_fs_abort_txn(txn, pool));
    
    Fix 5c — state commit_callback nullability on editor6 directly (replacing the stale pre-1.6 parenthetical):
    
    ● Update(subversion\include\svn_repos.h)
    Added 1 line, removed 2 lines
     * returns an error, that error will be returned from @c close_edit,
     * otherwise if there was a post-commit hook failure, then that error
     * will be returned with code SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED.
     * (Note that prior to Subversion 1.6, @A commit_callback cannot be @c NULL;
     * if you don't need a callback, pass a dummy function.)
     * @A commit_callback may be @c NULL.
     *
     * Calling @A (*editor)->abort_edit aborts the commit, and will also
     * abort the commit transaction unless @A txn was supplied (not @c
    You've hit your session limit · resets 9:50pm (Europe/London)
    /upgrade or /usage-credits to finish what you’re working on.
    
    ✻ Baked for 5m 21s
    
    ❯ Can you put together a brief commit message for this change
    
    Here's a commit message in the Apache Subversion log-message convention (summary paragraph plus per-file annotations), ready for svn commit -F:
    
    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
    ent 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):
    
    * 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
    
      (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
     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.
    
    git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/svnsync-atomic-author@1935862 13f79535-47bb-0310-9956-ffa450edef68
    Jordan Peck committed Jul 3, 2026
    Configuration menu
    Copy the full SHA
    e38fe91 View commit details
    Browse the repository at this point in the history
Loading