Hi guys, thanks for looking into this in depth. It's been a while since I
made the change now but I can have a look into the issues you're
discussing. I didn't run any of the tests when making the change so it's
not too surprising.

On Mon, 25 May 2026 at 17:09, C. Michael Pilato <[email protected]> wrote:

> *ra*test linking:*  Interesting...  I wonder why it didn't bother my own
> build?
>
> *deprecated.c:*  I spotted the same inconsistency, but can't explain it.
> (Agree on the need for a follow-up commit for relocating other
> deprecated-destined methods.)
>
> *svnsync error:  *Not sure why you're seeing the error.  My nightly sync
> of repositories does an https-to-file sync, too, and seems to work fine.
> Here are the logs from Saturday morning's cron-driven run, which show the
> new notification:
>
> Sat May 23 01:00:01 AM EDT 2026 Syncing repositories
>> Syncing cmpilato.repos
>> Destination supports commit-time author and date; no post-commit revprop
>> sync needed.
>> Transmitting file data .
>> Committed revision 5206.
>> Transmitting file data .
>> Committed revision 5207.
>> Transmitting file data .
>> Committed revision 5208.
>
>
> Ahhhhh, wait a second.  You're doing the *opposite* direction --
> file-to-https -- aren't you?  Yeah, I didn't test that approach.
>
> Also, I noticed on a clean build that there remain some other places where
> now-deprecated methods are still used.
>
> subversion/libsvn_repos/fs-wrap.c: In function
>> 'svn_repos_fs_begin_txn_for_commit':
>> subversion/libsvn_repos/fs-wrap.c:207:3: warning:
>> 'svn_repos_fs_begin_txn_for_commit2' is deprecated
>> [-Wdeprecated-declarations]
>>   207 |   return svn_repos_fs_begin_txn_for_commit2(txn_p, repos, rev,
>> revprop_table,
>>       |   ^~~~~~
>> subversion/libsvn_repos/fs-wrap.c:181:1: note: declared here
>>   181 | svn_repos_fs_begin_txn_for_commit2(svn_fs_txn_t **txn_p,
>>       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
> So overall, it seems more work may be needed here.
>
> Jordan, I don't want to "take over" your contribution -- my patch
> revisions aimed to clean up just the kinds of administrivia that get
> understandably overlooked.  You clearly had the chops to make the initial
> patch, so do you have the bandwidth to respond to the concerns in this
> thread with a followup?
>
> -- Mike
>
> PS: Daniel, my God help you, 'cause if I'm your "only hope", you are, for
> all intents and purposes, hopeless. :-)
>
> On Sun, May 24, 2026 at 4:57 PM Daniel Sahlberg <
> [email protected]> wrote:
>
>> No need to be sorry.. I have enjoyed trying to figure this out, learnt a
>> lot about the build system!
>>
>> Unfortunately I think the patch to build.conf is patching the wrong
>> target, it seems to patch ra-test and not ra-local-test. I'm still running
>> with the patch of build.conf in my earlier mail.
>>
>> One thing I still don't understand is why ra-local-test suddenly need the
>> lib_repos library... if someone could explain it I would be happy!
>>
>> One more thing I don't understand: What is the purpose of deprecated.c? I
>> thought compatibility wrappers for deprecated functions go there (and in
>> that case, should the implementations of svn_repos_fs_begin_txn_for_commit2
>> and svn_repos_get_commit_editor5 be moved there)? However I see we are not
>> consistent, when svn_repos_fs_begin_txn_for_commit was deprecated in r
>> 863946 <https://svn.apache.org/r863946>, it was kept in fs-wrap.c. If we
>> should use deprecated.c, svn_repos_fs_begin_txn should probably move there
>> in a separate commit...
>>
>> I continued to investigate the davautocheck errors and tried to svnsync
>> to a repo on my main server (running Debian 12 based Subversion 1.14.2). I
>> got the following error message:
>> [[[
>> dsg@devi-25-01:~/svn_trunk4/subversion/svnsync$ ./svnsync initialize
>> https://svn.example.com/svn/synctest file:///home/dsg/repo/
>> Copied properties for revision 0.
>> dsg@devi-25-01:~/svn_trunk4/subversion/svnsync$ ./svnsync sync
>> https://svn.example.com/svn/synctest file:///home/dsg/repo/
>> subversion/svnsync/svnsync.c:1670,
>> subversion/svnsync/svnsync.c:1599,
>> subversion/libsvn_ra_serf/options.c:785:
>> (apr_err=SVN_ERR_UNKNOWN_CAPABILITY)
>> svnsync: E200026: Don't know anything about capability
>> 'commit-allow-rev-props'
>> dsg@devi-25-01:~/svn_trunk4/subversion/svnsync$
>> ]]]
>> I can read the error message well enough but I have absolutely know idea
>> where to start next... I think the quote goes: "Help me C. Michael Pilato,
>> you are my only hope" :-)
>>
>> (Until the error above is resolved, I'm inclined to say -1 to this patch.
>> However I'm very much a fan of this idea so I'd love to see it worked out).
>>
>> Thanks
>> Daniel
>>
>> PS. Full disclosure: './configure --prefix=/home/dsg/bin
>> --with-serf=/home/dsg/bin --enable-maintainer-mode --enable-debug
>> --enable-svnbrowse' and I'm running on a trunk build of Serf (2.0).
>>
>>
>> Den sön 24 maj 2026 kl 04:23 skrev C. Michael Pilato <[email protected]
>> >:
>>
>>> Okay, this patch includes the build.conf change, plus fixes some
>>> deprecation warning caused by newly deprecated methods not getting revved,
>>> and it passes "make check" for me.
>>>
>>> I know I *can* commit it outright, but I've just been away for too long
>>> to have that kind of confidence right now.  So I'm asking (along with
>>> Jordan) for additional eyes on the work.
>>>
>>> -- Mike
>>>
>>> PS: I configured this working copy with './configure
>>> --enable-maintainer-mode --with-lz4=internal --with-utf8proc=internal
>>> --enable-shared', for whatever that's worth.
>>>
>>>
>>> On Sat, May 23, 2026 at 10:05 PM C. Michael Pilato <
>>> [email protected]> wrote:
>>>
>>>> Sorry about this.  My update of the patch yesterday wasn't done with a
>>>> working copy in hand.  I was just literally editing the patch and crafting
>>>> the log message (on a machine without a working copy, even).
>>>>
>>>> Now, as I sit on the original machine I initially reviewed the patch
>>>> on, I see I made the same tweak to build.conf as well (back in February
>>>> when I first replied).  Let me clean this up a bit more and post a version
>>>> of the patch that at least works on my machine. :facepalm:
>>>>
>>>> -- Mike
>>>>
>>>> On Sat, May 23, 2026 at 8:17 AM Daniel Sahlberg <
>>>> [email protected]> wrote:
>>>>
>>>>> Thanks Mike for reviewing this.
>>>>>
>>>>> I couldn't apply the patch, I think this line is invalid:
>>>>> [[[
>>>>> o+ * of the revision via @a revprop_table.
>>>>> ]]]
>>>>> (Just noting for future reference)
>>>>>
>>>>> When building, I got a linking error
>>>>> [[[
>>>>> /usr/bin/x86_64-linux-gnu-ld.bfd:
>>>>> ../../../subversion/libsvn_ra_local/.libs/libsvn_ra_local-1.so: undefined
>>>>> reference to `svn_repos_get_commit_editor6'
>>>>> ]]]
>>>>>
>>>>> I tried to figure it out and reverted the use of
>>>>> svn_repos_get_commit_editor6 to svn_repos_get_commit_editor5 - that 
>>>>> worked.
>>>>> The only way I could get it to work with svn_repos_get_commit_editor6 was
>>>>> to change build.conf :
>>>>> [[[
>>>>> Index: build.conf
>>>>> ===================================================================
>>>>> --- build.conf  (revision 1934529)
>>>>> +++ build.conf  (working copy)
>>>>> @@ -1312,7 +1312,7 @@
>>>>>  path = subversion/tests/libsvn_ra_local
>>>>>  sources = ra-local-test.c
>>>>>  install = test
>>>>> -libs = libsvn_test libsvn_wc libsvn_ra_local libsvn_ra libsvn_fs
>>>>> libsvn_delta libsvn_subr
>>>>> +libs = libsvn_repos libsvn_test libsvn_wc libsvn_ra_local libsvn_ra
>>>>> libsvn_fs libsvn_delta libsvn_subr
>>>>>         apriconv apr
>>>>>
>>>>>  #
>>>>> ----------------------------------------------------------------------------
>>>>> ]]]
>>>>> Don't know if I messed up my WC in any way.
>>>>>
>>>>> make check run successfully.
>>>>>
>>>>> make davautocheck and make svnserveautocheck fails with:
>>>>> [[[
>>>>> FAIL:  svnsync_authz_tests.py 1: verify that unreadable content is not
>>>>> synced
>>>>> W: Unexpected output
>>>>> W: EXPECTED STDERR (match_all=True):
>>>>> W: ACTUAL STDERR:
>>>>> W: | svnsync: E200026: Don't know anything about capability
>>>>> 'commit-allow-rev-props'
>>>>> W: DIFF STDERR (match_all=True):
>>>>> W: | --- EXPECTED STDERR (match_all=True)
>>>>> W: | +++ ACTUAL STDERR
>>>>> W: | @@ -0,0 +1 @@
>>>>> W: | +svnsync: E200026: Don't know anything about capability
>>>>> 'commit-allow-rev-props'
>>>>> W: CWD: /home/dsg/svn_trunk4/subversion/tests/cmdline
>>>>> W: EXCEPTION: SVNLineUnequal
>>>>> ]]]
>>>>> (and repeated for all tests)
>>>>> Should it be resolved by updating test expectations or did I miss
>>>>> something running the test?
>>>>>
>>>>> Cheers,
>>>>> Daniel
>>>>>
>>>>>
>>>>>
>>>>> Den fre 22 maj 2026 kl 22:19 skrev C. Michael Pilato <
>>>>> [email protected]>:
>>>>>
>>>>>> Okay, I've touched up the @since and @deprecated lines of the patch
>>>>>> to point to 1.16 and 1.15, respectively.  I also took a crack at writing 
>>>>>> a
>>>>>> formal log message (which helped me also to more thoroughly review the
>>>>>> change).  I'm re-posting the patch (with inline log) here for something
>>>>>> like safekeeping.
>>>>>>
>>>>>> -- Mike
>>>>>>
>>>>>> On Mon, Feb 2, 2026 at 6:51 PM C. Michael Pilato <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> Actually, I did spot something that I think needs correction.  The
>>>>>>> "@since New in 1.15." annotations should say "New in 1.16", right?
>>>>>>>
>>>>>>> -- Mike
>>>>>>>
>>>>>>> On Sun, Feb 1, 2026 at 10:19 PM C. Michael Pilato <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Today, I setup a Subversion development environment for the first
>>>>>>>> time in ... more years than I can recall.  I can confirm that the test
>>>>>>>> suite passes with this patch, and that the patch itself makes sense to 
>>>>>>>> me.
>>>>>>>> I also used it for my own svnsync activity (I do nightly backups of
>>>>>>>> personal repositories), and it seems to work as advertised.
>>>>>>>>
>>>>>>>> Not gonna lie, I feel too "out of the game" to commit this patch
>>>>>>>> outright.  But, I *am* comfortable giving a +1 on it, for whatever
>>>>>>>> that nuance might mean.
>>>>>>>>
>>>>>>>> -- Mike
>>>>>>>>
>>>>>>>> On Sat, Jan 31, 2026 at 2:48 PM Timofei Zhakov <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> On Thu, Jan 29, 2026 at 10:47 PM Jordan Peck via dev <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Hi all,
>>>>>>>>>>
>>>>>>>>>> I'd like to propose a patch that optimises svnsync when
>>>>>>>>>> synchronizing to
>>>>>>>>>> local filesystem repositories (file:// URLs). Currently, svnsync
>>>>>>>>>> performs
>>>>>>>>>> a two-step process for each revision:
>>>>>>>>>>
>>>>>>>>>>   1. Commit the revision content (author/date are set to the
>>>>>>>>>> current
>>>>>>>>>>      user and current time)
>>>>>>>>>>   2. Update svn:author and svn:date revision properties to match
>>>>>>>>>> the
>>>>>>>>>>      source repository
>>>>>>>>>>
>>>>>>>>>> This works but is inefficient for file:// URLs where we have
>>>>>>>>>> direct
>>>>>>>>>> repository access and can set these properties correctly during
>>>>>>>>>> the
>>>>>>>>>> initial commit.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> THE PROBLEM
>>>>>>>>>> -----------
>>>>>>>>>>
>>>>>>>>>> When svnsync replays a revision from a source repository, the
>>>>>>>>>> commit
>>>>>>>>>> is created with the local user as the author and the current time
>>>>>>>>>> as
>>>>>>>>>> the date. After the commit completes, svnsync then makes separate
>>>>>>>>>> svn_ra_change_rev_prop2() calls to update svn:author and svn:date
>>>>>>>>>> to
>>>>>>>>>> match the source repository.
>>>>>>>>>>
>>>>>>>>>> For remote servers (svn://, http://), this two-step process is
>>>>>>>>>> necessary
>>>>>>>>>> because the server enforces its own author/date policies.
>>>>>>>>>> However, for
>>>>>>>>>> file:// URLs via ra_local, we have direct access to the
>>>>>>>>>> repository and
>>>>>>>>>> can bypass this limitation.
>>>>>>>>>>
>>>>>>>>>> We have an SVN server acting as the slave via the Apache module
>>>>>>>>>> proxy,
>>>>>>>>>> the slave server is kept in sync with the master using svnsync.
>>>>>>>>>> This
>>>>>>>>>> two-step approach has caused issues with various tools that
>>>>>>>>>> monitor the
>>>>>>>>>> slave SVN server for new revisions, they will occasionally get
>>>>>>>>>> the data
>>>>>>>>>> for a synced revision that hasn't yet had the revision properties
>>>>>>>>>> copied. Having the sync be a single atomic operation means this
>>>>>>>>>> can
>>>>>>>>>> never happen.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> THE SOLUTION
>>>>>>>>>> ------------
>>>>>>>>>>
>>>>>>>>>> This patch introduces a new RA capability
>>>>>>>>>> "commit-allow-rev-props" that
>>>>>>>>>> ra_local advertises. When svnsync detects this capability on the
>>>>>>>>>> destination repository, it:
>>>>>>>>>>
>>>>>>>>>>   1. Includes svn:author and svn:date in the initial commit's
>>>>>>>>>> revprop
>>>>>>>>>>      table (instead of filtering them out)
>>>>>>>>>>
>>>>>>>>>>   2. ra_local now conditionally preserves these properties:
>>>>>>>>>>      - svn:author is only set to the session user if not already
>>>>>>>>>> provided
>>>>>>>>>>      - If svn:date is provided, the SVN_FS_TXN_CLIENT_DATE flag
>>>>>>>>>> is passed
>>>>>>>>>>        to svn_fs_begin_txn2() so the filesystem uses that date
>>>>>>>>>>
>>>>>>>>>>   3. Skips the post-commit revprop update step since author/date
>>>>>>>>>> are
>>>>>>>>>>      already correct
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> CHANGES OVERVIEW
>>>>>>>>>> ----------------
>>>>>>>>>>
>>>>>>>>>> subversion/include/svn_ra.h:
>>>>>>>>>>   - Added SVN_RA_CAPABILITY_COMMIT_ALLOW_REV_PROPS capability
>>>>>>>>>> definition
>>>>>>>>>>
>>>>>>>>>> subversion/include/svn_repos.h:
>>>>>>>>>>   - Added svn_repos_fs_begin_txn_for_commit3() with flags
>>>>>>>>>> parameter
>>>>>>>>>>   - Added svn_repos_get_commit_editor6() with txn_flags parameter
>>>>>>>>>>
>>>>>>>>>> subversion/libsvn_repos/fs-wrap.c:
>>>>>>>>>>   - Implemented svn_repos_fs_begin_txn_for_commit3() which passes
>>>>>>>>>> flags
>>>>>>>>>>     (including SVN_FS_TXN_CLIENT_DATE) to svn_fs_begin_txn2()
>>>>>>>>>>
>>>>>>>>>> subversion/libsvn_repos/commit.c:
>>>>>>>>>>   - Added txn_flags to edit_baton structure
>>>>>>>>>>   - Implemented svn_repos_get_commit_editor6() to support
>>>>>>>>>> txn_flags
>>>>>>>>>>   - Updated open_root() to use the new begin_txn function
>>>>>>>>>>
>>>>>>>>>> subversion/libsvn_ra_local/ra_plugin.c:
>>>>>>>>>>   - Advertises SVN_RA_CAPABILITY_COMMIT_ALLOW_REV_PROPS
>>>>>>>>>>   - Modified get_commit_editor to preserve caller-provided
>>>>>>>>>> author/date
>>>>>>>>>>   - Sets SVN_FS_TXN_CLIENT_DATE when date is provided in revprops
>>>>>>>>>>
>>>>>>>>>> subversion/svnsync/svnsync.c:
>>>>>>>>>>   - Detects the new capability on the destination
>>>>>>>>>>   - When capability is present, includes author/date in commit
>>>>>>>>>> revprops
>>>>>>>>>>   - Skips post-commit revprop sync when capability is present
>>>>>>>>>>   - Updated user-facing messages to reflect the optimization
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> USER-VISIBLE CHANGES
>>>>>>>>>> --------------------
>>>>>>>>>>
>>>>>>>>>> When synchronizing to a file:// URL, svnsync now displays:
>>>>>>>>>>
>>>>>>>>>>   Destination supports commit-time author and date; no post-commit
>>>>>>>>>>   revprop sync needed.
>>>>>>>>>>   Committed revision 1.
>>>>>>>>>>   Committed revision 2.
>>>>>>>>>>   ...
>>>>>>>>>>
>>>>>>>>>> Instead of the previous:
>>>>>>>>>>
>>>>>>>>>>   Committed revision 1.
>>>>>>>>>>   Copied properties for revision 1.
>>>>>>>>>>   Committed revision 2.
>>>>>>>>>>   Copied properties for revision 2.
>>>>>>>>>>   ...
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> BENEFITS
>>>>>>>>>> --------
>>>>>>>>>>
>>>>>>>>>> 1. Atomicity: Author and date are set in the same transaction as
>>>>>>>>>> the
>>>>>>>>>>    commit, rather than being updated afterward.
>>>>>>>>>>
>>>>>>>>>> 2. No behavioral change for remote servers: The optimization only
>>>>>>>>>>    applies when the destination advertises the capability, so
>>>>>>>>>> svn://
>>>>>>>>>>    and http:// synchronization continues to work as before.
>>>>>>>>>>
>>>>>>>>>> 3. Reduced I/O: Eliminates separate revprop change operations for
>>>>>>>>>> each
>>>>>>>>>>    revision synced to a file:// destination.
>>>>>>>>>>
>>>>>>>>>> COMPATIBILITY
>>>>>>>>>> -------------
>>>>>>>>>>
>>>>>>>>>> - The new capability is only advertised by ra_local, so this is a
>>>>>>>>>>   client-side optimization with no server protocol changes.
>>>>>>>>>>
>>>>>>>>>> - Existing svnsync mirrors continue to work unchanged.
>>>>>>>>>>
>>>>>>>>>> - The new API functions (svn_repos_fs_begin_txn_for_commit3 and
>>>>>>>>>>   svn_repos_get_commit_editor6) maintain backward compatibility
>>>>>>>>>>   through wrapper functions.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> TESTING
>>>>>>>>>> -------
>>>>>>>>>>
>>>>>>>>>> I have tested this with svnsync to file:// URLs and verified that:
>>>>>>>>>> - Revision properties (author, date, log) match the source
>>>>>>>>>> repository
>>>>>>>>>> - The new optimization message appears at sync start
>>>>>>>>>> - No "Copied properties" messages appear
>>>>>>>>>> - Subsequent incremental syncs work correctly
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Please review and let me know if you have any questions or
>>>>>>>>>> suggestions.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Jordan Peck
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> +1
>>>>>>>>>
>>>>>>>>> I didn't look into the patch in detail, but the idea sounds good
>>>>>>>>> to me.
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Timofei Zhakov
>>>>>>>>>
>>>>>>>>

Reply via email to