[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] Windows: Fix issue #2431 (blame ignores svn:eol-style)

From: Ivan Zhakov <chemodax_at_gmail.com>
Date: 2005-11-22 10:00:33 CET

On 11/22/05, Erik Huelsmann <ehuels@gmail.com> wrote:
> I can fix the bug, or at least come a long way, but have no way to
> test atm. Could someone with easy windows access please test this
> patch? Thanks!
Erik, how I can test it? Only run all regression tests or do something more?

>
> Log:
> [[[
> Fix issue #2431 (blame ignores svn:eol-style).
>
> * subversion/libsvn_client/blame.c
> (file_rev_baton): New members eol_style and eol_str for storing
> the requested file translation type.
> (get_eol_style): New. Function to adjust eol style from propdiff sent.
> (file_rev_handler): See if the file needs translation for the eol style,
> translate if it does.
> (svn_client_blame2): Initialize the new baton members.
> ]]]
>
>
>
> Index: subversion/libsvn_client/blame.c
> ===================================================================
> --- subversion/libsvn_client/blame.c (revision 17463)
> +++ subversion/libsvn_client/blame.c (working copy)
> @@ -21,6 +21,7 @@
> #include "client.h"
>
> #include "svn_client.h"
> +#include "svn_subst.h"
> #include "svn_string.h"
> #include "svn_error.h"
> #include "svn_diff.h"
> @@ -58,6 +59,8 @@
> const char *target;
> svn_client_ctx_t *ctx;
> const char *last_filename;
> + svn_subst_eol_style_t eol_style;
> + const char *eol_str;
> struct rev *rev; /* the rev for which blame is being assigned
> during a diff */
> struct blame *blame; /* linked list of blame chunks */
> @@ -326,6 +329,25 @@
> SVN_ERR (svn_io_file_close (dbaton->source_file, frb->currpool));
> SVN_ERR (svn_io_file_close (dbaton->file, frb->currpool));
>
> + if (svn_subst_translation_required (frb->eol_style, frb->eol_str,
> + NULL, FALSE, FALSE))
> + {
> + const char *translation_tgt;
> +
> + SVN_ERR (svn_io_open_unique_file2 (NULL,
> + &translation_tgt,
> + frb->tmp_path,
> + ".tmp",
> + svn_io_file_del_on_pool_cleanup,
> + frb->currpool));
> + SVN_ERR (svn_subst_copy_and_translate3 (dbaton->filename,
> + translation_tgt,
> + frb->eol_str, FALSE,
> + NULL, FALSE, FALSE,
> + frb->currpool));
> + dbaton->filename = translation_tgt;
> + }
> +
> /* Process this file. */
> SVN_ERR (add_file_blame (frb->last_filename,
> dbaton->filename, frb));
> @@ -367,6 +389,26 @@
> return SVN_NO_ERROR;
> }
>
> +
> +static void
> +get_eol_style (svn_subst_eol_style_t *style,
> + const char **eol,
> + apr_array_header_t *prop_diffs)
> +{
> + int i;
> +
> + for (i = 0; i < prop_diffs->nelts; ++i)
> + {
> + const svn_prop_t *prop = &APR_ARRAY_IDX(prop_diffs, i, svn_prop_t);
> + if (strcmp (prop->name, SVN_PROP_EOL_STYLE) == 0)
> + {
> + svn_subst_eol_style_from_value
> + (style, eol, prop->value ? prop->value->data : NULL);
> + return;
> + }
> + }
> +}
> +
> static svn_error_t *
> file_rev_handler (void *baton, const char *path, svn_revnum_t revnum,
> apr_hash_t *rev_props,
> @@ -386,6 +428,9 @@
> /* If this file has a non-textual mime-type, bail out. */
> SVN_ERR (check_mimetype (prop_diffs, frb->target, frb->currpool));
>
> + /* */
> + get_eol_style (&frb->eol_style, &frb->eol_str, prop_diffs);
> +
> if (frb->ctx->notify_func2)
> {
> svn_wc_notify_t *notify
> @@ -526,6 +571,8 @@
> frb.target = target;
> frb.ctx = ctx;
> frb.last_filename = NULL;
> + frb.eol_style = svn_subst_eol_style_none;
> + frb.eol_str = NULL;
> frb.blame = NULL;
> frb.avail = NULL;
>

--
Ivan Zhakov
Received on Tue Nov 22 10:01:32 2005

This is an archived mail posted to the Subversion Dev mailing list.