subversion

Checkout Tools
  • last updated 2 hours ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
When compiling SQLite, enable the SQLITE_OMIT_WAL compile-time option.

We don't use WAL (write-ahead logging) feature of SQLite, but just keeping it

enabled has a visible I/O performance penalty, because SQLite has to check if

the write-ahead log file is present on disk. In a couple of my experiments,

disabling this feature resulted in a ~10% faster `svn st` on a large working

copy.

* subversion/libsvn_subr/sqlite3wrapper.c

(): Define SQLITE_OMIT_WAL.

When compiling SQLite, set the SQLITE_DEFAULT_MEMSTATUS=0 compile-time option.

This is the recommended option that is not enabled by default. Setting it to

zero avoids using a mutex (and thus suffering a performance penalty) during

every sqlite3_malloc() call, where this mutex is used to properly update the

allocations stats. We don't use sqlite3_status(), so set this option to zero.

See https://sqlite.org/compile.html#recommended_compile_time_options

* subversion/libsvn_subr/sqlite3wrapper.c

(): Define SQLITE_DEFAULT_MEMSTATUS=0.

Win32: fix an incorrect error status being propagated to the caller in case

where we fail to stat the destination path while being in the middle of a

failed rename.

So, if we fail to stat the destination in the middle of such rename, propagate

the *original* error. Because overriding the original error with the new one

loses information about the actual cause of failure and may even confuse some

of the callers, who for instance attempt to recover in case of an EACCES,

since they may not be receiving that error at all.

(This is the behavior we had for a long time, even before r1865518, but now

seems to be an appropriate moment to fix that)

* subversion/libsvn_subr/io.c

(win32_file_rename): Use a separate `stat_err` for the case of the failed

GetFileAttributes() call. If we failed to stat the file, return the

original `err` status to the caller.

* subversion/libsvn_subr/io.c

(win32_file_rename): Rename `status` to `err`. This lays the groundwork for

fixing the incorrect error status being propagated to the caller in case

where we fail to stat the destination path while being in the middle of

a failed rename.

Win32: prevent svn_io_file_rename2() from spinning in the retry loop in a

racy case where the rename function clears the read-only attribute from the

destination file, but another thread or process is quick enough to set it

back before the original rename function has a chance to proceed.

Despite sounding like an uncommon case, this may happen when the API is

being used to atomically update the file contents while also altering its

read-only attribute (and where such updates can occur in parallel).

Fix this by including the call that clears the read-only attribute on the

destination into the retry loop instead of calling it only once before

looping.

* subversion/libsvn_subr/io.c

(win32_file_rename): Handle EACCES/EEXIST and attempt to clear the

destination read-only attribute if it's there.

(svn_io_file_rename2): Don't call svn_io_set_file_read_write() in the

Win32-specific portion of this function, since clearing the read-only

attribute is now a part of the win32_file_rename() function.

* subversion/mod_dav_svn/repos.c

(get_resource): Following up on r1850651: Set cleanup handler for

FS warning logging regardless of presence of R->USER.

Patch by: sergey.raevskiy{_AT_}visualsvn.com

Fix 'svn patch' setting UNIX permissions to 0600 on patched files with props.

* subversion/libsvn_client/patch.c

(init_patch_target): Use the working copy's own temp directory to store

temporary files for patching, instead of using the system-wide temp dir.

With a system-wide dir, permission paranoia in svn_io_open_unique_file3()

may kick in and result in patched files with permissions not matching the

umask. Generally, any temp files that may end up as user-visible files

in the working copy should be created in the working copy's temp dir.

Reported by: Doug Robinson at wandisco com

* tools/buildbot/slaves/bb-openbsd/svncheck.sh: Stop testing BDB.

* tools/dev/unix-build/Makefile.svn: Provide a way to override repository

backends tested during 'make svn-check'.

fsfs, fsx: Make an error message clearer to developers.

* subversion/libsvn_fs_fs/low_level.c

(svn_fs_fs__parse_footer),

* subversion/libsvn_fs_x/low_level.c

(svn_fs_x__parse_footer):

Make the output radix explicit, so the values aren't mistaken for decimal.

(Actually, I wonder why the values aren't printed in decimal to begin with.)

Fix link flags and include directory in pkg-config template

* build/generator/gen_make.py

(write_pkg_config_dot_in_files): Add version variable for template.

Include version in link flag for svn lib.

* build/generator/templates/pkg-config.in.ezt:

(): Add /subversion-1 to include path

Fix format of Requires(.private) fields in pkg-config files

Per pkg-config(1), the field "is a comma-separated list of packages that are

required by your package", not a space-separated field.

* build/generator/templates/pkg-config.in.ezt

(): Generate comma-separated lists for Requires(.private)

* configure.ac:

(old_gnome_keyring): Use a comma separated list for SVN_GNOME_KEYRING_PCLIBS

Add 'Reply-To: users@' in the 'release.py write-announcement' templates.
Fix 'release.py sign-candidates' for future versions >= 2.0.

* tools/dist/release.py

(sign_candidates): Fix the version number comparison.

Fix release.py check-sigs/write-downloads: 1.9.1 matched also 1.9.10, etc.

* tools/dist/release.py

(get_fileinfo): Tighten the version-match glob expression.

(check_sigs): Use get_fileinfo() instead of its own glob expression.

Fix broken cleanup in svn_load_dirs.pl.

* contrib/client-side/svn_load_dirs/svn_load_dirs.pl.in (DESTROY):

Change cwd to the parent of the directory to remove.

Patch by: Geoffrey Alary <geoffrey.alary{_AT_}gmail.com>

* CHANGES: Bump patch release version numbers.

I forgot to merge CHANGES to the release branches, so will re-roll the releases.

Update 'CHANGES' for the upcoming 1.12, 1.10, 1.9 releases.
Do not print password to screen in svn_load_dirs.pl.

* contrib/client-side/svn_load_dirs/svn_load_dirs.pl.in

(sanitize_pwd): New function.

(safe_read_from_pipe, read_from_process): Update the sites printing

the command line to screen to use sanitize_pwd.

(usage): Warn that other local OS users may be able to see the

password passed on the command-line.

Fix indentation; that is, replace the 2 tab occurrences by 8 spaces.

Patch by: Geoffrey Alary <geoffrey.alary{_AT_}gmail.com>

Win32: tweak the SSL certificate validation override to avoid hitting the wire

for URL based objects and revocation checks.

The primary purpose of this callback is to resolve SVN_AUTH_SSL_UNKNOWNCA

failures using CryptoAPI and Windows local certificate stores. To do so, we

should be fine with just using the immediately available data on the local

machine.

Doing the opposite of that appears to be troublesome, as always connecting

to remote CRL and OCSP endpoints can result in spurious errors or significant

(user-reported) network stalls caused by timeouts if the endpoints are

inaccessible or unreliable.

The new approach should also be in par with the default basic behavior of

several major browsers, for example:

https://chromium.googlesource.com/chromium/src/net/+/3d1dad1c17ae3ff59e7c35841af94b66f4bca1ba/cert/cert_verify_proc_win.cc#919

* subversion/libsvn_subr/win32_crypto.c

(windows_validate_certificate): Use the CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL

and CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY flags when preparing the

certificate chain. Ignore errors in obtaining valid revocation information

when verifying the chain, as they could be induced by the new cache-only

behavior.

In svnserve, consistently handle errors in opening a repository.

These errors are still logged and reported to the client, as they were

before, but now it is done in the same way as everywhere else. (The error

logging now happens higher up the call stack.)

* subversion/svnserve/serve.c

After reporting an error to the client, don't log it explicity here and

then clear it; instead return it so the caller can do so.

Adjust expectations of a new test to account for differences between RA

layers. A follow-up to r1860936.

* subversion/tests/libsvn_ra/ra-test.c

(test_get_deleted_rev_errors): Expect a generic error code when running

over HTTP, otherwise the specific error code for this error case.

Provide a way for svnserve's 'get-deleted-rev' API to return 'not deleted'.

Previously the answer 'not deleted' was indistinguishable from an error when

using the svnserve protocol.

The standard 'svn' client software does not appear to invoke this case, but

it is meant to be a valid answer and is supported by the other repository

access protocols.

To work around the problem without changing the protocol, we re-purpose the

obsolete error code 'SVN_ERR_ENTRY_MISSING_REVISION' to communicate this

'not deleted' reply to the client.

(Re-purposing an old error code was not essential. An alternative would be

to create a new error code which would become part of the public API in the

next minor release, but would be deemed non-public when backported to older

release lines.)

Behaviour changes:

- With a new client against a new server, such queries are now handled

correctly.

- With an old client against a new server, the client will report a more

informative error message.

- With a new client against an old server, there is no improvement.

* subversion/svnserve/serve.c

(get_deleted_rev): If the answer is SVN_INVALID_REVNUM, return a

SVN_ERR_ENTRY_MISSING_REVISION error to the client.

* subversion/libsvn_ra_svn/client.c

(ra_svn_get_deleted_rev): Convert the error SVN_ERR_ENTRY_MISSING_REVISION

back to a response of SVN_INVALID_REVNUM.

* subversion/tests/libsvn_ra/ra-test.c

(commit_two_changes): New.

(test_get_deleted_rev_no_delete,

test_get_deleted_rev_errors): New tests.

(test_funcs): Run them.

Update table of contents to match actual section names in INSTALL.

Update Sqlite query parsing code in wc-queries-test to handle some new

intermediate explanation lines without warnings.

* subversion/tests/libsvn_wc/wc-queries-test.c

(explanation_item): Add some booleans.

(parse_explanation_item): Allow a few more constructs that caused

unneeded warnings.

* build/generator/gen_vcnet_vcproj.py

(quote_value): Fix yet another stupid bug introduced by remote testing :(.

* build/generator/gen_win.py

(quote_define): Fix another stupid typo.

Following up on r1860175, fix typo in python code.

* build/generator/gen_vcnet_vcproj.py

(quote_define): Add missing ':'.

Fix compiling Subversion with Visual Studio 2005 and 2008 by properly escaping

the e-mail address we use for the Win32 crash handler.

* build/generator/gen_vcnet_vcproj.py

(quote_define): New function

* build/generator/gen_win.py

(get_win_defines): Quote e-mail address in defines.

(quote_define): Add function (stub).

* subversion/libsvn_subr/io.c

(io_win_check_path): Tweak comment, no functional changes.