subversion

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

Changeset 1448810 is being indexed.

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_dag,

fs_change_node_prop,

fs_make_dir,

fs_delete_node,

fs_make_file,

fs_apply_textdelta,

fs_apply_text,

fs_closest_copy,

assemble_history,

get_mergeinfo_for_path_internal): update direct and indirect

callers ensuring PATH is canonical

Suggested by: julianfoad

Avoid using pool memory after clear.

* subversion/libsvn_wc/diff_editor.c

(close_file): Don't use baton after it has been destroyed.

Fix issue 4111, update under add with not-present parent.

* subversion/libsvn_wc/node.c

(svn_wc__node_get_base): Ignore not-present nodes.

* subversion/tests/cmdline/update_tests.py

(update_child_below_add): Tweak status, remove XFAIL.

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

(test_funcs): Mark update_child_under_add PASS.

Fix a minor correctness issue in the wc-wc copy code that made us copy

nodes that were only used to shadow lower layers as not-present children

of their parent.

The commit logic automatically handles the not-present case correctly, so

it merely affects database correctness. But the difference is visible

in our move logic.

Note that I reviewed the direct and indirect users of

STMT_SELECT_OP_DEPTH_CHILDREN before committing. This part is necessary to

avoid insert invalid children as incomplete during copy, while not changing

them to a not-incomplete state later.

* subversion/libsvn_wc/wc-queries.sql

(STMT_SELECT_OP_DEPTH_CHILDREN): Really select the repository children, not

just all children. Just like STMT_SELECT_GE_OP_DEPTH_CHILDREN already

does.

* subversion/libsvn_wc/wc_db.c

(get_info_for_copy): Simplify logic for adds by using more data from read_info.

Avoid unneeded work for non-op-root-deletes, as we do want to trigger

special behavior for them instead of seeing everything as a delete.

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

(move_to_swap): Add comment. Enable additional test. Expect the current buggy

result.

* subversion/libsvn_wc/wc_db.c (handle_move_back): Remove accidental SVN_DBG.

Add another XFail test for issue 4111 to show NODES problem.

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

(update_child_under_add): New test.

(test_funcs): Add new test.

* subversion/tests/cmdline/update_tests.py

(update_child_below_add): Tweak comment.

Resolve an endless loop uncovered by writing some testcases for move-back

scenarios.

* subversion/libsvn_wc/wc_db.c

(db_op_copy): Add comment.

(handle_move_back): Resolve endless loop on certain node states by correctly

retrieving next row.

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

(move_not_present_variants): New function.

(test_list): Add move_not_present_variants.

Add an XFail test for issue 4111.

* subversion/tests/cmdline/update_tests.py

(update_child_below_add): New test.

(test_list): Add new test.

* subversion/libsvn_wc/copy.c

(copy_versioned_dir): Use the right path in two error messages.

* tools/client-side/bash_completion

(_svnadmin): Add lock and unlock commands, add options to create,

dump and load, handle -M/--memory-cache-size and -F/--file pairs.

* subversion/include/svn_client.h

(svn_client_resolve): Add a question.

When mixed revision moves are not an error, make the move handling degrade

to a proper copy+delete when encountering mixed revisions instead of still

recording a move, which most likely breaks later.

Also degrade/convert to a no-move when a node is moved back to its original

location.

* subversion/libsvn_wc/copy.c

(copy_or_move):

Always degrade to copy and delete when doing a multi-db move.

Mixed revision-ness is only interesting when moving base nodes as

the result only applies to BASE anyway. Degrade to copy when the

mixed revision check says we can't move instead of recording a

move for mixed revisions anyway.

After a move ask wc_db to undo move-backs.

* subversion/libsvn_wc/wc-queries.sql

(STMT_SELECT_MOVED_BACK,

STMT_DELETE_MOVED_BACK): New query.

* subversion/libsvn_wc/wc_db.c

(handle_move_back,

svn_wc__db_op_handle_move_back): New function.

* subversion/libsvn_wc/wc_db.h

(svn_wc__db_op_handle_move_back): New function.

* subversion/tests/cmdline/copy_tests.py

(move_file_back_and_forth,

move_dir_back_and_forth): Update expected result.

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

(move_to_swap): Extend testcase. Add commented section testing a different

problem.

(test_list): Mark mixed_rev_move() as WIMP, because this triggers a copy

and delete now.

Introduce a constant that gives us the memory allocation overhead of

a serialization buffer and use that to specify "round" buffer sizes

(of 1kByte) instead of using seemingly magic sizes.

Once at it, fix a few typos in the doxygen strings.

* subversion/include/private/svn_temp_serializer.h

(): include svn_string.h to make sure svn_stringbuf_t is defined

(SVN_TEMP_SERIALIZER__OVERHEAD): define new constant

(svn_temp_serializer__init,

svn_temp_serializer__init_append,

svn_temp_serializer__pop,

svn_temp_serializer__revolve): fix typos in docstrings

* subversion/libsvn_fs_fs/dag.c

(svn_fs_fs__dag_serialize): use new constant to calculate initial

serialization buffer size

* subversion/libsvn_fs_fs/temp_serializer.c

(svn_fs_fs__serialize_node_revision): ditto

Suggested by: philip

* subversion/libsvn_wc/conflicts.c

(resolve_prop_conflict_on_node): Extend comment.

* subversion/libsvn_wc/conflicts.c

(resolve_text_conflict_on_node,

resolve_prop_conflict_on_node): Add note on the status of conflict markers.

Clean up some WC conflict handling code. No functional change.

* subversion/libsvn_wc/conflicts.c

(resolve_text_conflict_on_node,

resolve_prop_conflict_on_node): Add a doc string. Rename 'did_resolve' to

'removed_reject_files' for clarity. Move outputs to the beginning of the

parameter list. Remove unused parameters.

(resolve_tree_conflict_on_node): Add a doc string. Move outputs to the

beginning of the parameter list. Remove the 'did_resolve' output as it

was always set and therefore unnecessary.

(resolve_conflict_on_node): Adjust the caller accordingly.

(conflict_status_walker): Note a bug.

* subversion/libsvn_wc/conflicts.h

(svn_wc__conflict_skel_add_prop_conflict,

svn_wc__conflict_skel_add_tree_conflict): Improve doc strings.

* subversion/libsvn_wc/delete.c

(svn_wc__delete_many,

svn_wc__delete_internal): Following up on r1448366, fix segfault.

Add an early warning on scheduling a delete of the repository root in working

copies. (Some wc-db queries assume that the repository root is not moved,

so this makes it less likely for these invalid cases don't enter the database)

* subversion/libsvn_wc/delete.c

(svn_wc__delete_many,

svn_wc__delete_internal): Don't allow deleting paths that are switched to

the repository root.

* subversion/tests/cmdline/input_validation_tests.py

(delete_repos_root): Remove XFail marker and allow some output before the error.

* subversion/tests/cmdline/diff_tests.py

(diff_two_working_copies): Remove XFail. Update expected result:

a delete of a file, followed by an add of a directory with the

same name produces two headers, not one.

* subversion/libsvn_wc/node.c

(convert_db_kind_to_node_kind): Use standard function.

(svn_wc__node_get_pre_ng_status_data): Improve the 'svn status' information

shown for the deletes of copies by handling the working-delete case

where we didn't show some information.

* subversion/libsvn_client/externals.c

(svn_client__handle_externals): Use cheaper check for not-versioned.

(svn_client__export_externals): Use iterpool.

Following up on r1448339, also make the status externals processing

completely part of the status processing.

* subversion/libsvn_client/client.h

(svn_client__do_external_status): Remove prototype.

* subversion/libsvn_client/externals.c

(svn_client__do_external_status): Remove function here...

* subversion/libsvn_client/status.c

(do_external_status): ... that can just be placed here as static.

(svn_client_status5): Update caller.

Move some 'svn ls' functions handling externals from externals.c to list.c,

as they aren't generally reusable anyway.

* subversion/libsvn_client/client.h

(svn_client__list_internal): Make static.

(svn_client__list_externals): Make static.

* subversion/libsvn_client/externals.c

(list_external_items,

svn_client__list_externals): Move to list.c

* subversion/libsvn_client/list.c

(includes): Add svn_wc_private.h.

(list_externals,

list_internal): Add prototype.

(svn_client__list_internal): Rename to ...

(list_internal): ... this and add documentation from .h. Update caller.

(wrap_list_error): New function, based on externals helper.

(list_external_items): New function. Copied from svn_client__list_externals.

Update caller.

(svn_client_list3): Update caller.

* subversion/include/svn_cmdline.h

(svn_cmdline_prompt_baton2_t): Fix doc string.

* subversion/libsvn_wc/copy.c

(svn_wc__move2): Typo in comment.

* subversion/libsvn_wc/copy.c

(remove_node_conflict_markers): Indentation fix.

* subversion/libsvn_wc/copy.c

(svn_wc__move2): Move some local variable declarations up to the beginning

of the function. It is small enough to make do without a nested scope.

No functional change.

When a node is conflicted, it is conflicted in WORKING. When BASE is completely

shadowed (and this is not the op-root of the shadowing) the conflict is

unrelated to the BASE update and the update can just continue.

This makes it easier to rely on the update code for recovering of certain

kinds of tree conflicts.

* subversion/libsvn_wc/update_editor.c

(delete_entry,

open_directory,

add_directory,

open_file,

add_file): Don't skip conflicted nodes when their parents are shadowed as in

this case the conflict just applies to WORKING.

When we report an entire update as skipped we shouldn't just bump its

base revision as that might break the working copy state. (E.g. checksums

might be invalid for the new revision). I think this fixes some of

issue #4323, although the desired 1.8 behavior might be different.

* subversion/libsvn_wc/update_editor.c

(open_root): Not just notify, but also record the skip of the

update anchor.

* subversion/tests/cmdline/update_tests.py

(bump_below_tree_conflict): New test.

(test_list): Add bump_below_tree_conflict.