Checkout Tools
  • last updated 1 hour ago
Constraints: committers
Constraints: files
Constraints: dates

Changeset 1727707 is being indexed.

* subversion/libsvn_fs_fs/id.c

(locale_independent_strtol): Clarify comment. No functional change.

* site/publish/ideas.html

(Project ideas): Add 'svnadmin unpack' as an idea.

* subversion/svn/conflict-callbacks.c

(mark_conflict_resolved): Move this function further up in the file to avoid

a forward declaration.

* subversion/libsvn_client/resolved.c

(conflict_get_internal): Initialize text and tree conflict resolution options

to 'unspecified' rather than 'undefined'.

* subversion/include/svn_client.h


(svn_client_conflict_tree_get_resolution): Update docstring accordingly.


(svn_client_conflict_prop_get_resolution): Return 'unspecified' rather than

'undefined' for property conflicts which haven't been resolved yet.


(svn_client_conflict_prop_get_resolution): Update docstring accordingly.

Create distinct conflict option IDs for our current tree conflict resolution

options (there are only 2 options which actually resolve a tree conflict).

The new options are only used in libsvn_client and 'svn' for now. The

current libsvn_wc interfaces still force us to map conflict option IDs to

svn_wc_conflict_choice_t. As a side effect, --accept mine-conflict still

works with these tree conflicts, but that may change later (we'll need a

different system than a single --accept option to resolve arbitrary tree

conflicts in a non-interactive way).

* subversion/include/svn_client.h


svn_client_conflict_option_update_any_moved_away_children): Declare.

(svn_client_conflict_option_id_to_wc_conflict_choice): Declare. This is a

temorary interface which maps option ID to legacy conflict choice.

* subversion/libsvn_client/resolved.c

(conflict_option_id_to_wc_conflict_choice): Rename to ...

(svn_client_conflict_option_id_to_wc_conflict_choice): ... this and expose as

a temporary public API function. Map the new option IDs to the legacy

conflict choice 'mine-conflict' so libsvn_wc will still resolve these

conflicts correctly.

(resolve_conflict): Update caller.

(svn_client_conflict_tree_get_resolution_options): Assign the new option IDs

to their respective tree conflict options.

* subversion/svn/conflict-callbacks.c

(builtin_resolver_options): Add new options IDs. Use code "u" for them,

a mnemonic for "update", instead of "mc" ("mine-conflict").

(conflict_option_id_to_wc_conflict_choice): Remove. This was a copy of

the same function in libsvn_client.

(mark_conflict_resolved): Use the new

svn_client_conflict_option_id_to_wc_conflict_choice() interface.


Add r1725180 and vote for it (don't serialize uncachable directories)

On the 1.9.x-r1725180 branch:

Merge r1725180 from /trunk, resolve the text conflict and make everything

compile again.

Open 1.9.x backport branch for r1725180.
* subversion/svn/svn.c

* subversion/svnadmin/svnadmin.c

* subversion/svnbench/svnbench.c

* subversion/svnfsfs/svnfsfs.c

* subversion/svnlook/svnlook.c

* subversion/svnrdump/svnrdump.c

* subversion/svnsync/svnsync.c

(main): Exit via SIGINT when SIGINT is caught.

In the interactive conflict resolver, use the option id 'unspecified' to

indicate the user hasn't made a choice yet, rather than 'undefined' which

is otherwise used to mark 'svn' client-specific conflict options as such.

Also, ensure the variable containing the user's answer is always initialized

before prompting.

* subversion/svn/conflict-callbacks.c

(handle_text_conflict, handle_prop_conflicts): Use the

svn_client_conflict_option_unspecified option instead of

svn_client_conflict_option_undefined to mark the state where

the user hasn't made a choice yet.

(handle_one_prop_conflict, handle_tree_conflict): Same, and make sure to

initialize option_id.

Split handling of --accept option and interactive prompting into 2 functions.

No functional change.

* subversion/svn/conflict-callbacks.c

(resolve_conflict_by_accept_option): New, based on the code from

resolve_conflict_interactively() but returns an a conflict option ID

via an output parameter. This allows the caller to tell whether the

--accept option is resolved the conflict.

(resolve_conflict_interactively): Stop handling the --accept option in here

and remove related parameters.

(svn_cl__resolve_conflict): Update caller.

Stop passing a pointer to the --accept option value to interactive conflict

handlers, now that the 'quit' command at the conflict prompt command works

without this hack.

* subversion/svn/conflict-callbacks.c

(handle_text_conflict, handle_one_prop_conflict, handle_prop_conflicts,

handle_tree_conflict): Remove accept_which output parameter.

(resolve_conflict_interactively): Update caller.

Make the 'quit' command at the conflict prompt actually quit right away.

This command worked by side-effect of postponing all remaining conflicts

but didn't actually stop the conflict walk.

The QUIT flag passed around in the code was never actually read, just written.

* subversion/svn/resolve-cmd.c

(conflict_status_walker): Check the conflict resolver QUIT flag and cancel

the status walk if it is set.

(walk_conflicts): Check for SVN_ERR_CANCELLED in combination with QUIT and

don't treat this as an error. Don't write messages about being unable

to resolve conflicts if the user canceled by hitting Ctrl-C, just exit.

* subversion/svn/conflict-callbacks.c

(svn_cl__interactive_conflict_baton_t): Remove. Has been unused for a while.

Follow-up to r1727593, which broke some tests:

Fix errors in handling the --accept option and postponed conflicts.

* subversion/svn/conflict-callbacks.c

(handle_text_conflict, handle_prop_conflicts, handle_tree_conflict): Do not

call mark_conflict_resolved() if the conflict should be postponed.

(resolve_conflict_interactively): Same, and also do not start interactive

resolution if the --accept option postponed the conflict.

Refactor code in 'svn resolve' such that a call to the function

svn_client_conflict_prop_get_propname() can be removed.

This function should not exist because an svn_client_conflict_t object

represents all conflicts on a given node, including multiple property

conflicts. So a function returning just one property name makes no sense.

The function was added while transitioning away from the legacy conflict API.

We cannot remove it yet becuase a call in 'svn info' remains.

This change requires the property conflict handler to loop over multiple

properties and resolve them one by one. The previous logic assumed the

text/prop/tree conflict handlers will return one answer from the user

which indicates how the conflict should be resolved. Change them all to

mark the conflict resolved internally, and make other related tweaks.

* subversion/include/svn_client.h

(svn_client_conflict_prop_get_propvals): Add 'propname' parameter.

This function must know which property it is being asked about.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_prop_get_propvals): Return conflicted property values

for the specific property named by the caller.

* subversion/svn/conflict-callbacks.c

(handle_text_conflict): Remove option_id output parameter and the ineffective

save_merged parameter. The functionalty of save_merged is not supported by

the new conflict API and there are no plans to add it.

Resolve the text conflict here rather than relying on the caller to do so.

Add new arguments necessary for calling mark_conflict_resolved().

(handle_prop_conflict): Rename to ...

(handle_one_prop_conflict): ... this. Add a 'propname' argument which

identifies the property to be handled.

(handle_prop_conflicts): New helper function. Tries to resolve multiple

property conflicts on a node.

(handle_text_conflict): Remove option_id output parameter.

Resolve the tree conflict here rather than relying on the caller to do so.

Add new arguments necessary for calling mark_conflict_resolved().

(conflict_func_interactive): Rename to ...

(resolve_conflict_interactively): ... this. Handle property conflicts using

the new libsvn_client conflict API rather than its backwards compat shims.

Remove the option_id, save_merged, and merged_propval output parameters.

The latter two were ineffective and option_id is being replaced by a

boolean output parameter which indicates whether the conflict was resolved.

Resolve conflicts according to the --accept option if applicable.

Update calls to handle_text_conflict() and friends with new parameter lists.

(svn_cl__resolve_conflict): Rely on resolve_conflict_interactively() to

mark conflicts as resolved.

Don't check prop_conflicts against NULL. Check for an empty array instead.

The conflict API returns an empty array if there are no property conflicts.

Fix support for multiple property conflicts on a node in the new resolver.

An implementation bug in the new libsvn_client conflict code prevented

the client from resolving more than one property conflict per call to

svn_client_conflict_get_conflicted(). But this API is supposed to return

a list of all outstanding property conflicts, not just one of them.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_t): Replace legacy_prop_conflict with

'legacy_prop_conflict_propname. The new field serves as in index

into the prop_conflicts hash which stores several property conflicts.

(add_legacy_desc_to_conflict): Add legacy property conflict to the

prop_conflicts hash.

(conflict_get_internal): Don't special-case property conflicts and let

add_legacy_desc_to_conflict() deal with property conflicts internally.

(resolve_prop_conflict): Update legacy_prop_conflict_propname after resolving

a property conflict.

(get_conflict_desc2_t): Return the legacy conflict corresponding to


(svn_client_conflict_get_conflicted): Always return the entire list of

names of conflicted properties, instead of returning just one name.

Put the code 'svn' uses to mark a conflict resolved into a subroutine.

No functional change. This just prepares 'svn' for making more use of the

new svn_client_conflict APIs.

* subversion/svn/conflict-callbacks.c

(mark_conflict_resolved): New helper, factored out verbatim from...

(svn_cl__resolve_conflict): ... here.

* tools/dev/

(print_error): Followup to r1727512, include the code.

* tools/dev/

(print_error): Handle serf-generated error codes. (Currently, the only way

to distinguish serf-generated error codes from svn-generated ones is to

inspect the numeric value of the svn_error_t::apr_err member.)

* subversion/svn/conflict-callbacks.c

(svn_cl__resolve_conflict): Fix type of props_conflicted pointer variable.

Found by: svn-windows-local buildbot

Start using svn_client_conflict_get_conflicted() in 'svn'.

This covers the easy cases. Property conflicts still need some work.

* subversion/svn/conflict-callbacks.c

(conflict_func_interactive): Use svn_client_conflict_get_conflicted()

instead of svn_client_conflict_get_kind().

(svn_cl__resolve_conflict): Likewise.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_get_conflicted): Satisfy docstring's requirement and

return an empty array if there are no conflicted properties.

* subversion/libsvn_client/resolved.c

(text_conflict_options): Shorten option descriptions a bit.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_tree_get_resolution_options): Fix the default

resolution option for tree conflicts so we don't run into the infamous

"tree conflicts may only be resolved to working" error when the default

option ("resolve") is used.

Make the conflict prompt use conflict resolution options from libsvn_client.

The conflict prompt is now composed of options offered by libsvn_client

and options which are specific to 'svn'. The svn client retains knowledge

about the set of options libsvn_client may offer, so that these options can

be mapped to conflict prompt codes ("p", "mf", etc.) and --accept arguments.

The 'svn' client code now refers to libsvn_client options as 'built-in'

options, and refers to its own options which allow users to edit files,

display diffs, and so on, as 'extra' options.

The internal conflict prompt logic is retained. Its input is now dynamically

generated rather than taken straight from a set of static tables. This allows

for future expansion as libsvn_client grows more resolution options.

Conflict prompt help screen formatting will look slightly different now

since I dropped empty lines shown in the help screen to group options

visually. This can be fine-tuned later.

* subversion/svn/conflict-callbacks.c

(MAX_ARRAY_LEN): Remove, not needed anymore.

(resolver_option_t): Enhance docstring.

(text_conflict_options, binary_conflict_options, prop_conflict_options,

tree_conflict_options, tree_conflict_options_update_moved_away,

tree_conflict_options_update_edit_deleted_dir): These conflict option

tables are entirely replaced by...

(builtin_resolver_options, extra_resolver_options,

extra_resolver_options_text, extra_resolver_options_prop,

extra_resolver_options_tree): ... these new tables.

(find_option_by_id): New helper.

(help_string): Remove the 'default_options' argument again. We don't need

this temporary hack anymore since the OPTIONS argument to this function

is now dynamically generated and contains the correct descriptions.

(prompt_string): Likewise, drop 'default_options'.

(build_text_conflict_options, build_prop_conflict_options,

build_tree_conflict_options): New helper functions which build an array

of resolver_option_t objects from built-in and extra conflict options.

(handle_tree_conflict, handle_prop_conflict,

handle_tree_conflict): Use above new helpers and feed the resolver option

array to prompt_user() and help_string(). Rename some variables for clarity.

* subversion/libsvn_client/resolved.c

(svn_client_conflict_tree_get_resolution_options): Localize strings which

aren't part of static arrays with _().

Found by: rhuijben

Make libsvn_client describe all currently available tree conflict options.

* subversion/libsvn_client/resolved.c

(tree_conflict_options): Remove this static table of options, now unused.

(svn_client_conflict_tree_get_resolution_options): Build an array of options

and include the special options for update-move-away and edit-deleted-dir

cases if appropriate. The result corresponds to what 'svn' already offers.

* subversion/svn/conflict-callbacks.c


tree_conflict_options_update_edit_deleted_dir): Set long option descriptions

to NULL so descriptions provided by libsvn_client are used instead.

* subversion/svn/conflict-callbacks.c

(binary_conflict_options): Fix indentation.


tree_conflict_options_update_edit_deleted_dir): Split inline --accept

option values off conflict descriptions, as done elsewhere in r1725982.