On Mon, Jul 01, 2013 at 04:05:54PM +0300, Daniel Shahaf wrote:
> Daniel Shahaf wrote on Mon, Jul 01, 2013 at 15:52:32 +0300:
> > No, we should extend the test to run 'svn ls' or 'svnadmin verify' to
> > ensure that creating the path with \n in it didn't break anything.

Fair enough, that's good enough for me.

But please also check that log -v returns a good list of paths.
With the FSFS \n problem, 'svn ls' was fine but 'log -v' was
broken (dirent data vs changed paths data).
Verify didn't detect the 'log -v' problem (see
http://subversion.tigris.org/issues/show_bug.cgi?id=4343).

Can you also rename allow_newlines to just 'is_fsfs', please?

Thanks!

> Here's the patch implementing that.  If I don't hear otherwise, I'll
> commit and nominate for backport to 1.8.1.
> 
> Daniel
> 
> Index: subversion/tests/libsvn_fs/fs-test.c
> ===================================================================
> --- subversion/tests/libsvn_fs/fs-test.c      (revision 1498385)
> +++ subversion/tests/libsvn_fs/fs-test.c      (working copy)
> @@ -4959,10 +4959,11 @@ filename_trailing_newline(const svn_test_opts_t *o
>    svn_error_t *err;
>    svn_boolean_t allow_newlines;
>  
> -  /* Some filesystem implementations can handle newlines in filenames
> -   * and can be white-listed here.
> -   * Currently, only BDB supports \n in filenames. */
> -  allow_newlines = (strcmp(opts->fs_type, "bdb") == 0);
> +  /* The FS API wants \n to be permitted, but FSFS never implemented that,
> +   * so for FSFS we expect errors rather than successes in some of the 
> commits.
> +   * Use a blacklist approach so that new FSes default to implementing the 
> API
> +   * as originally defined. */
> +  allow_newlines = (!!strcmp(opts->fs_type, SVN_FS_TYPE_FSFS));
>  
>    SVN_ERR(svn_test__create_fs(&fs, "test-repo-filename-trailing-newline",
>                                opts, pool));
> @@ -4992,6 +4993,22 @@ filename_trailing_newline(const svn_test_opts_t *o
>    else
>      SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
>  
> +  if (allow_newlines)
> +    {
> +      static svn_test__tree_entry_t expected_entries[] = {
> +        { "foo", NULL },
> +        { "bar\n", NULL },
> +        { "foo/baz\n", "" },
> +      };
> +      svn_revnum_t after_rev;
> +
> +      SVN_ERR(svn_fs_commit_txn(NULL, &after_rev, txn, subpool));
> +      SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
> +
> +      SVN_ERR(svn_fs_revision_root(&root, fs, after_rev, pool));
> +      SVN_ERR(svn_test__validate_tree(root, expected_entries, 3, pool));
> +    }
> +
>    return SVN_NO_ERROR;
>  }
>  

Reply via email to