You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/01/17 00:15:48 UTC

svn commit: r1434476 - in /subversion/trunk/subversion: libsvn_client/blame.c tests/cmdline/blame_tests.py

Author: rhuijben
Date: Wed Jan 16 23:15:48 2013
New Revision: 1434476

URL: http://svn.apache.org/viewvc?rev=1434476&view=rev
Log:
Resolve issue #4034, 'blame on files with non-native eol-style sees every line
as modified'.

* subversion/libsvn_client/blame.c
  (svn_client_blame5): Normalize to '\n' when eol style is native, but in all
    other cases normalize to the expected eol style.

* subversion/tests/cmdline/blame_tests.py
  (blame_eol_handling): Remove XFail marker. Use some helper variables
    to avoid duplicated code.

Modified:
    subversion/trunk/subversion/libsvn_client/blame.c
    subversion/trunk/subversion/tests/cmdline/blame_tests.py

Modified: subversion/trunk/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/blame.c?rev=1434476&r1=1434475&r2=1434476&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/blame.c (original)
+++ subversion/trunk/subversion/libsvn_client/blame.c Wed Jan 16 23:15:48 2013
@@ -685,13 +685,31 @@ svn_client_blame5(const char *target,
           svn_stream_t *wcfile;
           svn_stream_t *tempfile;
           svn_opt_revision_t rev;
-
+          svn_boolean_t normalize_eols = FALSE;
           const char *temppath;
 
+          if (status->prop_status != svn_wc_status_none)
+            {
+              const svn_string_t *eol_style;
+              SVN_ERR(svn_wc_prop_get2(&eol_style, ctx->wc_ctx,
+                                       target_abspath_or_url,
+                                       SVN_PROP_EOL_STYLE,
+                                       pool, pool));
+
+              if (eol_style)
+                {
+                  svn_subst_eol_style_t style;
+                  const char *eol;
+                  svn_subst_eol_style_from_value(&style, &eol, eol_style->data);
+
+                  normalize_eols = (style == svn_subst_eol_style_native);
+                }
+            }
+
           rev.kind = svn_opt_revision_working;
           SVN_ERR(svn_client__get_normalized_stream(&wcfile, ctx->wc_ctx,
                                                     target_abspath_or_url, &rev,
-                                                    FALSE, TRUE,
+                                                    FALSE, normalize_eols,
                                                     ctx->cancel_func,
                                                     ctx->cancel_baton,
                                                     pool, pool));

Modified: subversion/trunk/subversion/tests/cmdline/blame_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/blame_tests.py?rev=1434476&r1=1434475&r2=1434476&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/blame_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/blame_tests.py Wed Jan 16 23:15:48 2013
@@ -859,7 +859,6 @@ def blame_multiple_targets(sbox):
   multiple_wc_targets()
   multiple_url_targets()
 
-@XFail()
 @Issue(4034)
 def blame_eol_handling(sbox):
   "blame it on the eol handling"
@@ -879,38 +878,30 @@ def blame_eol_handling(sbox):
     f1 = sbox.ospath('blame-%s' % prop)
     f2 = sbox.ospath('blame-%s-prop' % prop)
 
-    svntest.main.file_write(f1, 'line 1 ' + eol +
-                                'line 2 ' + eol +
-                                'line 3 ' + eol +
-                                'line 4 ' + eol +
-                                'line 5 ' + eol, mode='wb')
-
-    svntest.main.file_write(f2, 'line 1 ' + eol +
-                                'line 2 ' + eol +
-                                'line 3 ' + eol +
-                                'line 4 ' + eol +
-                                'line 5 ' + eol, mode='wb')
+    file_data = 'line 1 ' + eol + \
+                'line 2 ' + eol + \
+                'line 3 ' + eol + \
+                'line 4 ' + eol + \
+                'line 5 ' + eol
+
+    svntest.main.file_write(f1, file_data, mode='wb')
+    svntest.main.file_write(f2, file_data, mode='wb')
 
     sbox.simple_add('blame-%s' % prop,
                     'blame-%s-prop' % prop)
     sbox.simple_propset('svn:eol-style', prop, 'blame-%s-prop' % prop)
     sbox.simple_commit()
 
-    svntest.main.file_write(f1, 'line 1 ' + eol +
-                                'line 2 ' + eol +
-                                'line 2a' + eol +
-                                'line 3 ' + eol +
-                                'line 4 ' + eol +
-                                'line 4a' + eol +
-                                'line 5 ' + eol, mode='wb')
-
-    svntest.main.file_write(f2, 'line 1 ' + eol +
-                                'line 2 ' + eol +
-                                'line 2a' + eol +
-                                'line 3 ' + eol +
-                                'line 4 ' + eol +
-                                'line 4a' + eol +
-                                'line 5 ' + eol, mode='wb')
+    file_data = 'line 1 ' + eol + \
+                'line 2 ' + eol + \
+                'line 2a' + eol + \
+                'line 3 ' + eol + \
+                'line 4 ' + eol + \
+                'line 4a' + eol + \
+                'line 5 ' + eol
+
+    svntest.main.file_write(f1, file_data, mode='wb')
+    svntest.main.file_write(f2, file_data, mode='wb')
 
     sbox.simple_commit()
 
@@ -930,23 +921,17 @@ def blame_eol_handling(sbox):
     svntest.actions.run_and_verify_svn(f2 + '-base', expected_output, [],
                                        'blame', f2)
 
-    svntest.main.file_write(f1, 'line 1 ' + eol +
-                                'line 2 ' + eol +
-                                'line 2a' + eol +
-                                'line 3 ' + eol +
-                                'line 3b' + eol +
-                                'line 4 ' + eol +
-                                'line 4a' + eol +
-                                'line 5 ' + eol, mode='wb')
-
-    svntest.main.file_write(f2, 'line 1 ' + eol +
-                                'line 2 ' + eol +
-                                'line 2a' + eol +
-                                'line 3 ' + eol +
-                                'line 3b' + eol +
-                                'line 4 ' + eol +
-                                'line 4a' + eol +
-                                'line 5 ' + eol, mode='wb')
+    file_data = 'line 1 ' + eol + \
+                'line 2 ' + eol + \
+                'line 2a' + eol + \
+                'line 3 ' + eol + \
+                'line 3b' + eol + \
+                'line 4 ' + eol + \
+                'line 4a' + eol + \
+                'line 5 ' + eol
+
+    svntest.main.file_write(f1, file_data, mode='wb')
+    svntest.main.file_write(f2, file_data, mode='wb')
 
     expected_output = [
         '     %d    jrandom line 1 \n' % rev,