Hi Stefan!
A few questions and a WIP patch for making the patch code deal with
property targets being dirs.
* How should we deal with SVN_ERR_ILLEGAL_TARGET? svn_wc_prop_set()
throws one of those if we for instance try to set svn:executable on a
dir or svn:ignore on a file. Should we do some kind of skipped prop
notification?
* Are you ok with the change I made in resolve_target_path()? If we only
have property changes to a file than it's ok to have a dir as a
target.
* What should we do if the target dir for a property is locally_deleted?
I think we should skip it (that's what the code does right now).
I said to you earlier on IRC that I didn't quite understand how we
determined if we had a valid patch target. Do you agree with my doc
change for resolve_target_path() and the two sections below?
* Do you agree on this definition:
! target->skipped => We have an add/del/mod for target
target->node_kind_on_disk => We have a mod for target. (special case:
if we're adding to an existing file we might have an add if the target
already is the expected result after patching).
* For properties I have:
! target->skipped && is_prop_hunk => We have an add/del/mod for
prop_target.
prop_target->content_info->stream => We have a mod for prop_target.
My recent work has been an attempt to make the matching/applying part as
generic as possible, e.g. work for both properties and texts. My limited
testing suggests I've succeeded with that. But I'll have to introduce a
couple of if statements and flags to distinguish between props and text
changes.
[[[
Enable the patch code to use dirs as targets if we only have property
changes.
* subversion/libsvn_client/patch.c
(patch_target_t): Add fields 'has_text_changes' and 'has_prop_changes'
to be able to decide if we should install tmp files for text and/or
props. It's needed since we may have a dir as a target for a
property. If we'd try to copy the tmp file for the text changes onto
a dir we get an error.
(resolve_target_path): Add new parameter 'only_prop_changes' to help
us determine the case when a dir is a valid target.
(init_patch_target): Update caller of resolve_target_path().
(apply_hunk): Record if we've done any changes to props or text
content.
(apply_patches): Only call install_patched_target() if we have changed
the text contents.
]]]
Thanks,
Daniel
Received on 2010-07-26 10:00:38 CEST