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

Changeset 1439868 is being indexed.

* subversion/libsvn_wc/wc_db_wcroot.c

(try_symlink_as_dir): Don't bother clearing an error known to be SUCCESS.

Fix issue #4118 (wrong error message if wc.db is missing, or SQL error).

* subversion/libsvn_wc/wc_db_wcroot.c (svn_wc__db_wcroot_parse_local_abspath):

Handle several cases where we could not find a valid .svn/wc.db, but

.svn/entries is also obviously not valid for a pre-wc-ng working copy.

* subversion/tests/cmdline/

(status_with_various_degrees_of_broken_wc): New test case for the

failure modes detected by this change.

  1. … 1 more file in changeset.
Fix issue 4091, symlink-ness change causes spurious tree-conflict.

* subversion/libsvn_wc/update_editor.c

(close_file): Only flag symlink-ness conflict if locally modified.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): Only close db if really opened.

* subversion/tests/cmdline/

(replace_symlinks): Deepcopy the r2 status for later use, remove XFAIL.

  1. … 2 more files in changeset.
* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): If a working copy that requires an

upgrade is found when traversing upwards from a symlink, try to find a

supported working copy where the symlink points to instead.

Fixes the following tests when run within a 1.7 WC: 19: operate on symlink to wc 20: svnversion on symlink to wc

Disable automatic working copy upgrades. This has been discussed over and

over, with many people in the community indicating they prefer manual upgrades.

For now, this is a hard-coded default. There is no way to enable auto-upgrade.

And unfortunately there is no single knob to globally switch auto-upgrade on

and off in the code. Rather, function parameters have to be tweaked in various

places where a working copy database is opened.

Some parts of the upgrade code were written and tested exclusively for

upgrading from 1.6 and earlier working copy formats to wc-ng, and thus

needed small fixes to allow 'svn upgrade' to run wc-ng -> wn-ng format

bumps without crashing.

* subversion/libsvn_wc/adm_files.c

(svn_wc_create_tmp_file2): Don't auto-upgrade working copies.

* subversion/libsvn_wc/adm_ops.c

(svn_wc_get_pristine_copy_path): Don't auto-upgrade working copies.

* subversion/libsvn_wc/cleanup.c

(svn_wc_cleanup3): Don't auto-upgrade working copies.

* subversion/libsvn_wc/context.c

(svn_wc_context_create): Don't auto-upgrade working copies.

* subversion/libsvn_wc/lock.c

(pool_cleanup_locked, svn_wc_adm_open3, svn_wc_adm_probe_open3,

open_anchor): Don't auto-upgrade working copies.

* subversion/libsvn_wc/upgrade.c

(svn_wc__upgrade_sdb): Initialise *result_format before use if the

working copy is already at format SVN_WC__VERSION to prevent an assertion

during no-op upgrades of wc-ng working copies.

(is_old_wcroot): Remove Subversion version numbers from error messages.

It is now misleading to say that an upgrade is not possible because a

pre-1.7 working copy was found since 'svn upgrade' now runs on any format.

(svn_wc_upgrade): Handle upgrades from wc-ng-style working copies.

Enable auto-upgrade of the db during upgrades from pre-1.7 WCs to avoid

'svn upgrade' advising users to run 'svn upgrade'.

* subversion/libsvn_wc/wc_db.c

(svn_wc__db_bump_format): New helper function for wc-ng -> wc-ng upgrades.

Ensures that the upgrade target is a working copy root, and performs a

format bump of wcroot->sdb, which isn't exposed outside of the wc_db layer.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_bump_format): Declare.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_pdh_create_wcroot): Properly handle the case where we do not

auto-upgrade and run into a working copy using an older format.

Previously, we ended up asserting in VERIFY_USABLE_WCROOT() somewhere

because no upgrade happened but no error was returned either. Instead,

return an error advising the user to upgrade the working copy.

* subversion/tests/cmdline/

(wc_is_too_old_regex): The error message matched by this regex has changed

in some cases, so adjust the regex accordingly.

(basic_upgrade): Expect slightly different error messages resulting from

above changes. The error code returned is unchanged, however.

(upgrade_tree_conflict_data, upgrade_from_format_28): These tests were

running 'svn status' and 'svn info' to trigger auto-upgrades. Make them

run 'svn upgrade' instead to keep them passing.

  1. … 9 more files in changeset.
Enable SQLite exclusive locking for the command line client as this is

a major performance gain for working copies on network disks. The

libraries default to shared locking for backward compatibility, the

command line client defaults to exclusive locking and a config setting

allows the user to override the command line client.

Addresses issue 4176.

* subversion/libsvn_wc/wc-queries.sql


* subversion/libsvn_wc/wc_db.c

(create_db): Add exclusive parameter.

(svn_wc__db_init): Get exclusive setting from config.

(svn_wc__db_upgrade_begin): Use exclusive locking.

* subversion/libsvn_wc/wc_db_private.h

(struct svn_wc__db_t): Make config non-const.

(svn_wc__db_util_open_db): Add exclusive parameter.

* subversion/libsvn_wc/wc_db_util.c

(svn_wc__db_util_open_db): Add exclusive parameter.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_open): Make config parameter non-const.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_open): Make config parameter non-const.

(svn_wc__db_wcroot_parse_local_abspath): Get exclusive setting from

config, close unused SQLite handle when following a symlink.

* subversion/include/svn_client.h

(svn_client_create_context2): New.

(svn_client_create_context): Deprecate.

* subversion/libsvn_client/ctx.c

(svn_client_create_context2): Add config hash parameter, pass config

to WC context.

(svn_client_create_context): Call new version.

* subversion/include/svn_config.h



* subversion/libsvn_subr/config_file.c

(svn_config_ensure): Add [working-copy] section.

* subversion/svn/main.c

(sub_main): Get config hash earlier, pass to client context, set

exclusive locking if client does not already set it, move log

message checking later.

* subversion/tests/libsvn_wc/utils.c

(svn_test__create_fake_wc): Use shared locking.

* subversion/tests/libsvn_wc/op-depth-test.c

(open_wc_db): Use shared locking.

  1. … 12 more files in changeset.
* subversion/libsvn_wc/wc_db_wcroot.c

(read_link_target): Error out on symlinks that point nowhere. Just in case.

* subversion/libsvn_wc/wc_db_wcroot.c

(read_link_target): Minor code simplification, no functional change.

Fix adding symlinks pointing at working copy roots to version control,

which had been broken since r1395027.

Fixes special_tests 23, "externals as symlink targets", which adds

a symlink pointing at an external. This test failed because the

symlink path itself was cached as WC root when adding the symlink

to the external's parent WC. The code then tried a propset on the

symlink path to set the svn:special prop and was redirected at the

external working copy which it didn't have a lock for.

We can fix this by never caching a symlink itself as a WC root but

caching the directory the symlink points to as a WC root instead.

* subversion/libsvn_wc/wc_db_wcroot.c

(read_link_target): New helper function to calculate the absolute path

of a symlink target.

(svn_wc__db_wcroot_parse_local_abspath): When retrying the scan through a

symlink, resolve the symlink and scan up from the link target, rather

than treating the symlink itself as a directory. If the symlink points

at a WC root, this prevents the symlink itself from being added to the

WC root cache -- the cache should only contain directories anyway.

* subversion/tests/cmdline/

(symlink_to_wc_basic): When operating on a WC through a symlink, we'll

now see the resolved symlink target path as Working Copy Root path

in 'svn info' output. Adjust test expectations accordingly. This test

was expecting to see the symlink itself as WC root path.

  1. … 1 more file in changeset.
Fix working copy access via a symlink which points to a working copy nested

within an unrelated working copy of an unsupported format.

This patch fixes special_tests 19 and 20 on the 1.7.x branch when run

within a format 30 working copy (backport nomination will follow).

To reproduce the problem fixed by this commit with just a trunk client:

- Check out a working copy WC1.

- Check out one nested working copy WC2 within WC1's root dir.

- Use sqlite3 to set "pragma user_version = 31" in WC1's .svn/wc.db.

- Create a symlink S within WC1 which points at WC2.

- Try to run 'svn status' on the symlink S.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): If we find an unsupported working

copy after traversing upwards from a symlink, and the symlink points to

a directory, try to find a working copy at that directory instead.

Stat for ".svn" before statting ".svn/wc.db" and ".svn/entries" for an uncached

directory in a working copy. For any directory except the working copy root

this will return that this directory does not exist and avoid the two further


This reduces the time to run svn status on the root of my semi-network working

copy with Subversion trunk, branches: 1.5.x, 1.6.x and 1.7.x by about 20-30%.

(semi network = VM to host system using network protocols over virtual NIC)

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): Use a filestat on ".svn" to avoid

further filestats.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): Revert r1340535.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): The fact that we found a symlink

doesn't undo that we might have moved upwards before, so don't reset

this variable that would make us perform additional stats for entries


Purge trailing whitespace, in the spirit of r1138109.

  1. … 97 more files in changeset.
* subversion/libsvn_wc/wc_db_wcroot.c

(get_path_kind): Remove obsolete information in comment.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): Following up on r1245935, allow a

few more errors to indicate that a node is unversioned.

When hunting for a wcroot through a symlink that points to a directory,

and a WC is found in a parent directory of the symlink, ignore non-conflicted

not-present or excluded nodes that overlap with the symlink.

This allows unversioned symlinks to redirect the wcroot search even

if 'invisible' nodes exist at the symlink's location in the parent WC.

The benefit of this hack is coherent behaviour for unversioned symlinks

pointing to externals, at least from the user's point of view.

Before this change, Subversion would error out with "path not found"

if an unversioned symlink was obstructing a, for instance, not-present

node, and this error magically disappeared after an update which removed

the not-present node.

Now, Subversion prefers using the external's wcroot unless there is

something important to show for the node corresponding to the symlink

in the parent WC. It is somewhat unfortunate that the decision about what

is important is made at a very low layer within the guts of libsvn_wc.

But I saw no better way of working around this. This hack will become

unnecessary once externals are moved into the parent's wc.db.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): Ignore non-conflicted not-present

or excluded nodes beneath symlinks pointing at directories, for reasons

described above.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): Add a comment about not-present

symlinks. They can cause 'svn info' to return with a "path not found" error,

even if there is an unversioned on-disk symlink that points to an external.

For issues #4102 and #4120, both describing problems with symlinks

pointing to externals with various operations (add/status/diff and more),

change the way we resolve working copy roots for symlinks.

* subversion/libsvn_wc/wc_db_private.h

(svn_wc__db_t): Use svn_kind_t rather than svn_node_kind_t in the

parse cache. This allows symlinks to be represented.

* subversion/libsvn_wc/wc_db_wcroot.c

(get_path_kind): Return svn_kind_t instead of svn_node_kind_t. This allows

symlinks to be represented. This function used to force symlinks to always

be treated like directories, which prevents symlinks pointing to externals

from being handled as part of the external's parent working copy.

(svn_wc__db_wcroot_parse_local_abspath): If we locate a wcroot via a

symlink that points to a directory, first treat the symlink like a

normal file, i.e. walk upwards from the symlink's parent dir.

If we find a db, and the symlink is versioned in it, use this DB.

Else, try again, this time treating the symlink like a directory,

which means we'll find a nested wcroot in case the symlink points

to a nested working copy (e.g. an external).

This strategy allows versioned symlinks pointing to externals to work

within the external's parent wc, and also allows unversioned symlinks

to point to nested WCs (this is required for our test suite).

I had to introduce a 'goto' here to avoid major refactoring :(

This function should probably be refactored in a later commit

to get rid of the 'goto'.

* subversion/tests/cmdline/

(externals_as_symlink_targets): Remove XFail marker.

  1. … 2 more files in changeset.
* subversion/libsvn_wc/wc_db_wcroot.c

(verify_no_work): Add a doc string.

Resolve a few related issues (issue #2557, #3987) that all occur because we

assumed that a directly referenced symlink is never a working copy root, while

-as these issues show- it can be.

* subversion/libsvn_wc/wc_db_wcroot.c

(get_path_kind): Reorder arguments to match convention. Set kind to directory

for symlinks to check them to be a working copy root.

(svn_wc__db_wcroot_parse_local_abspath): Update caller.

Followup to r1140505. Fix indentation.

* [everywhere]: Fix indentation fallout from the

svn_error_return() -> svn_error_trace() rename.

Patch by: Noorul Islam K M <noorul{_AT_}>

  1. … 37 more files in changeset.
Rename the 'svn_error_return' macro to 'svn_error_trace'.

See email thread "[RFC] Rename 'svn_error_return' to 'svn_error_trace'?" on

2011-06-23, <>.

* subversion/include/svn_error.h

(svn_error_return): Rename to svn_error_trace.

(SVN_ERR, svn_error_purge_tracing): Track the rename.

* [everywhere]: Track the rename.

  1. … 120 more files in changeset.
The semi-annual trailing whitespace cleansing ritual.

* everywhere:

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

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


  1. … 144 more files in changeset.
Install WC DB validation triggers as temporary triggers on opening the DB.

* subversion/libsvn_wc/wc-checks.sql

(no_repository_updates, validation_01, validation_02, validation_03):

Declare these as temporary.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): After opening the DB, install

the validation triggers.

  1. … 1 more file in changeset.
Make all WC test programs use svn_wc__db_util_open_db() instead of calling

svn_sqlite__open() directly, to ensure that the SQLite user-defined function

'relpath_depth' gets installed in the DB connection. That function will be

needed by the validation triggers in wc-checks.c as soon as we activate


* subversion/libsvn_wc/wc_db_private.h,


(svn_wc__db_util_open_db): Add an optional parameter to specify the list

of statements to prepare instead of the default set. Write a doc string.

* subversion/libsvn_wc/wc_db.c

(create_db): Update the call to svn_wc__db_util_open_db().

[Accidentally missed in this commit; committed in r1127902.]

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): Same.

* subversion/tests/libsvn_wc/db-test.c

(create_fake_wc): Call svn_wc__db_wcroot_parse_local_abspath() instead of


* subversion/tests/libsvn_wc/entries-compat.c

(make_one_db): Same.

* subversion/tests/libsvn_wc/op-depth-test.c

(open_wc_db): Same.

  1. … 5 more files in changeset.
SVN status will try to read the .format file for every folder in

the working copy. That is very expensive, so do a stat call

to check whether the .format file exists - which it won't for

wc-ng w/cs.

* subversion/libsvn_wc/wc_db_wcroot.c

(get_old_version): early exit upon failed stat

Reverse merged revision(s) 1103589 from subversion/trunk

after discussion with Bert.

  1. … 3 more files in changeset.
Reverted in r1103671.

Eliminate unnecessary stat calls during checkout, part 2 of 2.

If provided as parameter, svn_wc__db_wcroot_parse_local_abspath

does not need to use a stat call to detect the kind of node

behind the given abspath. For many *frequent* callers that

is known.

* subversion/libsvn_wc/wc_db_private.h

(svn_wc__db_wcroot_parse_local_abspath): add kind parameter

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_wcroot_parse_local_abspath): stat for kind of

if it is not already known

* subversion/libsvn_wc/wc_db_pristine.c

(svn_wc__db_pristine_get_path, svn_wc__db_pristine_read,

svn_wc__db_pristine_get_tempdir, svn_wc__db_pristine_install,

svn_wc__db_pristine_get_md5, svn_wc__db_pristine_get_sha1,

svn_wc__db_pristine_remove, svn_wc__db_pristine_cleanup,

svn_wc__db_pristine_check): don't use the optimization

* subversion/libsvn_wc/wc_db.c

(kind_by_filesize): new utility function

(get_statement_for_path, svn_wc__db_to_relpath,

svn_wc__db_from_relpath, svn_wc__db_get_wcroot,

svn_wc__db_base_add_symlink, add_absent_excluded_not_present_node,

svn_wc__db_base_get_info, svn_wc__db_base_get_children,

svn_wc__db_base_clear_dav_cache_recursive, svn_wc__db_external_add_file,

svn_wc__db_external_add_symlink, svn_wc__db_external_remove,

svn_wc__db_external_read, svn_wc__db_external_read_pristine_props,

svn_wc__db_external_read_props, svn_wc__db_op_copy,

svn_wc__db_op_copy_shadowed_layer, svn_wc__db_op_copy_file,

svn_wc__db_op_copy_symlink, svn_wc__db_op_add_symlink,

svn_wc__db_op_set_props, svn_wc__db_op_set_changelist,

svn_wc__db_op_mark_resolved, svn_wc__db_op_set_tree_conflict,

svn_wc__db_op_revert, svn_wc__db_revert_list_read,

svn_wc__db_revert_list_notify, svn_wc__db_op_read_all_tree_conflicts,

svn_wc__db_op_read_tree_conflict, svn_wc__db_op_remove_node,

svn_wc__db_temp_op_remove_working, svn_wc__db_op_delete,

svn_wc__db_read_info, svn_wc__db_read_pristine_info,

svn_wc__db_read_node_install_info, svn_wc__db_read_url,

svn_wc__db_read_props, svn_wc__db_read_props_streamily,

svn_wc__db_read_pristine_props, svn_wc__db_read_children_of_working_node,

svn_wc__db_node_check_replace, svn_wc__db_read_children,

svn_wc__db_global_commit, svn_wc__db_global_update,

svn_wc__db_op_bump_revisions_post_update, svn_wc__db_lock_add,

svn_wc__db_lock_remove, svn_wc__db_scan_base_repos,

svn_wc__db_scan_addition, svn_wc__db_scan_deletion,

svn_wc__db_wq_add, svn_wc__db_wq_fetch, svn_wc__db_wq_completed,

svn_wc__db_read_conflict_victims, svn_wc__db_read_conflicts,

svn_wc__db_read_kind, svn_wc__db_node_hidden, svn_wc__db_is_wcroot,

svn_wc__db_temp_wcroot_tempdir, svn_wc__db_wclock_obtain,

svn_wc__db_wclock_release, svn_wc__db_wclock_owns_lock,

svn_wc__db_temp_op_start_directory_update, svn_wc__db_temp_op_make_copy,




svn_wc__db_info_below_working, svn_wc__db_get_not_present_descendants,

svn_wc__db_min_max_revisions, svn_wc__db_is_sparse_checkout,

svn_wc__db_has_switched_subtrees, svn_wc__db_get_absent_subtrees,

svn_wc__db_has_local_mods, svn_wc__db_revision_status,

svn_wc__db_base_get_lock_tokens_recursive, svn_wc__db_verify):

don't use the optimization

(svn_wc__db_base_add_directory, svn_wc__db_base_get_children_info,

svn_wc__db_external_add_dir, svn_wc__db_op_copy_dir,

svn_wc__db_op_add_directory, svn_wc__db_op_set_base_depth,

svn_wc__db_read_children_info, svn_wc__db_read_children_walker_info,

svn_wc__db_global_relocate, svn_wc__db_temp_get_format,

svn_wc__db_temp_get_access, svn_wc__db_temp_set_access,

svn_wc__db_temp_close_access, svn_wc__db_temp_clear_access,

svn_wc__db_temp_borrow_sdb, svn_wc__db_temp_op_end_directory_update):

path parameters are known to be directories

(svn_wc__db_base_add_file, svn_wc__db_op_add_file):

path parameters are known to be files

(svn_wc__db_external_record_fileinfo, svn_wc__db_global_record_fileinfo):

path parameters are files, if the file length is > 0.

  1. … 3 more files in changeset.
Remove svn_wc__db_openmode_t and its references. We no longer use it, and

SQLite handles its functionality for us automatically.

* subversion/tests/libsvn_wc/db-test.c

(create_open): Remove smode param, and don't use it to open the database.

(test_getting_info, test_inserting_nodes, test_children, test_working_info,

test_pdh, test_scan_addition, test_scan_deletion, test_global_relocate,

test_work_queue): Update callers.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_openmode_t): Remove.

(svn_wc__db_open): Remove openmode_t param, and update docstring.

* subversion/libsvn_wc/wc_db_wcroot.c

(svn_wc__db_open): Remove param, and don't set it in the struct.

* subversion/tests/libsvn_wc/entries-compat.c


* subversion/libsvn_wc/adm_ops.c


* subversion/libsvn_wc/adm_files.c


* subversion/libsvn_wc/context.c


* subversion/libsvn_wc/upgrade.c


* subversion/libsvn_wc/cleanup.c


* subversion/libsvn_wc/lock.c

(alloc_db, svn_wc_adm_probe_open3):

Update callers.

* subversion/libsvn_wc/wc_db_private.h

(svn_wc__db_t): Remove mode member.

  1. … 10 more files in changeset.