Modified: 
subversion/branches/performance/subversion/tests/libsvn_diff/parse-diff-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/libsvn_diff/parse-diff-test.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- 
subversion/branches/performance/subversion/tests/libsvn_diff/parse-diff-test.c 
(original)
+++ 
subversion/branches/performance/subversion/tests/libsvn_diff/parse-diff-test.c 
Mon Sep  6 20:02:15 2010
@@ -59,11 +59,11 @@ static const char *unidiff =
 static const char *git_unidiff =
   "Index: A/mu (deleted)"                                               NL
   "===================================================================" NL
-  "git --diff a/A/mu b/A/mu"                                            NL
+  "diff --git a/A/mu b/A/mu"                                            NL
   "deleted file mode 100644"                                            NL
   "Index: A/C/gamma"                                                    NL
   "===================================================================" NL
-  "git --diff a/A/C/gamma b/A/C/gamma"                                  NL
+  "diff --git a/A/C/gamma b/A/C/gamma"                                  NL
   "--- a/A/C/gamma\t(revision 2)"                                       NL
   "+++ b/A/C/gamma\t(working copy)"                                     NL
   "@@ -1 +1,2 @@"                                                       NL
@@ -71,32 +71,52 @@ static const char *git_unidiff =
   "+some more bytes to 'gamma'"                                         NL
   "Index: iota"                                                         NL
   "===================================================================" NL
-  "git --diff a/iota b/iota.copied"                                     NL
+  "diff --git a/iota b/iota.copied"                                     NL
   "copy from iota"                                                      NL
   "copy to iota.copied"                                                 NL
   "Index: new"                                                          NL
   "===================================================================" NL
-  "git --diff a/new b/new"                                              NL
+  "diff --git a/new b/new"                                              NL
   "new file mode 100644"                                                NL
   ""                                                                    NL;
 
 static const char *git_tree_and_text_unidiff =
   "Index: iota.copied"                                                  NL
   "===================================================================" NL
-  "git --diff a/iota b/iota.copied"                                     NL
+  "diff --git a/iota b/iota.copied"                                     NL
   "copy from iota"                                                      NL
   "copy to iota.copied"                                                 NL
+  "--- a/iota\t(revision 2)"                                            NL
+  "+++ b/iota.copied\t(working copy)"                                   NL
   "@@ -1 +1,2 @@"                                                       NL
   " This is the file 'iota'."                                           NL
   "+some more bytes to 'iota'"                                          NL
   "Index: A/mu.moved"                                                   NL
   "===================================================================" NL
-  "git --diff a/A/mu b/A/mu.moved"                                      NL
-  "move from A/mu"                                                      NL
-  "move to A/mu.moved"                                                  NL
+  "diff --git a/A/mu b/A/mu.moved"                                      NL
+  "rename from A/mu"                                                    NL
+  "rename to A/mu.moved"                                                NL
+  "--- a/A/mu\t(revision 2)"                                            NL
+  "+++ b/A/mu.moved\t(working copy)"                                    NL
   "@@ -1 +1,2 @@"                                                       NL
   " This is the file 'mu'."                                             NL
   "+some more bytes to 'mu'"                                            NL
+  "Index: new"                                                          NL
+  "===================================================================" NL
+  "diff --git a/new b/new"                                              NL
+  "new file mode 100644"                                                NL
+  "--- /dev/null\t(revision 0)"                                         NL
+  "+++ b/new\t(working copy)"                                           NL
+  "@@ -0,0 +1 @@"                                                       NL
+  "+This is the file 'new'."                                            NL
+  "Index: A/B/lambda"                                                   NL
+  "===================================================================" NL
+  "diff --git a/A/B/lambda b/A/B/lambda"                                NL
+  "deleted file mode 100644"                                            NL
+  "--- a/A/B/lambda\t(revision 2)"                                      NL
+  "+++ /dev/null\t(working copy)"                                       NL
+  "@@ -1 +0,0 @@"                                                       NL
+  "-This is the file 'lambda'."                                         NL
   ""                                                                    NL;
 
   /* Only the last git diff header is valid. The other ones either misses a
@@ -104,22 +124,22 @@ static const char *git_tree_and_text_uni
 static const char *bad_git_diff_header =
   "Index: iota.copied"                                                  NL
   "===================================================================" NL
-  "git --diff a/foo1 b/"                                                NL
-  "git --diff a/foo2 b"                                                 NL
-  "git --diff a/foo3 "                                                  NL
-  "git --diff a/foo3 "                                                  NL
-  "git --diff foo4 b/foo4"                                              NL
-  "git --diff a/foo5 b/foo5"                                            NL
+  "diff --git a/foo1 b/"                                                NL
+  "diff --git a/foo2 b"                                                 NL
+  "diff --git a/foo3 "                                                  NL
+  "diff --git a/foo3 "                                                  NL
+  "diff --git foo4 b/foo4"                                              NL
+  "diff --git a/foo5 b/foo5"                                            NL
   "random noise"                                                        NL
   "copy from foo5"                                                      NL
   "copy to foo5"                                                        NL
-  "git --diff a/foo6 b/foo6"                                            NL
+  "diff --git a/foo6 b/foo6"                                            NL
   "copy from foo6"                                                      NL
   "random noise"                                                        NL
   "copy to foo6"                                                        NL
-  "git --diff a/foo6 b/foo6"                                            NL
+  "diff --git a/foo6 b/foo6"                                            NL
   "copy from foo6"                                                      NL
-  "git --diff a/iota b/iota.copied"                                     NL
+  "diff --git a/iota b/iota.copied"                                     NL
   "copy from iota"                                                      NL
   "copy to iota.copied"                                                 NL
   "@@ -1 +1,2 @@"                                                       NL
@@ -179,6 +199,53 @@ static const char *bad_git_diff_header =
   "## -0,0 +1 ##"                                                       NL
   "+value"                                                              NL;
 
+  /* A unidiff containing diff symbols in the body of the hunks. */
+  static const char *diff_symbols_in_prop_unidiff =
+  "Index: iota"                                                         NL
+  "===================================================================" NL
+  "--- iota"                                                            NL
+  "+++ iota"                                                            NL
+  ""                                                                    NL
+  "Property changes on: iota"                                           NL
+  "___________________________________________________________________" NL
+  "Added: prop_add"                                                     NL
+  "## -0,0 +1,3 ##"                                                     NL
+  "+Added: bogus_prop"                                                  NL
+  "+## -0,0 +20 ##"                                                     NL
+  "+@@ -1,2 +0,0 @@"                                                    NL
+  "Deleted: prop_del"                                                   NL
+  "## -1,2 +0,0 ##"                                                     NL
+  "---- iota"                                                           NL
+  "-+++ iota"                                                           NL
+  "Modified: non-existent"                                              NL
+  "blah, just noise - no valid hunk header"                             NL
+  "Modified: prop_mod"                                                  NL
+  "## -1,4 +1,4 ##"                                                     NL
+  "-## -1,2 +1,2 ##"                                                    NL
+  "+## -1,3 +1,3 ##"                                                    NL
+  " ## -1,5 -0,0 ##"                                                    NL
+  " @@ -1,5 -0,0 @@"                                                    NL
+  " Modified: prop_mod"                                                 NL
+  "## -10,4 +10,4 ##"                                                   NL
+  " context"                                                            NL
+  " context"                                                            NL
+  " context"                                                            NL
+  "-## -0,0 +1 ##"                                                      NL
+  "+## -1,2 +1,4 ##"                                                    NL
+  ""                                                                    NL;
+
+  /* A unidiff containing paths with spaces. */
+  static const char *path_with_spaces_unidiff =
+  "diff --git a/path 1 b/path 1"                                        NL
+  "new file mode 100644"                                                NL
+  "diff --git a/path one 1 b/path one 1"                                NL
+  "new file mode 100644"                                                NL
+  "diff --git a/dir/ b/path b/dir/ b/path"                              NL
+  "new file mode 100644"                                                NL
+  "diff --git a/ b/path 1 b/ b/path 1"                                  NL
+  "new file mode 100644"                                                NL;
+
+
 /* Create a PATCH_FILE with name FNAME containing the contents of DIFF. */
 static svn_error_t *
 create_patch_file(apr_file_t **patch_file, const char *fname,
@@ -209,7 +276,7 @@ create_patch_file(apr_file_t **patch_fil
  * If ORIGINAL is TRUE, read the original hunk text; else, read the
  * modified hunk text. */
 static svn_error_t *
-check_content(svn_hunk_t *hunk, svn_boolean_t original,
+check_content(svn_diff_hunk_t *hunk, svn_boolean_t original,
               const char *expected, apr_pool_t *pool)
 {
   svn_stream_t *exp;
@@ -263,7 +330,7 @@ test_parse_unidiff(apr_pool_t *pool)
   for (i = 0; i < 2; i++)
     {
       svn_patch_t *patch;
-      svn_hunk_t *hunk;
+      svn_diff_hunk_t *hunk;
       apr_off_t pos;
 
       svn_pool_clear(iterpool);
@@ -282,7 +349,7 @@ test_parse_unidiff(apr_pool_t *pool)
       SVN_TEST_ASSERT(! strcmp(patch->new_filename, "A/C/gamma"));
       SVN_TEST_ASSERT(patch->hunks->nelts == 1);
 
-      hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+      hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
       SVN_ERR(check_content(hunk, ! reverse,
                             "This is the file 'gamma'." NL,
                             pool));
@@ -308,7 +375,7 @@ test_parse_unidiff(apr_pool_t *pool)
         }
       SVN_TEST_ASSERT(patch->hunks->nelts == 1);
 
-      hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+      hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
       SVN_ERR(check_content(hunk, ! reverse,
                             "This is the file 'gamma'." NL
                             "some less bytes to 'gamma'" NL,
@@ -331,7 +398,7 @@ test_parse_git_diff(apr_pool_t *pool)
 
   apr_file_t *patch_file;
   svn_patch_t *patch;
-  svn_hunk_t *hunk;
+  svn_diff_hunk_t *hunk;
   const char *fname = "test_parse_git_diff.patch";
 
   SVN_ERR(create_patch_file(&patch_file, fname, git_unidiff, pool));
@@ -358,7 +425,7 @@ test_parse_git_diff(apr_pool_t *pool)
   SVN_TEST_ASSERT(patch->operation == svn_diff_op_modified);
   SVN_TEST_ASSERT(patch->hunks->nelts == 1);
   
-  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "This is the file 'gamma'." NL,
@@ -403,7 +470,7 @@ test_parse_git_tree_and_text_diff(apr_po
 
   apr_file_t *patch_file;
   svn_patch_t *patch;
-  svn_hunk_t *hunk;
+  svn_diff_hunk_t *hunk;
   const char *fname = "test_parse_git_tree_and_text_diff.patch";
 
   SVN_ERR(create_patch_file(&patch_file, fname, git_tree_and_text_unidiff,
@@ -420,7 +487,7 @@ test_parse_git_tree_and_text_diff(apr_po
   SVN_TEST_ASSERT(patch->operation == svn_diff_op_copied);
   SVN_TEST_ASSERT(patch->hunks->nelts == 1);
   
-  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "This is the file 'iota'." NL,
@@ -442,7 +509,7 @@ test_parse_git_tree_and_text_diff(apr_po
   SVN_TEST_ASSERT(patch->operation == svn_diff_op_moved);
   SVN_TEST_ASSERT(patch->hunks->nelts == 1);
   
-  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "This is the file 'mu'." NL,
@@ -453,6 +520,45 @@ test_parse_git_tree_and_text_diff(apr_po
                         "some more bytes to 'mu'" NL,
                         pool));
 
+  SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, 
+                                    FALSE, /* reverse */
+                                    FALSE, /* ignore_whitespace */ 
+                                    pool, pool));
+  SVN_TEST_ASSERT(patch);
+  SVN_TEST_ASSERT(! strcmp(patch->old_filename, "/dev/null"));
+  SVN_TEST_ASSERT(! strcmp(patch->new_filename, "new"));
+  SVN_TEST_ASSERT(patch->operation == svn_diff_op_added);
+  SVN_TEST_ASSERT(patch->hunks->nelts == 1);
+  
+  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
+
+  SVN_ERR(check_content(hunk, TRUE,
+                        "",
+                        pool));
+
+  SVN_ERR(check_content(hunk, FALSE,
+                        "This is the file 'new'." NL,
+                        pool));
+
+  SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, 
+                                    FALSE, /* reverse */
+                                    FALSE, /* ignore_whitespace */ 
+                                    pool, pool));
+  SVN_TEST_ASSERT(patch);
+  SVN_TEST_ASSERT(! strcmp(patch->old_filename, "A/B/lambda"));
+  SVN_TEST_ASSERT(! strcmp(patch->new_filename, "/dev/null"));
+  SVN_TEST_ASSERT(patch->operation == svn_diff_op_deleted);
+  SVN_TEST_ASSERT(patch->hunks->nelts == 1);
+  
+  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
+
+  SVN_ERR(check_content(hunk, TRUE,
+                        "This is the file 'lambda'." NL,
+                        pool));
+
+  SVN_ERR(check_content(hunk, FALSE,
+                        "",
+                        pool));
   return SVN_NO_ERROR;
 }
 
@@ -462,7 +568,7 @@ test_bad_git_diff_headers(apr_pool_t *po
 {
   apr_file_t *patch_file;
   svn_patch_t *patch;
-  svn_hunk_t *hunk;
+  svn_diff_hunk_t *hunk;
   const char *fname = "test_bad_git_diff_header.patch";
 
   SVN_ERR(create_patch_file(&patch_file, fname, bad_git_diff_header,
@@ -478,7 +584,7 @@ test_bad_git_diff_headers(apr_pool_t *po
   SVN_TEST_ASSERT(patch->operation == svn_diff_op_copied);
   SVN_TEST_ASSERT(patch->hunks->nelts == 1);
   
-  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "This is the file 'iota'." NL,
@@ -500,7 +606,7 @@ test_parse_property_diff(apr_pool_t *poo
   apr_file_t *patch_file;
   svn_patch_t *patch;
   svn_prop_patch_t *prop_patch;
-  svn_hunk_t *hunk;
+  svn_diff_hunk_t *hunk;
   apr_array_header_t *hunks;
   const char *fname = "test_parse_property_diff.patch";
 
@@ -524,7 +630,7 @@ test_parse_property_diff(apr_pool_t *poo
   hunks = prop_patch->hunks;
 
   SVN_TEST_ASSERT(hunks->nelts == 1);
-  hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(hunks, 0 , svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "value" NL,
@@ -543,7 +649,7 @@ test_parse_property_diff(apr_pool_t *poo
   hunks = prop_patch->hunks;
 
   SVN_TEST_ASSERT(hunks->nelts == 1);
-  hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(hunks, 0 , svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "",
@@ -561,7 +667,7 @@ test_parse_property_diff(apr_pool_t *poo
   hunks = prop_patch->hunks;
 
   SVN_TEST_ASSERT(hunks->nelts == 2);
-  hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(hunks, 0 , svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "value" NL
@@ -577,7 +683,7 @@ test_parse_property_diff(apr_pool_t *poo
                         "context" NL,
                         pool));
 
-  hunk = APR_ARRAY_IDX(hunks, 1 , svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(hunks, 1 , svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "context" NL
@@ -602,7 +708,7 @@ test_parse_property_and_text_diff(apr_po
   apr_file_t *patch_file;
   svn_patch_t *patch;
   svn_prop_patch_t *prop_patch;
-  svn_hunk_t *hunk;
+  svn_diff_hunk_t *hunk;
   apr_array_header_t *hunks;
   const char *fname = "test_parse_property_and_text_diff.patch";
 
@@ -620,7 +726,7 @@ test_parse_property_and_text_diff(apr_po
   SVN_TEST_ASSERT(apr_hash_count(patch->prop_patches) == 1);
 
   /* Check contents of text hunk */
-  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "This is the file 'iota'." NL,
@@ -638,7 +744,7 @@ test_parse_property_and_text_diff(apr_po
 
   hunks = prop_patch->hunks;
   SVN_TEST_ASSERT(hunks->nelts == 1);
-  hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
+  hunk = APR_ARRAY_IDX(hunks, 0 , svn_diff_hunk_t *);
 
   SVN_ERR(check_content(hunk, TRUE,
                         "",
@@ -651,7 +757,159 @@ test_parse_property_and_text_diff(apr_po
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_parse_diff_symbols_in_prop_unidiff(apr_pool_t *pool)
+{
+  svn_patch_t *patch;
+  apr_file_t *patch_file;
+  svn_prop_patch_t *prop_patch;
+  svn_diff_hunk_t *hunk;
+  apr_array_header_t *hunks;
+  const char *fname = "test_parse_diff_symbols_in_prop_unidiff.patch";
+
+  SVN_ERR(create_patch_file(&patch_file, fname, diff_symbols_in_prop_unidiff,
+                            pool));
+
+  SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, 
+                                    FALSE, /* reverse */
+                                    FALSE, /* ignore_whitespace */ 
+                                    pool, pool));
+  SVN_TEST_ASSERT(patch);
+  SVN_TEST_ASSERT(! strcmp(patch->old_filename, "iota"));
+  SVN_TEST_ASSERT(! strcmp(patch->new_filename, "iota"));
+  SVN_TEST_ASSERT(patch->hunks->nelts == 0);
+  SVN_TEST_ASSERT(apr_hash_count(patch->prop_patches) == 3);
+
+  /* Check the added property */
+  prop_patch = apr_hash_get(patch->prop_patches, "prop_add",
+                            APR_HASH_KEY_STRING);
+  SVN_TEST_ASSERT(prop_patch->operation == svn_diff_op_added);
+
+  hunks = prop_patch->hunks;
+  SVN_TEST_ASSERT(hunks->nelts == 1);
+  hunk = APR_ARRAY_IDX(hunks, 0 , svn_diff_hunk_t *);
+
+  SVN_ERR(check_content(hunk, TRUE,
+                        "",
+                        pool));
 
+  SVN_ERR(check_content(hunk, FALSE,
+                        "Added: bogus_prop" NL
+                        "## -0,0 +20 ##" NL
+                        "@@ -1,2 +0,0 @@" NL,
+                        pool));
+
+  /* Check the deleted property */
+  prop_patch = apr_hash_get(patch->prop_patches, "prop_del",
+                            APR_HASH_KEY_STRING);
+  SVN_TEST_ASSERT(prop_patch->operation == svn_diff_op_deleted);
+
+  hunks = prop_patch->hunks;
+  SVN_TEST_ASSERT(hunks->nelts == 1);
+  hunk = APR_ARRAY_IDX(hunks, 0 , svn_diff_hunk_t *);
+
+  SVN_ERR(check_content(hunk, TRUE,
+                        "--- iota" NL
+                        "+++ iota" NL,
+                        pool));
+
+  SVN_ERR(check_content(hunk, FALSE,
+                        "",
+                        pool));
+
+  /* Check the modified property */
+  prop_patch = apr_hash_get(patch->prop_patches, "prop_mod",
+                            APR_HASH_KEY_STRING);
+  SVN_TEST_ASSERT(prop_patch->operation == svn_diff_op_modified);
+  hunks = prop_patch->hunks;
+  SVN_TEST_ASSERT(hunks->nelts == 2);
+  hunk = APR_ARRAY_IDX(hunks, 0 , svn_diff_hunk_t *);
+
+  SVN_ERR(check_content(hunk, TRUE,
+                        "## -1,2 +1,2 ##" NL
+                        "## -1,5 -0,0 ##" NL
+                        "@@ -1,5 -0,0 @@" NL
+                        "Modified: prop_mod" NL,
+                        pool));
+
+  SVN_ERR(check_content(hunk, FALSE,
+                        "## -1,3 +1,3 ##" NL
+                        "## -1,5 -0,0 ##" NL
+                        "@@ -1,5 -0,0 @@" NL
+                        "Modified: prop_mod" NL,
+                        pool));
+
+  hunk = APR_ARRAY_IDX(hunks, 1 , svn_diff_hunk_t *);
+
+  SVN_ERR(check_content(hunk, TRUE,
+                        "context" NL
+                        "context" NL
+                        "context" NL
+                        "## -0,0 +1 ##" NL,
+                        pool));
+
+  SVN_ERR(check_content(hunk, FALSE,
+                        "context" NL
+                        "context" NL
+                        "context" NL
+                        "## -1,2 +1,4 ##" NL,
+                        pool));
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_git_diffs_with_spaces_diff(apr_pool_t *pool)
+{
+  apr_file_t *patch_file;
+  svn_patch_t *patch;
+  const char *fname = "test_git_diffs_with_spaces_diff.patch";
+
+  SVN_ERR(create_patch_file(&patch_file, fname, path_with_spaces_unidiff,
+                            pool));
+
+  SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, 
+                                    FALSE, /* reverse */
+                                    FALSE, /* ignore_whitespace */ 
+                                    pool, pool));
+  SVN_TEST_ASSERT(patch);
+  SVN_TEST_ASSERT(! strcmp(patch->old_filename, "path 1"));
+  SVN_TEST_ASSERT(! strcmp(patch->new_filename, "path 1"));
+  SVN_TEST_ASSERT(patch->operation == svn_diff_op_added);
+  SVN_TEST_ASSERT(patch->hunks->nelts == 0);
+  
+  SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, 
+                                    FALSE, /* reverse */
+                                    FALSE, /* ignore_whitespace */ 
+                                    pool, pool));
+  SVN_TEST_ASSERT(patch);
+  SVN_TEST_ASSERT(! strcmp(patch->old_filename, "path one 1"));
+  SVN_TEST_ASSERT(! strcmp(patch->new_filename, "path one 1"));
+  SVN_TEST_ASSERT(patch->operation == svn_diff_op_added);
+  SVN_TEST_ASSERT(patch->hunks->nelts == 0);
+
+  SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, 
+                                    FALSE, /* reverse */
+                                    FALSE, /* ignore_whitespace */ 
+                                    pool, pool));
+  SVN_TEST_ASSERT(patch);
+  SVN_TEST_ASSERT(! strcmp(patch->old_filename, "dir/ b/path"));
+  SVN_TEST_ASSERT(! strcmp(patch->new_filename, "dir/ b/path"));
+  SVN_TEST_ASSERT(patch->operation == svn_diff_op_added);
+  SVN_TEST_ASSERT(patch->hunks->nelts == 0);
+
+  SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, 
+                                    FALSE, /* reverse */
+                                    FALSE, /* ignore_whitespace */ 
+                                    pool, pool));
+  SVN_TEST_ASSERT(patch);
+  SVN_TEST_ASSERT(! strcmp(patch->old_filename, " b/path 1"));
+  SVN_TEST_ASSERT(! strcmp(patch->new_filename, " b/path 1"));
+  SVN_TEST_ASSERT(patch->operation == svn_diff_op_added);
+  SVN_TEST_ASSERT(patch->hunks->nelts == 0);
+
+  return SVN_NO_ERROR;
+}
 /* ========================================================================== 
*/
 
 struct svn_test_descriptor_t test_funcs[] =
@@ -662,12 +920,16 @@ struct svn_test_descriptor_t test_funcs[
     SVN_TEST_PASS2(test_parse_git_diff,
                     "test git unidiff parsing"),
     SVN_TEST_PASS2(test_parse_git_tree_and_text_diff,
-                    "test git unidiff parsing of tree and text changes"),
+                   "test git unidiff parsing of tree and text changes"),
     SVN_TEST_XFAIL2(test_bad_git_diff_headers,
                     "test badly formatted git diff headers"),
     SVN_TEST_PASS2(test_parse_property_diff,
                    "test property unidiff parsing"),
     SVN_TEST_PASS2(test_parse_property_and_text_diff,
                    "test property and text unidiff parsing"),
+    SVN_TEST_PASS2(test_parse_diff_symbols_in_prop_unidiff,
+                   "test property diffs with odd symbols"),
+    SVN_TEST_PASS2(test_git_diffs_with_spaces_diff,
+                   "test git diffs with spaces in paths"),
     SVN_TEST_NULL
   };

Modified: 
subversion/branches/performance/subversion/tests/libsvn_subr/dirent_uri-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/libsvn_subr/dirent_uri-test.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- 
subversion/branches/performance/subversion/tests/libsvn_subr/dirent_uri-test.c 
(original)
+++ 
subversion/branches/performance/subversion/tests/libsvn_subr/dirent_uri-test.c 
Mon Sep  6 20:02:15 2010
@@ -2792,6 +2792,73 @@ test_file_url_from_dirent(apr_pool_t *po
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_dirent_is_under_root(apr_pool_t *pool)
+{
+  struct {
+    const char *base_path;
+    const char *path;
+    svn_boolean_t under_root;
+    const char *result;
+  } tests[] = {
+    { "/",        "/base",          FALSE},
+    { "/aa",      "/aa/bb",         FALSE},
+    { "/base",    "/base2",         FALSE},
+    { "/b",       "bb",             TRUE, "/b/bb"},
+    { "/b",       "../bb",          FALSE},
+    { "/b",       "r/./bb",         TRUE, "/b/r/bb"},
+    { "/b",       "r/../bb",        TRUE, "/b/bb"},
+    { "/b",       "r/../../bb",     FALSE},
+    { "/b",       "./bb",           TRUE, "/b/bb"},
+    { "/b",       ".",              TRUE, "/b"},
+    { "/b",       "",               TRUE, "/b"},
+    { "b",        "b",              TRUE, "b/b"},
+#ifdef SVN_USE_DOS_PATHS
+    { "C:/file",  "a\\d",           TRUE, "C:/file/a/d"},
+    { "C:/file",  "aa\\..\\d",      TRUE, "C:/file/d"},
+    { "C:/file",  "aa\\..\\..\\d",  FALSE},
+#else
+    { "C:/file",  "a\\d",           TRUE, "C:/file/a\\d"},
+    { "C:/file",  "aa\\..\\d",      TRUE, "C:/file/aa\\..\\d"},
+    { "C:/file",  "aa\\..\\..\\d",  TRUE, "C:/file/aa\\..\\..\\d"},
+#endif /* SVN_USE_DOS_PATHS */
+  };
+  int i;
+
+  for (i = 0; i < COUNT_OF(tests); i++)
+    {
+      svn_boolean_t under_root;
+      const char *result;
+      
+      SVN_ERR(svn_dirent_is_under_root(&under_root,
+                                       &result,
+                                       tests[i].base_path,
+                                       tests[i].path,
+                                       pool));
+
+      if (under_root != tests[i].under_root)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "svn_dirent_is_under_root(..\"%s\", \"%s\"..)"
+                                 " returned %s expected %s.",
+                                 tests[i].base_path,
+                                 tests[i].path,
+                                 under_root ? "TRUE" : "FALSE",
+                                 tests[i].under_root ? "TRUE" : "FALSE");
+
+      if (under_root
+          && strcmp(result, tests[i].result) != 0)
+        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                 "svn_dirent_is_under_root(..\"%s\", \"%s\"..)"
+                                 " found \"%s\" expected \"%s\".",
+                                 tests[i].base_path,
+                                 tests[i].path,
+                                 result,
+                                 tests[i].result);
+    }
+
+  return SVN_NO_ERROR;
+}
+
 
 /* The test table.  */
 
@@ -2890,5 +2957,7 @@ struct svn_test_descriptor_t test_funcs[
                    "test svn_uri_get_dirent_from_file_url errors"),
     SVN_TEST_PASS2(test_file_url_from_dirent,
                    "test svn_uri_get_file_url_from_dirent"),
+    SVN_TEST_PASS2(test_dirent_is_under_root,
+                   "test svn_dirent_is_under_root"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/performance/subversion/tests/libsvn_wc/db-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/libsvn_wc/db-test.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/libsvn_wc/db-test.c 
(original)
+++ subversion/branches/performance/subversion/tests/libsvn_wc/db-test.c Mon 
Sep  6 20:02:15 2010
@@ -324,6 +324,9 @@ create_fake_wc(const char *subdir, int f
 #ifdef SVN_WC__NODE_DATA
     statements[STMT_CREATE_NODE_DATA],
 #endif
+#ifdef SVN_WC__NODES
+    statements[STMT_CREATE_NODES],
+#endif
     TESTING_DATA,
     NULL
   };
@@ -1288,8 +1291,7 @@ test_global_relocate(apr_pool_t *pool)
   SVN_TEST_STRING_ASSERT(repos_uuid, UUID_ONE);
 
   /* Test relocating to a repos not existant in the db */
-  SVN_ERR(svn_wc__db_global_relocate(db, local_abspath, ROOT_THREE, TRUE,
-                                     pool));
+  SVN_ERR(svn_wc__db_global_relocate(db, local_abspath, ROOT_THREE, pool));
   SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL,
                                &repos_relpath, &repos_root_url, &repos_uuid,
                                NULL, NULL, NULL, NULL,

Modified: 
subversion/branches/performance/subversion/tests/libsvn_wc/pristine-store-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/libsvn_wc/pristine-store-test.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- 
subversion/branches/performance/subversion/tests/libsvn_wc/pristine-store-test.c
 (original)
+++ 
subversion/branches/performance/subversion/tests/libsvn_wc/pristine-store-test.c
 Mon Sep  6 20:02:15 2010
@@ -162,7 +162,7 @@ pristine_write_read(const svn_test_opts_
     svn_boolean_t present;
 
     SVN_ERR(svn_wc__db_pristine_check(&present, db, wc_abspath, data_sha1,
-                                      svn_wc__db_checkmode_usable, pool));
+                                      pool));
     SVN_ERR_ASSERT(! present);
   }
 
@@ -175,7 +175,7 @@ pristine_write_read(const svn_test_opts_
     svn_boolean_t present;
 
     SVN_ERR(svn_wc__db_pristine_check(&present, db, wc_abspath, data_sha1,
-                                      svn_wc__db_checkmode_usable, pool));
+                                      pool));
     SVN_ERR_ASSERT(present);
   }
 
@@ -220,7 +220,7 @@ pristine_write_read(const svn_test_opts_
     svn_boolean_t present;
 
     SVN_ERR(svn_wc__db_pristine_check(&present, db, wc_abspath, data_sha1,
-                                      svn_wc__db_checkmode_usable, pool));
+                                      pool));
     SVN_ERR_ASSERT(! present);
   }
 

Modified: subversion/branches/performance/tools/backup/hot-backup.py.in
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/tools/backup/hot-backup.py.in?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/tools/backup/hot-backup.py.in (original)
+++ subversion/branches/performance/tools/backup/hot-backup.py.in Mon Sep  6 
20:02:15 2010
@@ -106,6 +106,7 @@ Options:
                        zip  : Creates a compressed zip file.
                        zip64: Creates a zip64 file (can be > 2GB).
   --num-backups=N    Number of prior backups to keep around (0 to keep all).
+  --verify           Verify the backup.
   --help      -h     Print this help message and exit.
 
 """ % (scriptname,))
@@ -114,6 +115,7 @@ Options:
 try:
   opts, args = getopt.gnu_getopt(sys.argv[1:], "h?", ["archive-type=",
                                                       "num-backups=",
+                                                      "verify",
                                                       "help"])
 except getopt.GetoptError, e:
   sys.stderr.write("ERROR: %s\n\n" % e)
@@ -122,12 +124,15 @@ except getopt.GetoptError, e:
   sys.exit(2)
 
 archive_type = None
+verify_copy = False
 
 for o, a in opts:
   if o == "--archive-type":
     archive_type = a
   elif o == "--num-backups":
     num_backups = int(a)
+  elif o == "--verify":
+    verify_copy = True
   elif o in ("-h", "--help", "-?"):
     usage()
     sys.exit()
@@ -266,8 +271,18 @@ if err_code != 0:
 else:
   print("Done.")
 
+### Step 4: Verify the hotcopy
+if verify_copy:
+  print("Verifying backup...")
+  err_code = subprocess.call([svnadmin, "verify", "--quiet", backup_subdir])
+  if err_code != 0:
+    sys.stderr.write("Backup verification failed.\n")
+    sys.stderr.flush()
+    sys.exit(err_code)
+  else:
+    print("Done.")
 
-### Step 4: Make an archive of the backup if required.
+### Step 5: Make an archive of the backup if required.
 if archive_type:
   archive_path = backup_subdir + archive_map[archive_type]
   err_msg = ""
@@ -321,7 +336,7 @@ if archive_type:
     print("Archive created, removing backup '" + backup_subdir + "'...")
     safe_rmtree(backup_subdir, 1)
 
-### Step 5: finally, remove all repository backups other than the last
+### Step 6: finally, remove all repository backups other than the last
 ###         NUM_BACKUPS.
 
 if num_backups > 0:

Modified: 
subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- 
subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
 (original)
+++ 
subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
 Mon Sep  6 20:02:15 2010
@@ -29,6 +29,17 @@ IF ERRORLEVEL 1 (
   EXIT /B 0
 )
 
+PATH %PATH%;%TESTDIR%\bin
+SET result=0
+
+
+echo python win-tests.py -r -f fsfs --javahl "%TESTDIR%\tests"
+python win-tests.py -r -f fsfs --javahl "%TESTDIR%\tests"
+IF ERRORLEVEL 1 (
+  echo [python reported error %ERRORLEVEL%]
+  SET result=1
+)
+
 IF EXIST "%TESTDIR%\swig" rmdir /s /q "%TESTDIR%\swig"
 mkdir "%TESTDIR%\swig\py-release\libsvn"
 mkdir "%TESTDIR%\swig\py-release\svn"
@@ -38,16 +49,12 @@ xcopy "release\subversion\bindings\swig\
 xcopy "subversion\bindings\swig\python\*.py" 
"%TESTDIR%\swig\py-release\libsvn\*.py"
 xcopy "subversion\bindings\swig\python\svn\*.py" 
"%TESTDIR%\swig\py-release\svn\*.py"
 
-PATH %PATH%;%TESTDIR%\bin
 SET PYTHONPATH=%TESTDIR%\swig\py-release
 
-SET result=0
-
 python subversion\bindings\swig\python\tests\run_all.py
-IF ERRORLEVEL 1 SET result=1
-
-echo win-tests.py -r -f fsfs --javahl "%TESTDIR%\tests"
-win-tests.py -r -f fsfs --javahl "%TESTDIR%\tests"
-IF ERRORLEVEL 1 SET result=1
+IF ERRORLEVEL 1 (
+  echo [Python reported error %ERRORLEVEL%]
+  SET result=1
+)
 
-exit /b %RESULT%
+exit /b %result%

Modified: 
subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- 
subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd
 (original)
+++ 
subversion/branches/performance/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd
 Mon Sep  6 20:02:15 2010
@@ -51,9 +51,14 @@ POPD
 taskkill /im svn.exe /f 2> nul:
 taskkill /im svnadmin.exe /f 2> nul:
 taskkill /im svnserve.exe /f 2> nul:
+taskkill /im svnrdump.exe /f 2> nul:
+taskkill /im svnsync.exe /f 2> nul:
 taskkill /im httpd.exe /f 2> nul:
 IF EXIST "%TESTDIR%\tests\subversion\tests\cmdline\httpd\" (
   rmdir /s /q  "%TESTDIR%\tests\subversion\tests\cmdline\httpd"
 )
 
+del "%TESTDIR%\tests\*.log" 2> nul:
+
+
 exit /B 0

Propchange: subversion/branches/performance/tools/dev/svnraisetreeconflict/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Sep  6 20:02:15 2010
@@ -1 +1,2 @@
 .libs
+svnraisetreeconflict

Modified: subversion/branches/performance/tools/dev/unix-build/Makefile.svn
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/tools/dev/unix-build/Makefile.svn?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/performance/tools/dev/unix-build/Makefile.svn Mon Sep  
6 20:02:15 2010
@@ -10,6 +10,7 @@ ENABLE_JAVA_BINDINGS ?= no # they don't 
 USE_APR_ICONV ?= no # set to yes to use APR iconv instead of GNU iconv
 
 PWD            = $(shell pwd)
+UNAME          = $(shell uname)
 
 TAG            ?= none
 ifeq ($(TAG),none)
@@ -36,7 +37,8 @@ GNU_ICONV_VER = 1.13.1
 APR_UTIL_VER   = 1.3.9
 HTTPD_VER      = 2.2.15
 NEON_VER       = 0.29.3
-SERF_VER       = 0.6.x
+SERF_VER       = 0.7.x
+CYRUS_SASL_VER = 2.1.23
 SQLITE_VER     = 3.6.23.1
 
 BDB_DIST       = db-$(BDB_VER).tar.gz
@@ -45,6 +47,7 @@ GNU_ICONV_DIST        = libiconv-$(GNU_ICONV_VE
 NEON_DIST      = neon-$(NEON_VER).tar.gz
 #SERF_DIST     = serf-$(SERF_VER).tar.gz
 SQLITE_DIST    = sqlite-$(SQLITE_VER).tar.gz
+CYRUS_SASL_DIST        = cyrus-sasl-$(CYRUS_SASL_VER).tar.gz
 HTTPD_DIST     = httpd-$(HTTPD_VER).tar.bz2
 
 DISTFILES      = $(DISTDIR)/$(NEON_DIST) \
@@ -52,7 +55,8 @@ DISTFILES     = $(DISTDIR)/$(NEON_DIST) \
                $(DISTDIR)/$(SQLITE_DIST) \
                $(DISTDIR)/$(HTTPD_DIST) \
                $(DISTDIR)/$(APR_ICONV_DIST) \
-               $(DISTDIR)/$(GNU_ICONV_DIST)
+               $(DISTDIR)/$(GNU_ICONV_DIST) \
+               $(DISTDIR)/$(CYRUS_SASL_DIST)
 
 FETCH_CMD      = wget -c
 
@@ -67,6 +71,7 @@ NEON_URL      = http://webdav.org/neon/$(NEON
 #SERF_URL      = http://serf.googlecode.com/files/$(SERF_DIST)
 SERF_URL       = http://serf.googlecode.com/svn/branches/$(SERF_VER)
 SQLITE_URL     = http://www.sqlite.org/$(SQLITE_DIST)
+CYRUS_SASL_URL = ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/$(CYRUS_SASL_DIST)
 
 BDB_SRCDIR     = $(SRCDIR)/db-$(BDB_VER)
 APR_SRCDIR     = $(SRCDIR)/apr-$(APR_VER)
@@ -77,6 +82,7 @@ HTTPD_SRCDIR  = $(SRCDIR)/httpd-$(HTTPD_V
 NEON_SRCDIR    = $(SRCDIR)/neon-$(NEON_VER)
 SERF_SRCDIR    = $(SRCDIR)/serf-$(SERF_VER)
 SQLITE_SRCDIR  = $(SRCDIR)/sqlite-$(SQLITE_VER)
+CYRUS_SASL_SRCDIR      = $(SRCDIR)/cyrus-sasl-$(CYRUS_SASL_VER)
 SVN_SRCDIR     = $(SVN_WC)
 
 BDB_OBJDIR     = $(OBJDIR)/db-$(BDB_VER)
@@ -88,6 +94,7 @@ HTTPD_OBJDIR  = $(OBJDIR)/httpd-$(HTTPD_V
 NEON_OBJDIR    = $(OBJDIR)/neon-$(NEON_VER)
 SERF_OBJDIR    = $(OBJDIR)/serf-$(SERF_VER)
 SQLITE_OBJDIR  = $(OBJDIR)/sqlite-$(SQLITE_VER)
+CYRUS_SASL_OBJDIR      = $(OBJDIR)/cyrus-sasl-$(CYRUS_SASL_VER)
 SVN_OBJDIR     = $(OBJDIR)/$(SVN_REL_WC)
 
 # Tweak this for out-of-tree builds. Note that running individual
@@ -102,16 +109,17 @@ svn_builddir      ?=$(SVN_WC)
 .PHONY: all reset clean nuke
 
 all: dirs-create bdb-install apr-install iconv-install apr-util-install \
-       httpd-install neon-install serf-install sqlite-install svn-install \
-       svn-bindings-install
+       httpd-install neon-install serf-install sqlite-install \
+       cyrus-sasl-install svn-install svn-bindings-install
 
 # Use these to start a build from the beginning.
 reset: dirs-reset bdb-reset apr-reset iconv-reset apr-util-reset \
-       httpd-reset neon-reset serf-reset sqlite-reset svn-reset
+       httpd-reset neon-reset serf-reset sqlite-reset cyrus-sasl-reset \
+       svn-reset
 
 # Use to save disc space.
 clean: bdb-clean apr-clean iconv-clean apr-util-clean httpd-clean \
-       neon-clean serf-clean svn-clean
+       neon-clean serf-clean cyrus-sasl-clean svn-clean
 
 # Nukes everything (including installed binaries!)
 # Use this to start ALL OVER AGAIN! Use with caution!
@@ -129,7 +137,7 @@ nuke:
                        yes)    echo "You said $$ANSWER. I will continue."; \
                                echo rm -rf $(SRCDIR) $(OBJDIR) $(PREFIX); \
                                rm -rf $(SRCDIR) $(OBJDIR) $(PREFIX); \
-                               echo "Remember to reset the build!"; \
+                               $(MAKE) reset; \
                                ;; \
                        "")     echo "You said no."; \
                                ;; \
@@ -528,11 +536,22 @@ $(NEON_OBJDIR)/.retrieved: $(DISTDIR)/$(
        tar -C $(SRCDIR) -zxf $(DISTDIR)/$(NEON_DIST)
        touch $@
 
+# OpenBSD does not have krb5-config in PATH, but the neon port has
+# a suitable replacement.
+ifeq ($(UNAME),OpenBSD)
+KRB5_CONFIG_PATH=/usr/ports/net/neon/files
+endif
+
 # configure neon
 $(NEON_OBJDIR)/.configured: $(NEON_OBJDIR)/.retrieved
        cd $(NEON_SRCDIR) && ./autogen.sh
+       if [ -n "$(KRB5_CONFIG_PATH)" -a -d "$(KRB5_CONFIG_PATH)" ]; then \
+               cp $(KRB5_CONFIG_PATH)/krb5-config $(NEON_OBJDIR); \
+               chmod +x $(NEON_OBJDIR)/krb5-config; \
+       fi
        cd $(NEON_OBJDIR) \
                && env CFLAGS="-g" $(NEON_SRCDIR)/configure \
+               PATH=$(NEON_OBJDIR):$$PATH \
                --prefix=$(PREFIX)/neon \
                --with-ssl \
                --enable-shared
@@ -644,6 +663,56 @@ $(SQLITE_OBJDIR)/.installed: $(SQLITE_OB
        touch $@
 
 #######################################################################
+# cyrus-sasl
+#######################################################################
+
+cyrus-sasl-retrieve:   $(CYRUS_SASL_OBJDIR)/.retrieved
+cyrus-sasl-configure:  $(CYRUS_SASL_OBJDIR)/.configured
+cyrus-sasl-compile:    $(CYRUS_SASL_OBJDIR)/.compiled
+cyrus-sasl-install:    $(CYRUS_SASL_OBJDIR)/.installed
+cyrus-sasl-reset:
+       $(foreach f, .retrieved .configured .compiled .installed, \
+               rm -f $(CYRUS_SASL_OBJDIR)/$(f);)
+
+cyrus-sasl-clean:
+       -(cd $(CYRUS_SASL_OBJDIR) && make clean)
+
+# fetch distfile for cyrus-sasl
+$(DISTDIR)/$(CYRUS_SASL_DIST):
+       cd $(DISTDIR) && $(FETCH_CMD) $(CYRUS_SASL_URL)
+
+# retrieve cyrus-sasl
+$(CYRUS_SASL_OBJDIR)/.retrieved: $(DISTDIR)/$(CYRUS_SASL_DIST)
+       [ -d $(CYRUS_SASL_OBJDIR) ] || mkdir -p $(CYRUS_SASL_OBJDIR)
+       tar -C $(SRCDIR) -zxf $(DISTDIR)/$(CYRUS_SASL_DIST)
+       touch $@
+
+# configure cyrus-sasl
+$(CYRUS_SASL_OBJDIR)/.configured: $(CYRUS_SASL_OBJDIR)/.retrieved
+       cd $(CYRUS_SASL_OBJDIR) \
+               && env CFLAGS="-g" $(CYRUS_SASL_SRCDIR)/configure \
+               --with-dbpath=$(PREFIX)/cyrus-sasl/etc/sasldb2 \
+               --with-plugindir=$(PREFIX)/cyrus-sasl/lib/sasl2 \
+               --with-configdir=$(PREFIX)/cyrus-sasl/lib/sasl2 \
+               --with-bdb-libdir=$(PREFIX)/bdb/lib \
+               --with-bdb-incdir=$(PREFIX)/bdb/include \
+               --with-dblib=berkeley \
+               --with-sqlite=$(PREFIX)/sqlite \
+               --prefix=$(PREFIX)/cyrus-sasl
+       touch $@
+
+# compile cyrus-sasl
+$(CYRUS_SASL_OBJDIR)/.compiled: $(CYRUS_SASL_OBJDIR)/.configured
+       (cd $(CYRUS_SASL_OBJDIR) && make)
+       touch $@
+
+# install cyrus-sasl
+$(CYRUS_SASL_OBJDIR)/.installed: $(CYRUS_SASL_OBJDIR)/.compiled
+       (cd $(CYRUS_SASL_OBJDIR) && make install)
+       touch $@
+
+
+#######################################################################
 # svn
 #######################################################################
 
@@ -734,7 +803,7 @@ $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)
                        --with-serf="$(PREFIX)/serf" \
                        --with-sqlite="$(PREFIX)/sqlite" \
                        --with-berkeley-db="$(BDB_FLAG)" \
-                       --with-sasl="no" \
+                       --with-sasl="$(PREFIX)/cyrus-sasl" \
                        --with-ruby-sitedir="$(SVN_PREFIX)/lib/ruby/site_ruby" \
                        --disable-mod-activation \
                        $(JAVAHL_FLAG)

Propchange: subversion/branches/performance/tools/server-side/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Sep  6 20:02:15 2010
@@ -1,3 +1,4 @@
 .libs
 svn-populate-node-origins-index
 svnauthz-validate
+svn-rep-sharing-stats

Modified: subversion/branches/performance/win-tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/performance/win-tests.py?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/win-tests.py (original)
+++ subversion/branches/performance/win-tests.py Mon Sep  6 20:02:15 2010
@@ -59,6 +59,7 @@ def _usage_exit():
   print("  -u URL, --url=URL      : run ra_dav or ra_svn tests against URL;")
   print("                           will start svnserve for ra_svn tests")
   print("  -v, --verbose          : talk more")
+  print("  -q, --quiet            : talk less")
   print("  -f, --fs-type=type     : filesystem type to use (fsfs is default)")
   print("  -c, --cleanup          : cleanup after running a test")
   print("  -t, --test=TEST        : Run the TEST test (all is default); use")
@@ -111,9 +112,9 @@ for section in gen_obj.sections.values()
     dll_basename = section.name + "-" + str(gen_obj.version) + ".dll"
     svn_dlls.append(os.path.join("subversion", section.name, dll_basename))
 
-opts, args = my_getopt(sys.argv[1:], 'hrdvct:pu:f:',
-                       ['release', 'debug', 'verbose', 'cleanup', 'test=',
-                        'url=', 'svnserve-args=', 'fs-type=', 'asp.net-hack',
+opts, args = my_getopt(sys.argv[1:], 'hrdvqct:pu:f:',
+                       ['release', 'debug', 'verbose', 'quiet', 'cleanup',
+                        'test=', 'url=', 'svnserve-args=', 'fs-type=', 
'asp.net-hack',
                         'httpd-dir=', 'httpd-port=', 'httpd-daemon',
                         'httpd-server', 'http-library=', 'help',
                         'fsfs-packing', 'fsfs-sharding=', 'javahl',
@@ -123,7 +124,7 @@ if len(args) > 1:
   print('Warning: non-option arguments after the first one will be ignored')
 
 # Interpret the options and set parameters
-base_url, fs_type, verbose, cleanup = None, None, None, None
+base_url, fs_type, verbose, quiet, cleanup = None, None, None, None, None
 repo_loc = 'local repository.'
 objdir = 'Debug'
 log = 'tests.log'
@@ -154,6 +155,8 @@ for opt, val in opts:
     fs_type = val
   elif opt in ('-v', '--verbose'):
     verbose = 1
+  elif opt in ('-q', '--quiet'):
+    quiet = 1
   elif opt in ('-c', '--cleanup'):
     cleanup = 1
   elif opt in ('-t', '--test'):
@@ -468,6 +471,7 @@ class Httpd:
       fp.write(self._sys_module('authn_file_module', 'mod_authn_file.so'))
     else:
       fp.write(self._sys_module('auth_module', 'mod_auth.so'))
+    fp.write(self._sys_module('alias_module', 'mod_alias.so'))
     fp.write(self._sys_module('mime_module', 'mod_mime.so'))
     fp.write(self._sys_module('log_config_module', 'mod_log_config.so'))
 
@@ -479,10 +483,16 @@ class Httpd:
     fp.write(self._svn_repo('repositories'))
     fp.write(self._svn_repo('local_tmp'))
 
+    # And two redirects for the redirect tests
+    fp.write('RedirectMatch permanent ^/svn-test-work/repositories/' 
+             'REDIRECT-PERM-(.*)$ /svn-test-work/repositories/$1\n')
+    fp.write('RedirectMatch           ^/svn-test-work/repositories/'
+             'REDIRECT-TEMP-(.*)$ /svn-test-work/repositories/$1\n')
+
     fp.write('TypesConfig     ' + self._quote(self.httpd_mime_types) + '\n')
     fp.write('LogLevel        Debug\n')
     fp.write('HostNameLookups Off\n')
-
+    
     fp.close()
 
   def __del__(self):
@@ -653,8 +663,8 @@ if not test_javahl:
                              os.path.join(abs_builddir, log),
                              os.path.join(abs_builddir, faillog),
                              base_url, fs_type, http_library,
-                             server_minor_version, 1, cleanup,
-                             enable_sasl, parallel, config_file,
+                             server_minor_version, not quiet,
+                             cleanup, enable_sasl, parallel, config_file,
                              fsfs_sharding, fsfs_packing,
                              list_tests, svn_bin)
   old_cwd = os.getcwd()


Reply via email to