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

Changeset 1460176 is being indexed.

Use svn_hash_gets and svn_hash_sets.

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c

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

* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c

* subversion/libsvn_auth_gnome_keyring/gnome_keyring.c

* subversion/libsvn_client/commit.c

* subversion/libsvn_delta/compat.c

* subversion/libsvn_delta/editor.c

* subversion/libsvn_diff/parse-diff.c

* subversion/libsvn_diff/util.c

* subversion/libsvn_fs/access.c

* subversion/libsvn_fs_base/bdb/changes-table.c

* subversion/libsvn_fs_base/dag.c

* subversion/libsvn_fs_base/fs.c

* subversion/libsvn_fs_base/lock.c

* subversion/libsvn_fs_base/revs-txns.c

* subversion/libsvn_fs_base/tree.c

* subversion/libsvn_fs_fs/fs_fs.c

* subversion/libsvn_fs_fs/lock.c

* subversion/libsvn_fs_fs/temp_serializer.c

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_fs_util/fs-util.c

* subversion/libsvn_ra/compat.c

* subversion/libsvn_ra/deprecated.c

* subversion/libsvn_ra/ra_loader.c

* subversion/libsvn_ra_local/ra_plugin.c

* subversion/libsvn_ra_serf/blame.c

* subversion/libsvn_ra_serf/blncache.c

* subversion/libsvn_ra_serf/commit.c

* subversion/libsvn_ra_serf/getlocations.c

* subversion/libsvn_ra_serf/getlocationsegments.c

* subversion/libsvn_ra_serf/getlocks.c

* subversion/libsvn_ra_serf/inherited_props.c

* subversion/libsvn_ra_serf/log.c

* subversion/libsvn_ra_serf/merge.c

* subversion/libsvn_ra_serf/mergeinfo.c

* subversion/libsvn_ra_serf/options.c

* subversion/libsvn_ra_serf/property.c

* subversion/libsvn_ra_serf/serf.c

* subversion/libsvn_ra_serf/update.c

* subversion/libsvn_ra_serf/util.c

* subversion/libsvn_ra_serf/xml.c

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/editorp.c

* subversion/libsvn_ra_svn/marshal.c

* subversion/mod_dav_svn/activity.c

* subversion/mod_dav_svn/lock.c

* subversion/mod_dav_svn/merge.c

* subversion/mod_dav_svn/reports/update.c

* subversion/mod_dav_svn/repos.c

* subversion/mod_dav_svn/version.c

* subversion/svn/cl-conflicts.c

* subversion/svn/commit-cmd.c

* subversion/svn/conflict-callbacks.c

* subversion/svn/help-cmd.c

* subversion/svn/propedit-cmd.c

* subversion/svn/propget-cmd.c

* subversion/svn/status-cmd.c

* subversion/svn/status.c

* subversion/svn/svn.c

* subversion/svn/util.c

* subversion/svnadmin/svnadmin.c

* subversion/svndumpfilter/svndumpfilter.c

* subversion/svnlook/svnlook.c

* subversion/svnmucc/svnmucc.c

* subversion/svnrdump/dump_editor.c

* subversion/svnrdump/load_editor.c

* subversion/svnrdump/svnrdump.c

* subversion/svnrdump/util.c

* subversion/svnserve/serve.c

* subversion/svnsync/svnsync.c

* subversion/svnsync/sync.c

  1. … 70 more files in changeset.
For now (1.8), make svn_fs__canonicalize_abspath always allocate the result

in POOL and re-introduce svn_fs__is_canonical_abspath as a way of checking

that the path content would change.

In the future (1.9), we will hopefully be able to rev the FS API layer and

eliminate the need for canonicalization with the FS implementation.

* subversion/include/private/svn_fs_util.h

(svn_fs__is_canonical_abspath): re-introduce

(svn_fs__canonicalize_abspath): update docstring

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__is_canonical_abspath): implement

(svn_fs__canonicalize_abspath): always duplicate PATH; optimize string

termination code

* subversion/libsvn_fs_fs/tree.c


get_dag): update

Suggested by: cmpilato

  1. … 2 more files in changeset.
* subversion/libsvn_fs_util/fs-util.c

(is_canonical_abspath): Tweak docs, following r1448820.

Follow-up to 1448810: fix canonicalization check for paths containing

a single character and update two indirect callers of open_path.

* subversion/libsvn_fs_fs/tree.c


fs_revision_link): ensure canonical path parameters

* subversion/libsvn_fs_util/fs-util.c

(is_canonical_abspath): fix canonicalization check for single-char paths

  1. … 1 more file in changeset.
Follow-up to r1442088: revise the use of open_path() and make

it require canonical values for PATH. Eliminate the need for

svn_fs__is_canonical_abspath and consequently drop that function.

It is now an internal optimization in svn_fs__canonicalize_abspath.

All callers of svn_fs__canonicalize_abspath have been checked

whether simply returning PATH is o.k.

* subversion/include/private/svn_fs_util.h

(svn_fs__is_canonical_abspath): drop

(svn_fs__canonicalize_abspath): state we may simply return PATH.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__is_canonical_abspath): rename and simplify to ...

(is_canonical_abspath): ... this new version

(svn_fs__canonicalize_abspath): before doing expensive operations,

check whether canonicalization is necessary

* subversion/libsvn_fs_fs/tree.c

(open_path_is_canonical): drop

(open_path_node_only): renumber

(open_path): assert() PATH parameter to be canonical










get_mergeinfo_for_path_internal): update direct and indirect

callers ensuring PATH is canonical

Suggested by: julianfoad

  1. … 2 more files in changeset.
Merge first batch of changes from the 10Gb branch. These are all

internal optimizations, i.e. no UI or public API changes.

This comprises the following change sets:

* Make membuffer cache keep more of the "important" objects.

The /trunk code has flaws and inefficiencies that prevent

the cache from keeping as much data as it could.


r1388810: improve cache retention rate in overload situations.

r1390407: fix a membuffer cache effectiveness issue. The

lower part of the group index was always identical

to the cache segment index. I.e. most groups would

not be used at all causing the used ones to overflow


* Add a 1st level cache for DAG nodes that can just hand out

the nodes without the need to (de-)serialize, copy or sync data.

The actual implementation can be found here:





r1388654: Implement a 1st level cache for DAG nodes as they are

the most frequently accessed data object in FSFS.

Also, access to them tends to have high locality.

r1388801: Make 1st level DAG node cache more effective. We may

attempt lookups with *any* non-empty path.

Supporting changes and additions:





r1388636: Fix a pool usage issue in fs-test.

r1388644: Introduce a new utility method that determines whether

svn_fs__canonicalize_abspath must be called for a given


r1389276: prevent unnecessary canonicalization.

* Checkout, export and update often send deltas against empty bases.

Provide an optimized implementation for that case and invoke it

from the generic window_handler().


r1388394: provide optimized version of window_handler for the

frequent case of an empty source window.

r1388805: make the optimized code path for deltas against empty

source stream handle all headers and write them with a

single call to the output stream.

* Speed up the reporting of properties in similar cases.


r1388795: When reporting changed properties against an empty

source or a source with no properties, there is no

need for calculating a diff between both lists.

Also, reduce general computational overhead.

* Speed up cache access by using fixed-size keys.




r1388720: instead of variable length keys use fixed length structs

as keys for the revprop and fulltext caches. Those keys

don't require intermediate strings to be constructed and

are faster to process on the cache side.

* Introduce a node property cache (similar to any other cache

in FSFS).




r1388789: Cache node properties in their parsed state instead

of just the plain full-text. temp_(de-)serialization

is much faster then parsing from a generic stream.

* [subversion/libsvn_fs_fs/fs_fs.c]

r1388639: minor optimization.

  1. … 12 more files in changeset.
Add an 'svn_rangelist_t' typedef for use with the existing 'svn_rangelist_*'

APIs, instead of using 'apr_array_header_t' directly.

The immediate reason is to improve the debugging experience: I can make

GDB display 'svn_rangelist_t' values in a simple human-readable form, whereas

the best it can do with 'apr_array_header_t', not knowing the type of the

elements, is print something like 'array of 2 items'.

Beyond that, it makes sense from a coding abstraction point of view, filling

a gap in this hierarchy:

svn_mergeinfo_catalog_t is a collection of

svn_mergeinfo_t is a collection of

svn_rangelist_t is a collection of


This type has public visibility. Because it is just a typedef, the C API

will be backward-compatible and the ABI won't change. Therefore all uses,

even in deprecated functions, are being changed.

Using such a typedef doesn't provide any additional static type-checking.

Unlike svn_mergeinfo_t and svn_mergeinfo_catalog_t, svn_rangelist_t is not a

pointer type.

* subversion/include/svn_mergeinfo.h

(svn_rangelist_t): New typedef.

(...everywhere...): Use it.

* subversion/include/private/svn_mergeinfo_private.h

(...everywhere...): Use it.

* subversion/include/svn_client.h

(svn_client_mergeinfo_get_merged): Update doc string to refer to this.

* subversion/bindings/javahl/native/CreateJ.cpp,






(...everywhere...): Update the bindings.















(...everywhere...): Use it.

  1. … 22 more files in changeset.
Store UUID in svn_fs_t rather than in FSAP_DATA. This is a cleaner

implementation of what r1330932 implements in a less robust manner.

Suggested by: gstein

(the particular 'cleaner implementation')

Update libsvn_fs:

* subversion/libsvn_fs/fs-loader.h

(fs_vtable_t.get_uuid): Remove this member, with comment.

(svn_fs_t.uuid): New struct member.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_get_uuid): Track new location of UUID.

Update FSFS for the new location:

* subversion/libsvn_fs_fs/fs_fs.h,


(svn_fs_fs__get_uuid): Delete this function. It is subsumed into

svn_fs_fs__open() and svn_fs_fs__create().

* subversion/libsvn_fs_fs/caching.c

(svn_fs_fs__initialize_caches, svn_fs_fs__initialize_txn_caches):

* subversion/libsvn_fs_fs/fs.c


* subversion/libsvn_fs_fs/fs_fs.c

(svn_fs_fs__open, hotcopy_incremental_check_preconditions,

hotcopy_incremental_check_preconditions, svn_fs_fs__set_uuid):

* subversion/libsvn_fs_fs/tree.c


Track new location of UUID.

* subversion/libsvn_fs_fs/fs.c

(fs_vtable): Drop GET_UUID() member.

* subversion/libsvn_fs_fs/fs.h

(fs_fs_data_t.uuid): Remove this member.

Update BDB for the new location:

* subversion/libsvn_fs_base/fs.c

(populate_opened_fs): New function.

(base_create, base_upgrade): Call it to populate svn_fs_t->uuid.

* subversion/libsvn_fs_base/uuid.h

(svn_fs_base__get_uuid): Rename to..

(svn_fs_base__populate_uuid): .. this, and change signature.

* subversion/libsvn_fs_base/uuid.c

(svn_fs_base__get_uuid): Rename to..

(svn_fs_base__populate_uuid): .. this, and adapt to the new signature.

* subversion/libsvn_fs_base/tree.c


* subversion/libsvn_fs_base/uuid.c


Track new location of UUID.

* subversion/libsvn_fs_base/fs.c

(fs_vtable): Drop GET_UUID() member.

* subversion/libsvn_fs_base/fs.h

(base_fs_data_t.uuid): Remove this member.

Revert r1330932:

* subversion/libsvn_fs/fs-loader.c

(cache_uuid): Remove this function.

(svn_fs_open, svn_fs_create): Update callers.

(svn_fs_open_berkeley, svn_fs_create_berkeley): Update callers.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__identifier): Remove.

* subversion/include/private/svn_fs_util.h

(svn_fs__identifier): Reimplement as a macro. It will be removed in the

next revision.

  1. … 14 more files in changeset.
Don't leak the repository path to clients.

Suggested by: ivan

* subversion/include/private/svn_fs_util.h,


(svn_fs__identifier): New function.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_get_uuid): Add cross-refernce.

* subversion/include/private/svn_fs_util.h



Log the filesystem UUID instead of diskpath.

  1. … 2 more files in changeset.
Factor out a function.

* subversion/include/private/svn_fs_util.h,


(svn_fs__append_to_merged_froms): New, factored out of libsvn_fs_*/tree.c.

* subversion/libsvn_fs_base/tree.c

(append_to_merged_froms): Removed.

(txn_body_get_mergeinfo_for_path): Adjust caller.

* subversion/libsvn_fs_fs/tree.c

(append_to_merged_froms): Removed.

(get_mergeinfo_for_path): Adjust caller.

  1. … 3 more files in changeset.
Moving membuffer cache related configuration code from deep inside the FS

layer to the svn utilities where all other cache related code lives.

Details on the discussion can be found here:

To minimize the risks of breaking builds on other platforms, library

dependencies will be cleaned up in a follow-up commit.

* subversion/include/private/svn_fs_private.h

(svn_fs__get_global_membuffer_cache): remove here

* subversion/include/private/svn_cache.h

(svn_cache__get_global_membuffer_cache): rename and move it to here

* subversion/include/svn_fs.h

(svn_fs_cache_config_t, svn_fs_get_cache_config, svn_fs_set_cache_config):

remove here

* subversion/include/svn_cache_config.h

(svn_cache_config_t, svn_get_cache_config, svn_set_cache_config):

rename and move them to this new header file; adapt docstrings

* subversion/libsvn_fs_util/caching.c

move to:

* subversion/libsvn_subr/svn_cache_config.c

(svn_cache_config_t, svn_get_cache_config, svn_set_cache_config):


* subversion/libsvn_fs_fs/caching.c

(svn_fs_fs__initialize_caches, svn_fs_fs__initialize_txn_caches):

adapt to renamed API functions

* subversion/libsvn_ra/ra_loader.c

(svn_ra_initialize): remove cache config code

* subversion/svn/main.c

(main): move it here and adapt it to renamed API

* subversion/svnadmin/main.c

(#includes): include svn_cache_config.h instead of svn_fs.h

(main): adapt to renamed API functions and structures

* subversion/svnserve/main.c

(#includes, main): dito

* build.conf

(libsvn_subr): add the new svn_cache_config.h header to the DLL exports

  1. … 11 more files in changeset.
LINUX and possibly other OS will over-commit memory. I.e. actual

memory pages allocation will be deferred to the time of the first

access. As a result, the application may simply segfault later.

Therefore, ensure that the membuffer creation actually allocates

memory pages. Also, free the whole cache memory if allocation

of some parts failed. Continue with the cache disabled in that case.

* subversion/libsvn_fs_util/caching.c

(svn_fs__get_global_membuffer_cache): if cache creation fails,

actually free the previously allocated memory

* subversion/libsvn_subr/cache-membuffer.c

(secure_aligned_pcalloc): replacement for apr_pcalloc that will

not crash upon OOM

(svn_cache__membuffer_cache_create): ensure that memory

gets actually allocated despite of overcommitment by the OS;

don't try to continue upon OOM

  1. … 1 more file in changeset.
Explain why the defaults caching settings have been chosen that way.

* subversion/libsvn_fs_util/caching.c

(cache_settings): add extensive commentary to the default values

Followup to r1067687, fix massive memory use.

* subversion/libsvn_fs_util/caching.c

(svn_fs__get_global_membuffer_cache): Store pointer in correct variable.

Fix merge / manual conflict resolution artifacts.

* subversion/libsvn_fs_util/caching.c

(cache_settings): add missing "#endif"

(svn_fs__get_global_membuffer_cache): fix parameters and "volatile" usage

Merged latest caching bug fixes from performance branch:

revisions 1029232, 1032333, 1033040, 1033057 and 1033294

(support for "no threads", typos, error leaks)

  1. … 2 more files in changeset.
Defer cache initialization to first usage: mod_dav_svn may have to

call svn_fs_set_cache_config() more than once if the Apache config

contains multiple caching related parameters (not today, but in the

near future). Also, this reduces the memory footprint if not all server

instances actually access FSFS repositories.

* subversion/libsvn_fs_util/caching.c

(svn_fs__get_global_membuffer_cache): make it thread-safe and

allow for concurrent initialization.

(svn_fs_set_cache_config): don't create caches as a side-effect.

Changing caching defaults to "16MB membuffer cache, fulltext caching on".

* subversion/libsvn_fs_util/caching.c:

(cache_settings): change defaults

Merge all changes (r998649, r998843, r998852) from the

integrate-cache-membuffer branch.

These patches introduce in-process full-text caching.

  1. … 8 more files in changeset.
Fix compiler warning.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__canonicalize_abspath): Change variable type to size_t instead

of int.

Test out my new and fancy ASF commit priviledges by changing the copyright

wording in our license headers to reflect ownership by the ASF.


Change terminology to ASF, and update a link.

* subversion/libsvn_subr/opt.c

(svn_opt__print_version_info): Note that the product as a whole is

copyrighted by the ASF, and update the project website.

* everywhere:

Change license text to reflect ASF ownership.

  1. … 891 more files in changeset.
Update some of the integer types we use internally to remove the "implicit

conversion shortens 64-bit value into a 32-bit value" warnings. Many of these

were due to using integers to store values better characterized as size_t's

or other bitness-agnostic types.

Yay for 64-bit operating systems!

* subversion/libsvn_subr/xml.c,

















Update various types to be 64 bits wide, where appropriate. Where not

possible (due to external or API requirements) cast.

  1. … 16 more files in changeset.
Relicense Subversion under the Apache License, Version 2.0.

* NOTICE: New.



subversion/LICENSE: Remove.

* subversion/libsvn_subr/opt.c

(svn_opt__print_version_info): Note that the product as a whole is

copyrighted by the SVN Corp, and that it contains contributions from

many people, as referenced in NOTICE.

* subversion/bindings/swig/python/LICENSE_FOR_PYTHON_BINDINGS:

Relicense the SVN parts under Apache 2.0.

* everywhere:

Change copyright notices in file headers to reflect the Apache 2.0 license.

  1. … 882 more files in changeset.
Add a few include files to remove some declaration-duplicated warnings.

(I'd still like to know why these warnings are header-file-include-order

dependent. Kinda makes me a bit wary.)

* subversion/libsvn_fs_util/fs-util.c,


Include svn_dirent_uri.h before svn_path.h.

* subversion/include/private/svn_fs_util.h:

Include svn_path.h after svn_dirent_uri.h.

  1. … 2 more files in changeset.
Rename svn_fs__path_change2_create() to svn_fs__path_change_create_internal().

Suggested by: gstein

* subversion/include/private/svn_fs_util.h

(svn_fs__path_change2_create): Rename to ...

(svn_fs__path_change_create_internal): ... this.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs__path_change2_create): Rename to ...

(svn_fs__path_change_create_internal): ... this.

* subversion/libsvn_fs_base/bdb/changes-table.c


* subversion/libsvn_fs_fs/fs_fs.c


* subversion/libsvn_fs/fs-loader.c

(svn_fs_path_change2_create): Call svn_fs__path_change_create_internal()

instead of svn_fs__path_change2_create().

  1. … 4 more files in changeset.
Fix undefined references to svn_fs_path_change2_create().

* build.conf

(libsvn_fs.libs): Add 'libsvn_fs_util'.

* subversion/include/private/svn_fs_util.h

(svn_fs__path_change2_create): New declaration.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs_path_change2_create): Rename to ...

(svn_fs__path_change2_create): ... this.

* subversion/libsvn_fs/fs-loader.c

(svn_fs_path_change2_create): New function which wraps


  1. … 3 more files in changeset.
Cleanup trailing whitespace:

for extsn in c h cpp java py pl rb; do

sed -i -e 's/[ \t]*$//' `find . -name "*.$extsn" | xargs grep '[ \t]$' -l`


This should have been done before the 1.6.x branch, so I'm going to merge

it over there, to avoid merge conflicts in the future.

  1. … 83 more files in changeset.
Move svn_fs_path_change2_create to another file to unbreak build.

* subversion/libsvn_fs/util.c: Remove this file.

* subversion/libsvn_fs_util/fs-util.c

(svn_fs_path_change2_create): Function moved here

from libsvn_fs/util.c.

  1. … 1 more file in changeset.
Housekeeping: In the spirit of r27598, remove trailing whitespace in

our repository.

for extsn in c h cpp java py pl rb; do

find . -name "*.$extsn" | xargs perl -pi.bak -e 'next if /^\f$/; s/\s+$/\n/'


(This touches files in various and sundry parts of the tree, which I shan't

enumerate here.)

  1. … 175 more files in changeset.
Purge (I think) the source code tree of sqlite stuffs.




* build.conf,

* build/win32/,

* build/generator/,

* build/ac-macros/sqlite.m4

Remove sqlite build stuffs.

* subversion/include/private/svn_fs_mergeinfo.h,

* subversion/include/private/svn_fs_sqlite.h,

* subversion/libsvn_fs_util/mergeinfo-sqlite-index.c,

* subversion/libsvn_fs_util/sqlite-util.h,

* subversion/libsvn_fs_util/sqlite-util.c

Remove sqlite-specific source code files.

* subversion/libsvn_fs_base/tree.c,

* subversion/libsvn_fs_base/dag.c,

* subversion/libsvn_fs_fs/tree.c

Stop including now-missing headers.

* subversion/include/svn_error_codes.h


(SVN_ERR_FS_NO_SUCH_NODE_ORIGIN): Shift value to fill in a hole.

* subversion/libsvn_fs_fs/fs_fs.c

Stop including now-missing headers.

(svn_fs_fs__hotcopy): Don't copy the sqlite index database.

(commit_body): Don't try to update the sqlite mergeinfo index.

(svn_fs_fs__create): Don't try to create the sqlite index database.

* tools/server-side/svn-populate-node-origins-index.c

(usage_summary): Don't mention the sqlite index file.


No longer name sqlite as a dependency.

  1. … 16 more files in changeset.