Checkout Tools
  • last updated 3 hours ago
Constraints: committers
Constraints: files
Constraints: dates

Changeset 1857435 is being indexed.

Reimplement fsfs private operations required by `svnfsfs` (stats, dump index,

load index) as "ioctls".

Technically we achieve this by introducing the new svn_fs_ioctl() API that

adds a generic way of performing backend-specific I/O operations.

This change serves two purposes:

- It allows us to properly expose FS-specific details and invoke FS-specific

operations everywhere without necessarily promoting them into a proper

public API (the ioctl code itself may be made either public or private,

depending on the requirements).

- It solves a potential dependency/linking problem where tools like `svnfsfs`

work through the libsvn_fs's loader, but also have to load and call private

APIs from libsvn_fs_fs thus ignoring the loader. The latter part may

potentially cause issues with the global shared state, etc. With the

patch, all such operations always go through the FS loader.

* subversion/include/svn_fs.h

(svn_fs_ioctl, SVN_FS_DECLARE_IOCTL_CODE, svn_fs_ioctl_code_t): New.

* subversion/include/svn_error_codes.h


* subversion/include/private/svn_fs_fs_private.h

(svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):

These functions are now implemented as...


SVN_FS_FS__IOCTL_LOAD_INDEX): ...these new ioctls, which ...

(svn_fs_fs__ioctl_get_stats_input_t, svn_fs_fs__ioctl_get_stats_output_t,

svn_fs_fs__ioctl_dump_index_input_t, svn_fs_fs__ioctl_load_index_input_t):

...use these new structures.

* subversion/libsvn_fs/fs-loader.h

(fs_library_vtable_t.ioctl, fs_vtable_t.ioctl): New vtable members.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_ioctl): Implement the new API by forwarding it to an appropriate

vtable member.

* subversion/libsvn_fs_fs/fs_fs.h

(svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):

These functions are now declared here.

* subversion/libsvn_fs_fs/fs.c

(): Include `svn_fs_fs_private.h`.

(fs_ioctl): Implement the ioctl dispatcher for three current fsfs-specific


(fs_vtable): Initialize the `ioctl` field.

(library_vtable): Initialize the `ioctl` field to NULL.

* subversion/libsvn_fs_fs/dump-index.c,



(): Tweak includes.

* subversion/libsvn_fs_base/fs.c

(library_vtable, fs_vtable): Initialize the `ioctl` field to NULL.

* subversion/libsvn_fs_x/fs.c

(library_vtable, fs_vtable): Initialize the `ioctl` field to NULL.

* subversion/svnfsfs/dump-index-cmd.c

(dump_index): Invoke an appropriate svn_fs_ioctl().

* subversion/svnfsfs/load-index-cmd.c

(load_index): Invoke an appropriate svn_fs_ioctl().

* subversion/svnfsfs/stats-cmd.c

(subcommand__stats): Invoke an appropriate svn_fs_ioctl().

* subversion/tests/libsvn_fs/fs-test.c

(test_unrecognized_ioctl): New test.

(test_funcs): Run the new test.

* subversion/tests/libsvn_fs_fs/fs-fs-private-test.c

(get_repo_stats, dump_index, load_index): Switch to svn_fs_ioctl().

* build.conf

(svnfsfs, fs-fs-private-test): Don't link to libsvn_fs_fs.

  1. … 3 more files in changeset.
Get rid of apr_int64_t format string check in swig py configure.

This check relied on APR implementation details and broke with APR 1.7.0.

Rather than trying to guess a perfect format string to use, just use the

largest possible format and cast the argument accordingly.

Should fix build against APR 1.7.0 and later.

Suggested by: brane

* build/ac-macros/swig.m4: Remove code related to SVN_APR_INT64_T_PYCFMT.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c

(svn_swig_py_client_blame_receiver_func): Stop relying on the

SVN_APR_INT64_T_PYCFMT constant from configure. Use "L" and

acast to PY_LONG_LONG instead.

publish: merge from staging
* staging/docs/release-notes/1.12.html

(github-issue): remove; no longer relevant

* staging/docs/release-notes/1.12.html

(issues): Mention the APR 1.7.0 build problem.

publish: merge from staging
* staging/docs/release-notes/1.12.html

(conflict-resolver): Document improved support for unversioned items.

publish: merge from staging

* staging/docs/release-notes/1.12.html: Document more client- and server-side

changes, based on items in the CHANGES file.

* publish: merge from staging

* staging/docs/release-notes/1.12.html

(conflict-resolver): Document resolver features added for 1.12.

* STATUS: Nominate r1857367.

* STATUS: Nominate r1857367.

* STATUS: Nominate r1857367.

Fix memory lifetime problem in a libsvn_wc error code path.

* subversion/libsvn_wc/wc_db_update_move.c

(suitable_for_move): Calling svn_sqlite__column_text() with a NULL result

pool twice means the result of the first call becomes invalid. Store the

child_relpath variable in a pool. It is passed to path_for_error_message()

later, after another call to svn_sqlite__column_text() with a NULL result

pool has already occurred.

Crash observed on OpenBSD:

#0 strlen () at /usr/src/lib/libc/arch/amd64/string/strlen.S:125

#1 0x00000c38d5de6db7 in svn_dirent_join (

base=0xc38dfe1ef00 "/home/stsp/svn/svn-1.12.0/subversion/tests/libsvn_wc/svn-test-work/working-copies/move_update_subtree",

component=0xc390ca94fc8 '\337' <repeats 55 times>, <incomplete sequence \337><error: Cannot access memory at address 0xc390ca95000>, pool=0xc38eeceff00)

at subversion/libsvn_subr/dirent_uri.c:1007

#2 0x00000c38f686a815 in path_for_error_message (wcroot=0xc387ee3d300,

local_relpath=0xc390ca94fc8 '\337' <repeats 55 times>, <incomplete sequence \337><error: Cannot access memory at address 0xc390ca95000>,

result_pool=0xc38eeceff00) at subversion/libsvn_wc/wc_db_update_move.c:167

#3 0x00000c38f686ad1f in suitable_for_move (wcroot=0xc387ee3d300,

local_relpath=0xc387efe4ce0 "A/B", scratch_pool=0xc38eeceff00)

at subversion/libsvn_wc/wc_db_update_move.c:2192

Post-release housekeeping: bump the 1.12.x branch to 1.12.1.
Tagging release 1.12.0
    • ?
On the '1.12.x' branch: sync 'CHANGES' from trunk.
Add a release date for 1.12.0.
* STATUS: Nominate VS2019 support.
* STATUS: Nominate VS2019 support.
Add support for generating Microsoft Visual Studio 2019 project files.

* build/generator/

(parse_options): Add magic numbers for Visual Studio 2019.

* publish/docs/community-guide/releasing.part.html: Revert mistaken r1855211.^M^MThanks to danielsh for pointing it out.
* STATUS: Nominate r1855419.

* STATUS: Nominate r1855419.

Create 1.11.x backport branch for r1855419.

* STATUS: Nominate r1855419.

Create 1.10.x backport branch for r1855419.

Fix conflict resolver bug where local and incoming edits got swapped.

When auto-resolving an incoming file move vs local file edit tree

conflict after an update or switch operation, text conflicts were

created with the incoming changes (theirs) and local changes (mine)

swapped within text conflict markers. When such a text conflict was

then resolved with the --accept mf/mc/tf/tc options the result was

the opposite of what it should have been.

Reported by: Jonathan Guy

* subversion/libsvn_client/conflicts.c

(resolve_incoming_move_file_text_merge): After update/switch, run the

text merge in a way that makes local and incoming changes properly

land on their respective sides of a text conflict.

Announce Subversion 1.12.0-rc1