Checkout Tools
  • last updated 51 mins ago
Constraints: committers
Constraints: files
Constraints: dates

Changeset 1727719 is being indexed.

* subversion/libsvn_client/resolved.c

(resolve_conflict): Plug an error leak.

Remove unused path change types from FSX containers.

* subversion/libsvn_fs_x/changes.c

(CHANGE_KIND_MASK): Update as we use one bit less now.



CHANGE_KIND_MOVEREPLACE): Remove these unused change kinds.

Add support for the mergeinfo_mod flag to FSX changed paths list containers.

This had been omitted by accident.

* subversion/libsvn_fs_x/changes.c

(CHANGE_MERGEINFO_MOD): Define bit we use to represent the flag.

(append_change): Store the new flag.

(svn_fs_x__changes_get_list): Return the new flag.

Cleanse FSX changed paths lists code from the renmants of noderev_id.

* subversion/libsvn_fs_x/fs.h

(svn_fs_x__change_t): Remove noderev ID element entirely.

* subversion/libsvn_fs_x/transaction.h

(svn_fs_x__add_change): ID parameter is no longer used.

* subversion/libsvn_fs_x/transaction.c

(svn_fs_x__add_change): Update.

* subversion/libsvn_fs_x/tree.c

(add_change): Update caller.







apply_text): Update respective next caller level.

In FSX, remove all code that reads and writes noderev IDs in changed

path lists.

* subversion/libsvn_fs_x/changes.c

(CHANGE_TXN_NODE): No longer needed.

(binary_change_t): Remove noderev ID element.





svn_fs_x__changes_get_list_func): Remove all noderev ID access for

containered changed paths lists.

* subversion/libsvn_fs_x/low_level.c


write_change_entry): No longer read and write noderev IDs when

reading / writing non-packed changes lists.

* subversion/libsvn_fs_x/transaction.c

(fold_change): The noderev ID is now meaningless here.

(svn_fs_x__add_change): Don't store the noderev ID anymore.

(write_final_rev): No longer update the noderev in changed paths lists.

(sanitize_changed_path_info): No longer neccessary.

(commit_body): Update caller.

In FSX, begin getting rid of the redundant noderev IDs within changed

paths lists.

This change dynamically determines the ID for the changed_paths API

implementation, effectively rendering the stored IDs unnecessary.

* subversion/libsvn_fs_x/tree.c

(construct_fs_id): New function to construct the ID object dynamically.

(construct_fs_path_change): Update to call the new utility instead of

using the info provided in CHANGE. Add a

few pass-through parameters.

(x_paths_changed): Update the next level caller.

* 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.