On Tue, Oct 27, 2009 at 11:09:40PM +0100, Stefan Sperling wrote:
> > When digging into the merge code for issue 1493 I found that it does use
> > svn_diff_mem_string_diff3() and svn_diff_mem_string_output_unified() in
> > libsvn_wc/props.c (maybe_generate_propconflict). I suppose the issue
> > should be closed then?
> >
> > On the other hand I haven't been able to view the resulting three way
> > diff! If I choose 'diff-full' in the interactive conflict resolutioner I
> > get this:
> >
> > [[[
> > Conflict for property 'prop' discovered on '/tmp/wc2/foo'.
> > Select: (p) postpone,
> > (mf) mine-full, (tf) theirs-full,
> > (s) show all options: df
> > Invalid option; there's no merged version to diff.
>
> No idea what's going wrong here yet, but it certainly doesn't look
> right.
> > Where foo.prej contains:
> >
> > [[[
> > Trying to change property 'prop' from 'dog' to 'horse',
> > but the property has been locally changed from 'dog' to 'cat'.
> > ]]]
>
> Isn't that the best 3-way diff format ever?
Maybe... It is declared in this piece of code in libsvn_wc/props.c
(apply_single_generic_prop_change):
[[[
if (got_conflict)
{
/* Describe the conflict, referring to base_val as well as
working_val for the user's convenience. */
if (working_val && base_val
&& svn_string_compare(working_val, base_val))
*conflict = svn_string_createf
(result_pool,
_("Trying to change property '%s' from '%s' to '%s',\n"
"but property already exists with value '%s'."),
propname, old_val->data, new_val->data, working_val->data);
else if (working_val && base_val)
*conflict = svn_string_createf
(result_pool,
_("Trying to change property '%s' from '%s' to '%s',\n"
"but the property has been locally changed from '%s' to "
"'%s'."),
propname, old_val->data, new_val->data,
base_val->data, working_val->data);
else if (working_val)
*conflict = svn_string_createf
(result_pool,
_("Trying to change property '%s' from '%s' to '%s',\n"
"but property has been locally added with value "
"'%s'."),
propname, old_val->data, new_val->data, working_val->data);
else if (base_val)
*conflict = svn_string_createf
(result_pool,
_("Trying to change property '%s' from '%s' to '%s',\n"
"but it has been locally deleted."),
propname, old_val->data, new_val->data);
else
*conflict = svn_string_createf
(result_pool,
_("Trying to change property '%s' from '%s' to '%s',\n"
"but the property does not exist."),
propname, old_val->data, new_val->data);
}
}
]]]
I could create a string from the svn_diff_mem_string_output_merge2()
created stream and pass that back to be used in the above code. But
would it be a problem to have a diff3 text for some conflicts and the
error message for others?
Does the diff3 format handle deletes and adds? I first thought that it
was just a question of leaving one part of the diff blank but that seems
to easy.
> Well we just had a good laugh here by modifying your script to set
> an SVG image as the property value instead of 'horse'.
> I'm not gonna try a PNG because that would probably screw the terminal :)
I could write a parser for translating svg files into ascii art when
stored as a property. :-)
/Daniel
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2412268
Received on 2009-10-28 23:00:02 CET