You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/08/10 20:06:33 UTC

svn commit: r984153 [38/39] - in /subversion/branches/ignore-mergeinfo: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ build/hudson/ build/hudson/jobs/subversion-1.6.x-solaris/ build/hudson/jobs/subversion-1.6.x-ubuntu/ build/hu...

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_client/client-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_client/client-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_client/client-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_client/client-test.c Tue Aug 10 18:06:17 2010
@@ -22,12 +22,17 @@
  */
 
 
+
+#include <limits.h>
 #include "svn_mergeinfo.h"
 #include "../../libsvn_client/mergeinfo.h"
 #include "svn_pools.h"
 #include "svn_client.h"
+#include "svn_repos.h"
+#include "svn_subst.h"
 
 #include "../svn_test.h"
+#include "../svn_test_fs.h"
 
 typedef struct {
   const char *path;
@@ -199,6 +204,171 @@ test_args_to_target_array(apr_pool_t *po
   return SVN_NO_ERROR;
 }
 
+
+/* A helper function for test_patch().
+ * It compares a patched or reject file against expected content.
+ * It also deletes the file if the check was successful. */
+static svn_error_t *
+check_patch_result(const char *path, const char **expected_lines,
+                   int num_expected_lines, apr_pool_t *pool)
+{
+  svn_stream_t *stream;
+  apr_pool_t *iterpool;
+  int i;
+
+  SVN_ERR(svn_stream_open_readonly(&stream, path, pool, pool));
+  i = 0;
+  iterpool = svn_pool_create(pool);
+  while (TRUE)
+    {
+      svn_boolean_t eof;
+      svn_stringbuf_t *line;
+
+      svn_pool_clear(iterpool);
+
+      SVN_ERR(svn_stream_readline(stream, &line, APR_EOL_STR, &eof, pool));
+      if (i < num_expected_lines)
+        if (strcmp(expected_lines[i++], line->data) != 0)
+          return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                                   "%s line %d didn't match the expected line "
+                                   "(strlen=%d vs strlen=%d)", path, i,
+                                   (int)strlen(expected_lines[i-1]),
+                                   (int)strlen(line->data));
+
+      if (eof)
+        break;
+    }
+  svn_pool_destroy(iterpool);
+
+  SVN_ERR_ASSERT(i == num_expected_lines);
+  SVN_ERR(svn_io_remove_file2(path, FALSE, pool));
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_patch(const svn_test_opts_t *opts,
+           apr_pool_t *pool)
+{
+  svn_repos_t *repos;
+  svn_fs_t *fs;
+  svn_fs_txn_t *txn;
+  svn_fs_root_t *txn_root;
+  apr_hash_t *patched_tempfiles;
+  apr_hash_t *reject_tempfiles;
+  const char *repos_url;
+  const char *wc_path;
+  const char *cwd;
+  svn_revnum_t committed_rev;
+  svn_opt_revision_t rev;
+  svn_opt_revision_t peg_rev;
+  svn_client_ctx_t *ctx;
+  apr_file_t *patch_file;
+  const char *patch_file_path;
+  const char *patched_tempfile_path;
+  const char *reject_tempfile_path;
+  const char *key;
+  int i;
+#define NL APR_EOL_STR
+#define UNIDIFF_LINES 7
+  const char *unidiff_patch[UNIDIFF_LINES] =  {
+    "Index: A/D/gamma" NL,
+    "===================================================================\n",
+    "--- A/D/gamma\t(revision 1)" NL,
+    "+++ A/D/gamma\t(working copy)" NL,
+    "@@ -1 +1 @@" NL,
+    "-This is really the file 'gamma'." NL,
+    "+It is really the file 'gamma'." NL
+  };
+#define EXPECTED_GAMMA_LINES 1
+  const char *expected_gamma[EXPECTED_GAMMA_LINES] = {
+    "This is the file 'gamma'."
+  };
+#define EXPECTED_GAMMA_REJECT_LINES 5
+  const char *expected_gamma_reject[EXPECTED_GAMMA_REJECT_LINES] = {
+    "--- A/D/gamma",
+    "+++ A/D/gamma",
+    "@@ -1,1 +1,1 @@",
+    "-This is really the file 'gamma'.",
+    "+It is really the file 'gamma'."
+  };
+
+  /* Create a filesytem and repository. */
+  SVN_ERR(svn_test__create_repos(&repos, "test-patch-repos",
+                                 opts, pool));
+  fs = svn_repos_fs(repos);
+
+  /* Prepare a txn to receive the greek tree. */
+  SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
+
+  /* Check out the HEAD revision */
+  SVN_ERR(svn_dirent_get_absolute(&cwd, "", pool));
+
+  if (cwd[0] == '/')
+    repos_url = apr_pstrcat(pool, "file://", cwd,
+                            "/test-patch-repos", NULL);
+  else
+    /* On Windows CWD is always in "X:/..." style */
+    repos_url = apr_pstrcat(pool, "file:///", cwd,
+                            "/test-patch-repos", NULL);
+
+  repos_url = svn_uri_canonicalize(repos_url, pool);
+
+  /* Put wc inside an unversioned directory.  Checking out a 1.7 wc
+     directly inside a 1.6 wc doesn't work reliably, an intervening
+     unversioned directory prevents the problems. */
+  wc_path = svn_dirent_join(cwd, "test-patch", pool);
+  SVN_ERR(svn_io_make_dir_recursively(wc_path, pool));
+  svn_test_add_dir_cleanup(wc_path);
+
+  wc_path = svn_dirent_join(wc_path, "test-patch-wc", pool);
+  SVN_ERR(svn_io_remove_dir2(wc_path, TRUE, NULL, NULL, pool));
+  rev.kind = svn_opt_revision_head;
+  peg_rev.kind = svn_opt_revision_unspecified;
+  SVN_ERR(svn_client_create_context(&ctx, pool));
+  SVN_ERR(svn_client_checkout3(NULL, repos_url, wc_path,
+                               &peg_rev, &rev, svn_depth_infinity,
+                               TRUE, FALSE, ctx, pool));
+
+  /* Create the patch file. */
+  patch_file_path = svn_dirent_join_many(pool, cwd,
+                                         "test-patch", "test-patch.diff", NULL);
+  SVN_ERR(svn_io_file_open(&patch_file, patch_file_path,
+                           (APR_READ | APR_WRITE | APR_CREATE | APR_TRUNCATE),
+                           APR_OS_DEFAULT, pool));
+  for (i = 0; i < UNIDIFF_LINES; i++)
+    {
+      apr_size_t len = strlen(unidiff_patch[i]);
+      SVN_ERR(svn_io_file_write(patch_file, unidiff_patch[i], &len, pool));
+      SVN_ERR_ASSERT(len == strlen(unidiff_patch[i]));
+    }
+  SVN_ERR(svn_io_file_flush_to_disk(patch_file, pool));
+
+  /* Apply the patch. */
+  SVN_ERR(svn_client_patch(patch_file_path, wc_path, FALSE, 0, FALSE,
+                           NULL, NULL, &patched_tempfiles, &reject_tempfiles,
+                           ctx, pool, pool));
+  SVN_ERR(svn_io_file_close(patch_file, pool));
+
+  SVN_ERR_ASSERT(apr_hash_count(patched_tempfiles) == 1);
+  key = "A/D/gamma";
+  patched_tempfile_path = apr_hash_get(patched_tempfiles, key,
+                                       APR_HASH_KEY_STRING);
+  SVN_ERR(check_patch_result(patched_tempfile_path, expected_gamma,
+                             EXPECTED_GAMMA_LINES, pool));
+  SVN_ERR_ASSERT(apr_hash_count(reject_tempfiles) == 1);
+  key = "A/D/gamma";
+  reject_tempfile_path = apr_hash_get(reject_tempfiles, key,
+                                     APR_HASH_KEY_STRING);
+  SVN_ERR(check_patch_result(reject_tempfile_path, expected_gamma_reject,
+                             EXPECTED_GAMMA_REJECT_LINES, pool));
+
+  return SVN_NO_ERROR;
+}
+
 /* ========================================================================== */
 
 struct svn_test_descriptor_t test_funcs[] =
@@ -208,5 +378,6 @@ struct svn_test_descriptor_t test_funcs[
                    "test svn_client__elide_mergeinfo_catalog"),
     SVN_TEST_PASS2(test_args_to_target_array,
                    "test svn_client_args_to_target_array"),
+    SVN_TEST_OPTS_PASS(test_patch, "test svn_client_patch"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/diff-diff3-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/diff-diff3-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/diff-diff3-test.c Tue Aug 10 18:06:17 2010
@@ -567,20 +567,20 @@ test_two_way_unified(apr_pool_t *pool)
 
   SVN_ERR(two_way_diff("foo5d", "bar5d",
                        "Aa\r\n"
-					   "\r\n"
+                       "\r\n"
                        "Bb\r\n"
-					   "\r\n"
+                       "\r\n"
                        "Cc\r\n"
-					   "\r\n",
+                       "\r\n",
 
                        "Aa\n"
-					   "\n"
+                       "\n"
                        "Bb\n"
-					   "\n"
+                       "\n"
                        "Cc\n"
-					   "\n",
+                       "\n",
 
-					   "",
+                       "",
                        diff_opts, pool));
   diff_opts->ignore_eol_style = FALSE;
 

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/parse-diff-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/parse-diff-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/parse-diff-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_diff/parse-diff-test.c Tue Aug 10 18:06:17 2010
@@ -25,7 +25,6 @@
 #include "../svn_test.h"
 
 #include "svn_diff.h"
-#include "private/svn_diff_private.h"
 #include "svn_pools.h"
 #include "svn_utf.h"
 
@@ -63,12 +62,10 @@ test_parse_unidiff(apr_pool_t *pool)
   apr_file_t *patch_file;
   apr_status_t status;
   apr_size_t len;
-  apr_off_t pos;
   const char *fname = "test_parse_unidiff.patch";
-  svn_patch_t *patch;
-  svn_hunk_t *hunk;
-  svn_stringbuf_t *buf;
-  svn_boolean_t eof;
+  svn_boolean_t reverse;
+  int i;
+  apr_pool_t *iterpool;
 
   /* Create a patch file. */
   status = apr_file_open(&patch_file, fname,
@@ -83,69 +80,121 @@ test_parse_unidiff(apr_pool_t *pool)
     return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
                              "Cannot write to '%s'", fname);
 
-  /* Reset file pointer. */
-  pos = 0;
-  SVN_ERR(svn_io_file_seek(patch_file, APR_SET, &pos, pool));
-
-  /* We have two patches with one hunk each.
-   * Parse the first patch. */
-  SVN_ERR(svn_diff__parse_next_patch(&patch, patch_file, pool, pool));
-  SVN_ERR_ASSERT(patch);
-  SVN_ERR_ASSERT(! strcmp(patch->old_filename, "A/C/gamma"));
-  SVN_ERR_ASSERT(! strcmp(patch->new_filename, "A/C/gamma"));
-  SVN_ERR_ASSERT(patch->hunks->nelts == 1);
-
-  /* Make sure original text was parsed correctly. */
-  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
-  SVN_ERR(svn_stream_readline(hunk->original_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(! eof);
-  SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
-  /* Now we should get EOF. */
-  SVN_ERR(svn_stream_readline(hunk->original_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(eof);
-  SVN_ERR_ASSERT(buf->len == 0);
-
-  /* Make sure modified text was parsed correctly. */
-  SVN_ERR(svn_stream_readline(hunk->modified_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(! eof);
-  SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
-  SVN_ERR(svn_stream_readline(hunk->modified_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(! eof);
-  SVN_ERR_ASSERT(! strcmp(buf->data, "some more bytes to 'gamma'"));
-  /* Now we should get EOF. */
-  SVN_ERR(svn_stream_readline(hunk->modified_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(eof);
-  SVN_ERR_ASSERT(buf->len == 0);
-
-  /* Parse the second patch. */
-  SVN_ERR(svn_diff__parse_next_patch(&patch, patch_file, pool, pool));
-  SVN_ERR_ASSERT(patch);
-  SVN_ERR_ASSERT(! strcmp(patch->old_filename, "A/D/gamma.orig"));
-  SVN_ERR_ASSERT(! strcmp(patch->new_filename, "A/D/gamma"));
-  SVN_ERR_ASSERT(patch->hunks->nelts == 1);
-
-  /* Make sure original text was parsed correctly. */
-  hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
-  SVN_ERR(svn_stream_readline(hunk->original_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(! eof);
-  SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
-  SVN_ERR(svn_stream_readline(hunk->original_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(! eof);
-  SVN_ERR_ASSERT(! strcmp(buf->data, "some less bytes to 'gamma'"));
-  /* Now we should get EOF. */
-  SVN_ERR(svn_stream_readline(hunk->original_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(eof);
-  SVN_ERR_ASSERT(buf->len == 0);
-
-  /* Make sure modified text was parsed correctly. */
-  SVN_ERR(svn_stream_readline(hunk->modified_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(! eof);
-  SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
-  /* Now we should get EOF. */
-  SVN_ERR(svn_stream_readline(hunk->modified_text, &buf, NL, &eof, pool));
-  SVN_ERR_ASSERT(eof);
-  SVN_ERR_ASSERT(buf->len == 0);
-
+  reverse = FALSE;
+  iterpool = svn_pool_create(pool);
+  for (i = 0; i < 2; i++)
+    {
+      svn_patch_t *patch;
+      svn_hunk_t *hunk;
+      svn_stringbuf_t *buf;
+      svn_boolean_t eof;
+      apr_off_t pos;
+      svn_stream_t *original_text;
+      svn_stream_t *modified_text;
+
+      svn_pool_clear(iterpool);
+
+      /* Reset file pointer. */
+      pos = 0;
+      SVN_ERR(svn_io_file_seek(patch_file, APR_SET, &pos, iterpool));
+
+      /* We have two patches with one hunk each.
+       * Parse the first patch. */
+      SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, reverse,
+                                        iterpool, iterpool));
+      SVN_ERR_ASSERT(patch);
+      SVN_ERR_ASSERT(! strcmp(patch->old_filename, "A/C/gamma"));
+      SVN_ERR_ASSERT(! strcmp(patch->new_filename, "A/C/gamma"));
+      SVN_ERR_ASSERT(patch->hunks->nelts == 1);
+
+      hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+      if (reverse)
+        {
+          /* Hunk texts come out of the parser inverted,
+           * so this inverts them a second time. */
+          original_text = hunk->modified_text;
+          modified_text = hunk->original_text;
+        }
+      else
+        {
+          original_text = hunk->original_text;
+          modified_text = hunk->modified_text;
+        }
+
+      /* Make sure original text was parsed correctly. */
+      SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(! eof);
+      SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
+      /* Now we should get EOF. */
+      SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(eof);
+      SVN_ERR_ASSERT(buf->len == 0);
+
+      /* Make sure modified text was parsed correctly. */
+      SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(! eof);
+      SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
+      SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(! eof);
+      SVN_ERR_ASSERT(! strcmp(buf->data, "some more bytes to 'gamma'"));
+      /* Now we should get EOF. */
+      SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(eof);
+      SVN_ERR_ASSERT(buf->len == 0);
+
+      /* Parse the second patch. */
+      SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, reverse, pool, pool));
+      SVN_ERR_ASSERT(patch);
+      if (reverse)
+        {
+          SVN_ERR_ASSERT(! strcmp(patch->new_filename, "A/D/gamma.orig"));
+          SVN_ERR_ASSERT(! strcmp(patch->old_filename, "A/D/gamma"));
+        }
+      else
+        {
+          SVN_ERR_ASSERT(! strcmp(patch->old_filename, "A/D/gamma.orig"));
+          SVN_ERR_ASSERT(! strcmp(patch->new_filename, "A/D/gamma"));
+        }
+      SVN_ERR_ASSERT(patch->hunks->nelts == 1);
+
+      hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
+      if (reverse)
+        {
+          /* Hunk texts come out of the parser inverted,
+           * so this inverts them a second time. */
+          original_text = hunk->modified_text;
+          modified_text = hunk->original_text;
+        }
+      else
+        {
+          original_text = hunk->original_text;
+          modified_text = hunk->modified_text;
+        }
+
+      /* Make sure original text was parsed correctly. */
+      SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(! eof);
+      SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
+      SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(! eof);
+      SVN_ERR_ASSERT(! strcmp(buf->data, "some less bytes to 'gamma'"));
+      /* Now we should get EOF. */
+      SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(eof);
+      SVN_ERR_ASSERT(buf->len == 0);
+
+      /* Make sure modified text was parsed correctly. */
+      SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(! eof);
+      SVN_ERR_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
+      /* Now we should get EOF. */
+      SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
+      SVN_ERR_ASSERT(eof);
+      SVN_ERR_ASSERT(buf->len == 0);
+
+      reverse = !reverse;
+    }
+  svn_pool_destroy(iterpool);
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_base/changes-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_base/changes-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_base/changes-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_base/changes-test.c Tue Aug 10 18:06:17 2010
@@ -698,6 +698,204 @@ changes_fetch_ordering(const svn_test_op
 }
 
 
+static svn_error_t *
+changes_bad_sequences(const svn_test_opts_t *opts,
+                      apr_pool_t *pool)
+{
+  svn_fs_t *fs;
+  apr_pool_t *subpool = svn_pool_create(pool);
+  svn_error_t *err;
+
+  /* Create a new fs and repos */
+  SVN_ERR(svn_test__create_bdb_fs
+          (&fs, "test-repo-changes-bad-sequences", opts,
+           pool));
+
+  /* Test changes bogus because a path's node-rev-ID changed
+     unexpectedly. */
+  svn_pool_clear(subpool);
+  {
+    static const char *bogus_changes[][6]
+         /* KEY   PATH   NODEREVID  KIND       TEXT PROP */
+      = { { "x",  "/foo",  "1.0.0",  "add",     0 ,  0  },
+          { "x",  "/foo",  "1.0.0",  "modify",  0 , "1" },
+          { "x",  "/foo",  "2.0.0",  "modify", "1", "1" } };
+    int num_changes = sizeof(bogus_changes) / sizeof(const char *) / 6;
+    struct changes_args args;
+    int i;
+
+    for (i = 0; i < num_changes; i++)
+      {
+        change_t change;
+
+        /* Set up the current change item. */
+        change.path = bogus_changes[i][1];
+        change.noderev_id = svn_fs_parse_id(bogus_changes[i][2],
+                                            strlen(bogus_changes[i][2]),
+                                            subpool);
+        change.kind = string_to_kind(bogus_changes[i][3]);
+        change.text_mod = bogus_changes[i][4] ? 1 : 0;
+        change.prop_mod = bogus_changes[i][5] ? 1 : 0;
+
+        /* Set up transaction baton. */
+        args.fs = fs;
+        args.key = "x";
+        args.change = &change;
+
+        /* Write new changes to the changes table. */
+        SVN_ERR(svn_fs_base__retry_txn(args.fs, txn_body_changes_add, &args,
+                                       TRUE, subpool));
+      }
+
+    /* Now read 'em back, looking for an error. */
+    args.fs = fs;
+    args.key = "x";
+    err = svn_fs_base__retry_txn(args.fs, txn_body_changes_fetch, &args,
+                                 TRUE, subpool);
+    if (!err)
+      {
+        return svn_error_create(SVN_ERR_TEST_FAILED, 0,
+                                "Expected SVN_ERR_FS_CORRUPT, got no error.");
+      }
+    else if (err->apr_err != SVN_ERR_FS_CORRUPT)
+      {
+        return svn_error_create(SVN_ERR_TEST_FAILED, err,
+                                "Expected SVN_ERR_FS_CORRUPT, got a different error.");
+      }
+    else
+      {
+        svn_error_clear(err);
+      }
+
+    /* Post-test cleanup. */
+    SVN_ERR(svn_fs_base__retry_txn(args.fs, txn_body_changes_delete, &args,
+                                   TRUE, subpool));
+  }
+
+  /* Test changes bogus because there's a change other than an
+     add-type changes on a deleted path. */
+  svn_pool_clear(subpool);
+  {
+    static const char *bogus_changes[][6]
+         /* KEY   PATH   NODEREVID  KIND       TEXT PROP */
+      = { { "x",  "/foo",  "1.0.0",  "delete",  0 ,  0  },
+          { "x",  "/foo",  "1.0.0",  "modify", "1",  0  } };
+    int num_changes = sizeof(bogus_changes) / sizeof(const char *) / 6;
+    struct changes_args args;
+    int i;
+
+    for (i = 0; i < num_changes; i++)
+      {
+        change_t change;
+
+        /* Set up the current change item. */
+        change.path = bogus_changes[i][1];
+        change.noderev_id = svn_fs_parse_id(bogus_changes[i][2],
+                                            strlen(bogus_changes[i][2]),
+                                            subpool);
+        change.kind = string_to_kind(bogus_changes[i][3]);
+        change.text_mod = bogus_changes[i][4] ? 1 : 0;
+        change.prop_mod = bogus_changes[i][5] ? 1 : 0;
+
+        /* Set up transaction baton. */
+        args.fs = fs;
+        args.key = "x";
+        args.change = &change;
+
+        /* Write new changes to the changes table. */
+        SVN_ERR(svn_fs_base__retry_txn(args.fs, txn_body_changes_add, &args,
+                                       TRUE, subpool));
+      }
+
+    /* Now read 'em back, looking for an error. */
+    args.fs = fs;
+    args.key = "x";
+    err = svn_fs_base__retry_txn(args.fs, txn_body_changes_fetch, &args,
+                                 TRUE, subpool);
+    if (!err)
+      {
+        return svn_error_create(SVN_ERR_TEST_FAILED, 0,
+                                "Expected SVN_ERR_FS_CORRUPT, got no error.");
+      }
+    else if (err->apr_err != SVN_ERR_FS_CORRUPT)
+      {
+        return svn_error_create(SVN_ERR_TEST_FAILED, err,
+                                "Expected SVN_ERR_FS_CORRUPT, got a different error.");
+      }
+    else
+      {
+        svn_error_clear(err);
+      }
+
+    /* Post-test cleanup. */
+    SVN_ERR(svn_fs_base__retry_txn(args.fs, txn_body_changes_delete, &args,
+                                   TRUE, subpool));
+  }
+
+  /* Test changes bogus because there's an add on a path that's got
+     previous non-delete changes on it. */
+  svn_pool_clear(subpool);
+  {
+    static const char *bogus_changes[][6]
+         /* KEY   PATH   NODEREVID  KIND       TEXT PROP */
+      = { { "x",  "/foo",  "1.0.0",  "modify", "1",  0  },
+          { "x",  "/foo",  "1.0.0",  "add",    "1",  0  } };
+    int num_changes = sizeof(bogus_changes) / sizeof(const char *) / 6;
+    struct changes_args args;
+    int i;
+
+    for (i = 0; i < num_changes; i++)
+      {
+        change_t change;
+
+        /* Set up the current change item. */
+        change.path = bogus_changes[i][1];
+        change.noderev_id = svn_fs_parse_id(bogus_changes[i][2],
+                                            strlen(bogus_changes[i][2]),
+                                            subpool);
+        change.kind = string_to_kind(bogus_changes[i][3]);
+        change.text_mod = bogus_changes[i][4] ? 1 : 0;
+        change.prop_mod = bogus_changes[i][5] ? 1 : 0;
+
+        /* Set up transaction baton. */
+        args.fs = fs;
+        args.key = "x";
+        args.change = &change;
+
+        /* Write new changes to the changes table. */
+        SVN_ERR(svn_fs_base__retry_txn(args.fs, txn_body_changes_add, &args,
+                                       TRUE, subpool));
+      }
+
+    /* Now read 'em back, looking for an error. */
+    args.fs = fs;
+    args.key = "x";
+    err = svn_fs_base__retry_txn(args.fs, txn_body_changes_fetch, &args,
+                                 TRUE, subpool);
+    if (!err)
+      {
+        return svn_error_create(SVN_ERR_TEST_FAILED, 0,
+                                "Expected SVN_ERR_FS_CORRUPT, got no error.");
+      }
+    else if (err->apr_err != SVN_ERR_FS_CORRUPT)
+      {
+        return svn_error_create(SVN_ERR_TEST_FAILED, err,
+                                "Expected SVN_ERR_FS_CORRUPT, got a different error.");
+      }
+    else
+      {
+        svn_error_clear(err);
+      }
+
+    /* Post-test cleanup. */
+    SVN_ERR(svn_fs_base__retry_txn(args.fs, txn_body_changes_delete, &args,
+                                   TRUE, subpool));
+  }
+
+  return SVN_NO_ERROR;
+}
+
+
 
 /* The test table.  */
 
@@ -714,5 +912,7 @@ struct svn_test_descriptor_t test_funcs[
                        "fetch compressed changes from the changes table"),
     SVN_TEST_OPTS_PASS(changes_fetch_ordering,
                        "verify ordered-ness of fetched compressed changes"),
+    SVN_TEST_OPTS_PASS(changes_bad_sequences,
+                       "verify that bad change sequences raise errors"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_fs/fs-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_fs/fs-pack-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_fs/fs-pack-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_fs_fs/fs-pack-test.c Tue Aug 10 18:06:17 2010
@@ -380,7 +380,7 @@ get_set_revprop_packed_fs(const svn_test
 
   /* Try to get revprop for revision 0. */
   SVN_ERR(svn_fs_revision_prop(&prop_value, fs, 0, SVN_PROP_REVISION_AUTHOR, pool));
-  
+
   /* Try to change revprop for revision 0. */
   SVN_ERR(svn_fs_change_rev_prop(fs, 0, SVN_PROP_REVISION_AUTHOR,
                                  svn_string_create("tweaked-author", pool), pool));

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_ra_local/ra-local-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_ra_local/ra-local-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_ra_local/ra-local-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_ra_local/ra-local-test.c Tue Aug 10 18:06:17 2010
@@ -26,15 +26,6 @@
 #include <apr_general.h>
 #include <apr_pools.h>
 
-#ifdef _MSC_VER
-#include <direct.h>
-#define getcwd _getcwd
-#else
-#include <unistd.h> /* for getcwd() */
-#endif
-
-#include "svn_string.h"
-#include "svn_utf.h"
 #include "svn_error.h"
 #include "svn_delta.h"
 #include "svn_ra.h"
@@ -49,36 +40,6 @@
 /** Helper routines. **/
 
 
-/* Helper function.  Set URL to a "file://" url for the current directory,
-   suffixed by the forward-slash-style relative path SUFFIX, performing all
-   allocation in POOL. */
-static svn_error_t *
-current_directory_url(const char **url,
-                      const char *suffix,
-                      apr_pool_t *pool)
-{
-  /* 8KB is a lot, but it almost guarantees that any path will fit. */
-  char curdir[8192];
-  const char *utf8_ls_curdir, *utf8_is_curdir, *unencoded_url;
-
-  if (! getcwd(curdir, sizeof(curdir)))
-    return svn_error_create(SVN_ERR_BASE, NULL, "getcwd() failed");
-
-  SVN_ERR(svn_utf_cstring_to_utf8(&utf8_ls_curdir, curdir, pool));
-  utf8_is_curdir = svn_path_internal_style(utf8_ls_curdir, pool);
-
-  unencoded_url = apr_psprintf(pool, "file://%s%s%s%s",
-                               (utf8_is_curdir[0] != '/') ? "/" : "",
-                               utf8_is_curdir,
-                               (suffix[0] && suffix[0] != '/') ? "/" : "",
-                               suffix);
-
-  *url = svn_path_uri_encode(unencoded_url, pool);
-
-  return SVN_NO_ERROR;
-}
-
-
 static svn_error_t *
 make_and_open_local_repos(svn_ra_session_t **session,
                           const char *repos_name,
@@ -94,7 +55,7 @@ make_and_open_local_repos(svn_ra_session
   SVN_ERR(svn_test__create_repos(&repos, repos_name, opts, pool));
   SVN_ERR(svn_ra_initialize(pool));
 
-  SVN_ERR(current_directory_url(&url, repos_name, pool));
+  SVN_ERR(svn_test__current_directory_url(&url, repos_name, pool));
 
   SVN_ERR(svn_ra_open3(session,
                        url,
@@ -262,7 +223,7 @@ check_split_url(const char *repos_path,
   /* Create a filesystem and repository */
   SVN_ERR(svn_test__create_repos(&repos, repos_path, opts, pool));
 
-  SVN_ERR(current_directory_url(&root_url, repos_path, pool));
+  SVN_ERR(svn_test__current_directory_url(&root_url, repos_path, pool));
   if (in_repos_path)
     url = apr_pstrcat(pool, root_url, in_repos_path, NULL);
   else

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_repos/repos-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_repos/repos-test.c Tue Aug 10 18:06:17 2010
@@ -2152,13 +2152,12 @@ prop_validation_commit_with_revprop(cons
                    APR_HASH_KEY_STRING,
                    svn_string_create("plato", pool));
     }
-  else
-    if (strcmp(prop_key, SVN_PROP_REVISION_LOG) != 0)
-      {
-        apr_hash_set(revprop_table, SVN_PROP_REVISION_LOG,
-                     APR_HASH_KEY_STRING,
-                     svn_string_create("revision log", pool));
-      }
+  else if (strcmp(prop_key, SVN_PROP_REVISION_LOG) != 0)
+    {
+      apr_hash_set(revprop_table, SVN_PROP_REVISION_LOG,
+                   APR_HASH_KEY_STRING,
+                   svn_string_create("revision log", pool));
+    }
 
   /* Make an arbitrary change and commit using above values... */
 
@@ -2213,12 +2212,11 @@ prop_validation(const svn_test_opts_t *o
     return svn_error_create(SVN_ERR_TEST_FAILED, err,
                             "Failed to reject a log with invalid "
                             "UTF-8");
-  else
-    if (err->apr_err != SVN_ERR_BAD_PROPERTY_VALUE)
-      return svn_error_create(SVN_ERR_TEST_FAILED, err,
-                              "Expected SVN_ERR_BAD_PROPERTY_VALUE for "
-                              "a log with invalid UTF-8, "
-                              "got another error.");
+  else if (err->apr_err != SVN_ERR_BAD_PROPERTY_VALUE)
+    return svn_error_create(SVN_ERR_TEST_FAILED, err,
+                            "Expected SVN_ERR_BAD_PROPERTY_VALUE for "
+                            "a log with invalid UTF-8, "
+                            "got another error.");
   svn_error_clear(err);
 
 
@@ -2233,12 +2231,11 @@ prop_validation(const svn_test_opts_t *o
     return svn_error_create(SVN_ERR_TEST_FAILED, err,
                             "Failed to reject a log with inconsistent "
                             "line ending style");
-  else
-    if (err->apr_err != SVN_ERR_BAD_PROPERTY_VALUE)
-      return svn_error_create(SVN_ERR_TEST_FAILED, err,
-                              "Expected SVN_ERR_BAD_PROPERTY_VALUE for "
-                              "a log with inconsistent line ending style, "
-                              "got another error.");
+  else if (err->apr_err != SVN_ERR_BAD_PROPERTY_VALUE)
+    return svn_error_create(SVN_ERR_TEST_FAILED, err,
+                            "Expected SVN_ERR_BAD_PROPERTY_VALUE for "
+                            "a log with inconsistent line ending style, "
+                            "got another error.");
   svn_error_clear(err);
 
 
@@ -2340,6 +2337,118 @@ get_logs(const svn_test_opts_t *opts,
   return SVN_NO_ERROR;
 }
 
+
+/* Tests for svn_repos_get_file_revsN() */
+
+typedef struct {
+    svn_revnum_t rev;
+    const char *path;
+    svn_boolean_t result_of_merge;
+    const char *author;
+} file_revs_t;
+
+/* Finds the revision REV in the hash table passed in in BATON, and checks
+   if the PATH and RESULT_OF_MERGE match are as expected. */
+static svn_error_t *
+file_rev_handler(void *baton, const char *path, svn_revnum_t rev,
+                 apr_hash_t *rev_props, svn_boolean_t result_of_merge,
+                 svn_txdelta_window_handler_t *delta_handler,
+                 void **delta_baton, apr_array_header_t *prop_diffs,
+                 apr_pool_t *pool)
+{
+  apr_hash_t *ht = baton;
+  const char *author;
+  file_revs_t *file_rev = apr_hash_get(ht, &rev, sizeof(svn_revnum_t));
+
+  if (!file_rev)
+    return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                             "Revision rev info not expected for rev %ld "
+                             "from path %s",
+                             rev, path);
+
+  author = svn_prop_get_value(rev_props,
+                              SVN_PROP_REVISION_AUTHOR);
+
+  SVN_TEST_STRING_ASSERT(author, file_rev->author);
+  SVN_TEST_STRING_ASSERT(path, file_rev->path);
+  SVN_TEST_ASSERT(rev == file_rev->rev);
+  SVN_TEST_ASSERT(result_of_merge == file_rev->result_of_merge);
+
+  /* Remove this revision from this list so we'll be able to verify that we
+     have seen all expected revisions. */
+  apr_hash_set(ht, &rev, sizeof(svn_revnum_t), NULL);
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_get_file_revs(const svn_test_opts_t *opts,
+                   apr_pool_t *pool)
+{
+  svn_repos_t *repos = NULL;
+  svn_fs_t *fs;
+  svn_revnum_t youngest_rev = 0;
+  apr_pool_t *subpool = svn_pool_create(pool);
+  int i;
+
+  file_revs_t trunk_results[] = {
+    { 2, "/trunk/A/mu", FALSE, "initial" },
+    { 3, "/trunk/A/mu", FALSE, "user-trunk" },
+    { 4, "/branches/1.0.x/A/mu", TRUE, "copy" },
+    { 5, "/trunk/A/mu", FALSE, "user-trunk" },
+    { 6, "/branches/1.0.x/A/mu", TRUE, "user-branch" },
+    { 7, "/branches/1.0.x/A/mu", TRUE, "user-merge1" },
+    { 8, "/trunk/A/mu", FALSE, "user-merge2" },
+  };
+  file_revs_t branch_results[] = {
+    { 2, "/trunk/A/mu", FALSE, "initial" },
+    { 3, "/trunk/A/mu", FALSE, "user-trunk" },
+    { 4, "/branches/1.0.x/A/mu", FALSE, "copy" },
+    { 5, "/trunk/A/mu", TRUE, "user-trunk" },
+    { 6, "/branches/1.0.x/A/mu", FALSE, "user-branch" },
+    { 7, "/branches/1.0.x/A/mu", FALSE, "user-merge1" },
+  };
+  apr_hash_t *ht_trunk_results = apr_hash_make(subpool);
+  apr_hash_t *ht_branch_results = apr_hash_make(subpool);
+
+  for (i = 0; i < sizeof(trunk_results) / sizeof(trunk_results[0]); i++)
+    apr_hash_set(ht_trunk_results, &trunk_results[i].rev,
+                 sizeof(svn_revnum_t), &trunk_results[i]);
+
+  for (i = 0; i < sizeof(branch_results) / sizeof(branch_results[0]); i++)
+    apr_hash_set(ht_branch_results, &branch_results[i].rev,
+                 sizeof(svn_revnum_t), &branch_results[i]);
+
+  /* Create the repository and verify blame results. */
+  SVN_ERR(svn_test__create_blame_repository(&repos, "test-repo-get-filerevs",
+                                            opts, subpool));
+  fs = svn_repos_fs(repos);
+
+  SVN_ERR(svn_fs_youngest_rev(&youngest_rev, fs, subpool));
+
+  /* Verify blame of /trunk/A/mu */
+  SVN_ERR(svn_repos_get_file_revs2(repos, "/trunk/A/mu", 0, youngest_rev,
+                                   1, NULL, NULL,
+                                   file_rev_handler,
+                                   ht_trunk_results,
+                                   subpool));
+  SVN_TEST_ASSERT(apr_hash_count(ht_trunk_results) == 0);
+
+  /* Verify blame of /branches/1.0.x/A/mu */
+  SVN_ERR(svn_repos_get_file_revs2(repos, "/branches/1.0.x/A/mu", 0,
+                                   youngest_rev,
+                                   1, NULL, NULL,
+                                   file_rev_handler,
+                                   ht_branch_results,
+                                   subpool));
+  SVN_TEST_ASSERT(apr_hash_count(ht_branch_results) == 0);
+
+  /* ### TODO: Verify blame of /branches/1.0.x/A/mu in range 6-7 */
+
+  svn_pool_destroy(subpool);
+
+  return SVN_NO_ERROR;
+}
 
 
 /* The test table.  */
@@ -2373,5 +2482,7 @@ struct svn_test_descriptor_t test_funcs[
                        "test if revprops are validated by repos"),
     SVN_TEST_OPTS_PASS(get_logs,
                        "test svn_repos_get_logs ranges and limits"),
+    SVN_TEST_OPTS_PASS(test_get_file_revs,
+                       "test svn_repos_get_file_revsN"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/config-test.cfg
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/config-test.cfg?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/config-test.cfg (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/config-test.cfg Tue Aug 10 18:06:17 2010
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 # default values across all sections
 [DEFAULT]
 foo=bar

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/dirent_uri-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/dirent_uri-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/dirent_uri-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/dirent_uri-test.c Tue Aug 10 18:06:17 2010
@@ -1227,6 +1227,9 @@ test_uri_is_canonical(apr_pool_t *pool)
     { "http://hst/",           FALSE },
     { "http://HST/",           FALSE },
     { "http://HST/FOO/BaR",    FALSE },
+    { "http://hst/foo/./bar",  FALSE },
+    { "hTTp://hst/foo/bar",   FALSE },
+    { "http://hst/foo/bar/",   FALSE },
     { "svn+ssh://jens@10.0.1.1", TRUE },
     { "svn+ssh://j.raNDom@HST/BaR", FALSE },
     { "svn+SSH://j.random:jRaY@HST/BaR", FALSE },

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/mergeinfo-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/mergeinfo-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/mergeinfo-test.c Tue Aug 10 18:06:17 2010
@@ -159,7 +159,7 @@ static const char * const mergeinfo_path
     "/patch-common::netasq-bpf.c",
     "/patch-common_netasq-bpf.c:",
     "/:patch:common:netasq:bpf.c",
-    
+
     "/trunk",
     "/trunk",
     "/trunk",
@@ -382,7 +382,7 @@ range_to_string(svn_merge_range_t *range
    verified (e.g. "svn_rangelist_intersect"), while TYPE is a word
    describing what the ranges being examined represent. */
 static svn_error_t *
-verify_ranges_match(apr_array_header_t *actual_rangelist,
+verify_ranges_match(const apr_array_header_t *actual_rangelist,
                     svn_merge_range_t *expected_ranges, int nbr_expected,
                     const char *func_verified, const char *type,
                     apr_pool_t *pool)
@@ -479,21 +479,68 @@ static svn_error_t *
 test_rangelist_intersect(apr_pool_t *pool)
 {
   apr_array_header_t *rangelist1, *rangelist2, *intersection;
-  svn_merge_range_t expected_intersection[] =
-    { {0, 1, TRUE}, {2, 4, TRUE}, {11, 12, TRUE}, {30, 32, TRUE},
+
+  /* Expected intersection when considering inheritance. */
+  svn_merge_range_t intersection_consider_inheritance[] =
+    { {0, 1, TRUE}, {11, 12, TRUE}, {30, 32, FALSE}, {39, 42, TRUE} };
+
+  /* Expected intersection when ignoring inheritance. */
+  svn_merge_range_t intersection_ignore_inheritance[] =
+    { {0, 1, TRUE}, {2, 4, TRUE}, {11, 12, TRUE}, {30, 32, FALSE},
       {39, 42, TRUE} };
 
-  SVN_ERR(svn_mergeinfo_parse(&info1, "/trunk: 1-6,12-16,30-32,40-42", pool));
-  SVN_ERR(svn_mergeinfo_parse(&info2, "/trunk: 1,3-4,7,9,11-12,31-34,38-44",
+  SVN_ERR(svn_mergeinfo_parse(&info1, "/trunk: 1-6,12-16,30-32*,40-42", pool));
+  SVN_ERR(svn_mergeinfo_parse(&info2, "/trunk: 1,3-4*,7,9,11-12,31-34*,38-44",
                               pool));
   rangelist1 = apr_hash_get(info1, "/trunk", APR_HASH_KEY_STRING);
   rangelist2 = apr_hash_get(info2, "/trunk", APR_HASH_KEY_STRING);
 
+  /* Check the intersection while considering inheritance twice, reversing
+     the order of the rangelist arguments on the second call to
+     svn_rangelist_intersection.  The order *should* have no effect on
+     the result -- see http://svn.haxx.se/dev/archive-2010-03/0351.shtml.
+
+     '3-4*' has different inheritance than '1-6', so no intersection is
+     expected.  '30-32*' and '31-34*' have the same inheritance, so intersect
+     at '31-32*'.  Per the svn_rangelist_intersect API, since both ranges
+     are non-inheritable, so is the result. */
   SVN_ERR(svn_rangelist_intersect(&intersection, rangelist1, rangelist2,
                                   TRUE, pool));
 
-  return verify_ranges_match(intersection, expected_intersection, 5,
-                             "svn_rangelist_intersect", "intersect", pool);
+  SVN_ERR(verify_ranges_match(intersection,
+                              intersection_consider_inheritance,
+                              4, "svn_rangelist_intersect", "intersect",
+                              pool));
+
+  SVN_ERR(svn_rangelist_intersect(&intersection, rangelist2, rangelist1,
+                                  TRUE, pool));
+
+  SVN_ERR(verify_ranges_match(intersection,
+                              intersection_consider_inheritance,
+                              4, "svn_rangelist_intersect", "intersect",
+                              pool));
+
+  /* Check the intersection while ignoring inheritance.  The one difference
+     from when we consider inheritance is that '3-4*' and '1-6' now intersect,
+     since we don't care about inheritability, just the start and end ranges.
+     Per the svn_rangelist_intersect API, since only one range is
+     non-inheritable the result is inheritable. */
+  SVN_ERR(svn_rangelist_intersect(&intersection, rangelist1, rangelist2,
+                                  FALSE, pool));
+
+  SVN_ERR(verify_ranges_match(intersection,
+                              intersection_ignore_inheritance,
+                              5, "svn_rangelist_intersect", "intersect",
+                              pool));
+
+  SVN_ERR(svn_rangelist_intersect(&intersection, rangelist2, rangelist1,
+                                  FALSE, pool));
+
+  SVN_ERR(verify_ranges_match(intersection,
+                              intersection_ignore_inheritance,
+                              5, "svn_rangelist_intersect", "intersect",
+                              pool));
+  return SVN_NO_ERROR;
 }
 
 static svn_error_t *
@@ -880,7 +927,8 @@ test_remove_rangelist(apr_pool_t *pool)
 /* Random number seed. */
 static apr_uint32_t random_rev_array_seed;
 
-/* Fill 3/4 of the array with 1s. */
+/* Set a random 3/4-ish of the elements of array REVS[RANDOM_REV_ARRAY_LENGTH]
+ * to TRUE and the rest to FALSE. */
 static void
 randomly_fill_rev_array(svn_boolean_t *revs)
 {
@@ -892,6 +940,8 @@ randomly_fill_rev_array(svn_boolean_t *r
     }
 }
 
+/* Set *RANGELIST to a rangelist representing the revisions that are marked
+ * with TRUE in the array REVS[RANDOM_REV_ARRAY_LENGTH]. */
 static svn_error_t *
 rev_array_to_rangelist(apr_array_header_t **rangelist,
                        svn_boolean_t *revs,
@@ -946,6 +996,9 @@ test_rangelist_remove_randomly(apr_pool_
 
       randomly_fill_rev_array(first_revs);
       randomly_fill_rev_array(second_revs);
+      /* There is no change numbered "r0" */
+      first_revs[0] = FALSE;
+      second_revs[0] = FALSE;
       for (j = 0; j < RANDOM_REV_ARRAY_LENGTH; j++)
         expected_revs[j] = second_revs[j] && !first_revs[j];
 
@@ -1001,6 +1054,9 @@ test_rangelist_intersect_randomly(apr_po
 
       randomly_fill_rev_array(first_revs);
       randomly_fill_rev_array(second_revs);
+      /* There is no change numbered "r0" */
+      first_revs[0] = FALSE;
+      second_revs[0] = FALSE;
       for (j = 0; j < RANDOM_REV_ARRAY_LENGTH; j++)
         expected_revs[j] = second_revs[j] && first_revs[j];
 
@@ -1098,7 +1154,7 @@ test_mergeinfo_to_string(apr_pool_t *poo
                APR_HASH_KEY_STRING,
                apr_hash_get(info1, "/trunk", APR_HASH_KEY_STRING));
   SVN_ERR(svn_mergeinfo_to_string(&output, info2, pool));
-  
+
   if (svn_string_compare(expected, output) != TRUE)
     return fail(pool, "Mergeinfo string not what we expected");
 

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/path-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/path-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/path-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/path-test.c Tue Aug 10 18:06:17 2010
@@ -168,7 +168,7 @@ test_path_is_url(apr_pool_t *pool)
     { "//blah/blah",                      FALSE },
     { "://blah/blah",                     FALSE },
     { "a:abb://boo/",                     FALSE },
-    { "http://svn.collab.net/repos/svn",  TRUE  },
+    { "http://svn.apache.org/repos/asf/subversion",  TRUE  },
     { "scheme/with",                      FALSE },
     { "scheme/with:",                     FALSE },
     { "scheme/with:/",                    FALSE },

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/stream-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/stream-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/stream-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_subr/stream-test.c Tue Aug 10 18:06:17 2010
@@ -266,20 +266,20 @@ test_stream_range(apr_pool_t *pool)
 
     /* Even when requesting more data than contained in the range,
      * we should only receive data from the range. */
-    len = strlen(now) + strlen(after);
-
     for (i = 0; i < 2; i++)
       {
-        /* Read the range. */
+        /* Try to read from "Now", up to and past the end of the range. */
+        len = strlen(now) + 1;
         SVN_ERR(svn_stream_read(stream, buf, &len));
-        if (len > strlen(now))
+        if (len != strlen(now))
           return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
-                                   "Read past range");
+                                   "Read past (or not all of) range");
         if (strcmp(buf, now))
           return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
                                    "Unexpected data");
 
-        /* Reading past the end of the range should be impossible. */
+        /* Try to read from the end of the range - should be impossible. */
+        len = 1;
         SVN_ERR(svn_stream_read(stream, buf, &len));
         if (len != 0)
           return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/db-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/db-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/db-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/db-test.c Tue Aug 10 18:06:17 2010
@@ -41,7 +41,7 @@
 
 #include "../../libsvn_wc/wc.h"
 #include "../../libsvn_wc/wc_db.h"
-#include "../../libsvn_wc/wc-metadata.h"
+#include "../../libsvn_wc/wc-queries.h"
 
 #include "private/svn_wc_private.h"
 
@@ -77,13 +77,7 @@
 
 #define I_TC_DATA "((conflict F file update edited deleted (version 23 " ROOT_ONE " 1 2 branch1/ft/F none) (version 23 " ROOT_ONE " 1 3 branch1/ft/F file)) (conflict G file update edited deleted (version 23 " ROOT_ONE " 1 2 branch1/ft/F none) (version 23 " ROOT_ONE " 1 3 branch1/ft/F file)) )"
 
-static const char * const data_loading_sql[] = {
-  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-  (
-   /* Load the table and index definitions. */
-   WC_METADATA_SQL_12
-   " "
-
+static const char * const TESTING_DATA = (
    /* Load our test data.
 
       Note: do not use named-column insertions. This allows us to test
@@ -301,14 +295,21 @@ static const char * const data_loading_s
    " "
    "insert into actual_node values ("
    "  1, 'I', '', null, null, null, null, null, 'changelist', null, "
-   "'" I_TC_DATA "');"
-   ),
+   "'" I_TC_DATA "', null, null, null, null);"
+   "  "
+   "insert into base_node values ("
+   "  1, 'M', null, null, '', 'normal', 'dir', "
+   "  1, null, null, "
+   "  1, " TIME_1s ", '" AUTHOR_1 "', null, null, null, '()', null, null, "
+   "  null); "
+   "insert into working_node values ("
+   "  1, 'M/M-a', 'M', 'not-present', 'file', "
+   "  null, null, "
+   "  null, null, null, null, null, "
+   "  null, null, null, 0, null, null, '()', 0); "
+   );
 
-  WC_METADATA_SQL_13,
-  WC_METADATA_SQL_14,
-  WC_METADATA_SQL_15,
-  WC_METADATA_SQL_16
-};
+WC_QUERIES_SQL_DECLARE_STATEMENTS(statements);
 
 
 static svn_error_t *
@@ -318,13 +319,25 @@ create_fake_wc(const char *subdir, int f
                                              "fake-wc", subdir, ".svn", NULL);
   const char *dbpath = svn_dirent_join(dirpath, "wc.db", scratch_pool);
   svn_sqlite__db_t *sdb;
+  const char * const my_statements[] = {
+    statements[STMT_CREATE_SCHEMA],
+    TESTING_DATA,
+    NULL
+  };
 
   SVN_ERR(svn_io_make_dir_recursively(dirpath, scratch_pool));
   svn_error_clear(svn_io_remove_file(dbpath, scratch_pool));
-  SVN_ERR(svn_sqlite__open(&sdb, dbpath, svn_sqlite__mode_rwcreate, NULL,
-                           format, data_loading_sql,
+  SVN_ERR(svn_sqlite__open(&sdb, dbpath, svn_sqlite__mode_rwcreate,
+                           my_statements,
+                           0, NULL,
                            scratch_pool, scratch_pool));
 
+  /* Create the database's schema.  */
+  SVN_ERR(svn_sqlite__exec_statements(sdb, /* my_statements[] */ 0));
+
+  /* Throw our extra data into the database.  */
+  SVN_ERR(svn_sqlite__exec_statements(sdb, /* my_statements[] */ 1));
+
   return SVN_NO_ERROR;
 }
 
@@ -636,10 +649,6 @@ validate_node(svn_wc__db_t *db,
   value = apr_hash_get(props, "p999", APR_HASH_KEY_STRING);
   SVN_TEST_ASSERT(value != NULL && strcmp(value->data, "v1") == 0);
 
-  if (status == svn_wc__db_status_normal)
-    SVN_ERR(svn_wc__db_temp_op_set_pristine_props(db, path, props, FALSE,
-                                                  scratch_pool));
-
   return SVN_NO_ERROR;
 }
 
@@ -772,7 +781,7 @@ test_children(apr_pool_t *pool)
   SVN_ERR(svn_wc__db_base_get_children(&children,
                                        db, local_abspath,
                                        pool, pool));
-  SVN_TEST_ASSERT(children->nelts == 11);
+  SVN_TEST_ASSERT(children->nelts == 12);
   for (i = children->nelts; i--; )
     {
       const char *name = APR_ARRAY_IDX(children, i, const char *);
@@ -784,7 +793,7 @@ test_children(apr_pool_t *pool)
   SVN_ERR(svn_wc__db_read_children(&children,
                                    db, local_abspath,
                                    pool, pool));
-  SVN_TEST_ASSERT(children->nelts == 12);
+  SVN_TEST_ASSERT(children->nelts == 13);
   for (i = children->nelts; i--; )
     {
       const char *name = APR_ARRAY_IDX(children, i, const char *);
@@ -1223,6 +1232,20 @@ test_scan_deletion(apr_pool_t *pool)
   SVN_TEST_ASSERT(validate_abspath(local_abspath, "L/L-a",
                                    work_del_abspath, pool));
 
+  /* Root of delete, parent converted to BASE during post-commit. */
+  SVN_ERR(svn_wc__db_scan_deletion(
+            &base_del_abspath,
+            &base_replaced,
+            &moved_to_abspath,
+            &work_del_abspath,
+            db, svn_dirent_join(local_abspath, "M/M-a", pool),
+            pool, pool));
+  SVN_TEST_ASSERT(base_del_abspath == NULL);
+  SVN_TEST_ASSERT(!base_replaced);
+  SVN_TEST_ASSERT(moved_to_abspath == NULL);
+  SVN_TEST_ASSERT(validate_abspath(local_abspath, "M/M-a",
+                                   work_del_abspath, pool));
+
   return SVN_NO_ERROR;
 }
 
@@ -1301,6 +1324,11 @@ test_upgrading_to_f15(apr_pool_t *pool)
 static int
 detect_work_item(const svn_skel_t *work_item)
 {
+  /* Test work items are a list with one integer atom as operation */
+  if (!work_item->children)
+    return -1;
+  work_item = work_item->children;
+
   if (!work_item->is_atom || work_item->len != 1)
     return -1;
   return work_item->data[0] - '0';
@@ -1320,13 +1348,16 @@ test_work_queue(apr_pool_t *pool)
                       svn_wc__db_openmode_readwrite, pool));
 
   /* Create three work items.  */
-  work_item = svn_skel__str_atom("0", pool);
+  work_item = svn_skel__make_empty_list(pool);
+  svn_skel__prepend_int(0, work_item, pool);
   SVN_ERR(svn_wc__db_wq_add(db, local_abspath, work_item, pool));
 
-  work_item = svn_skel__str_atom("1", pool);
+  work_item = svn_skel__make_empty_list(pool);
+  svn_skel__prepend_int(1, work_item, pool);
   SVN_ERR(svn_wc__db_wq_add(db, local_abspath, work_item, pool));
 
-  work_item = svn_skel__str_atom("2", pool);
+  work_item = svn_skel__make_empty_list(pool);
+  svn_skel__prepend_int(2, work_item, pool);
   SVN_ERR(svn_wc__db_wq_add(db, local_abspath, work_item, pool));
 
   while (TRUE)

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/tree-conflict-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/tree-conflict-data-test.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/tree-conflict-data-test.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/libsvn_wc/tree-conflict-data-test.c Tue Aug 10 18:06:17 2010
@@ -74,7 +74,7 @@ test_read_tree_conflict(apr_pool_t *pool
                                       pool));
 
   hi = apr_hash_first(pool, conflicts);
-  conflict = svn_apr_hash_index_val(hi);
+  conflict = svn__apr_hash_index_val(hi);
 
   if ((conflict->node_kind != exp_conflict->node_kind) ||
       (conflict->action    != exp_conflict->action) ||
@@ -120,7 +120,7 @@ test_read_2_tree_conflicts(apr_pool_t *p
                                       pool));
 
   hi = apr_hash_first(pool, conflicts);
-  conflict1 = svn_apr_hash_index_val(hi);
+  conflict1 = svn__apr_hash_index_val(hi);
   if ((conflict1->node_kind != exp_conflict1->node_kind) ||
       (conflict1->action    != exp_conflict1->action) ||
       (conflict1->reason    != exp_conflict1->reason) ||
@@ -129,7 +129,7 @@ test_read_2_tree_conflicts(apr_pool_t *p
     return fail(pool, "Tree conflict struct #1 has bad data");
 
   hi = apr_hash_next(hi);
-  conflict2 = svn_apr_hash_index_val(hi);
+  conflict2 = svn__apr_hash_index_val(hi);
   if ((conflict2->node_kind != exp_conflict2->node_kind) ||
       (conflict2->action    != exp_conflict2->action) ||
       (conflict2->reason    != exp_conflict2->reason) ||

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.c Tue Aug 10 18:06:17 2010
@@ -24,8 +24,17 @@
 #include <string.h>
 #include <apr_pools.h>
 
+#ifdef _MSC_VER
+#include <direct.h>
+#define getcwd _getcwd
+#else
+#include <unistd.h> /* for getcwd() */
+#endif
+
 #include "svn_test.h"
 
+#include "svn_string.h"
+#include "svn_utf.h"
 #include "svn_pools.h"
 #include "svn_error.h"
 #include "svn_fs.h"
@@ -227,6 +236,36 @@ svn_test__create_repos(svn_repos_t **rep
 }
 
 
+/* Helper function.  Set URL to a "file://" url for the current directory,
+   suffixed by the forward-slash-style relative path SUFFIX, performing all
+   allocation in POOL. */
+svn_error_t *
+svn_test__current_directory_url(const char **url,
+                                const char *suffix,
+                                apr_pool_t *pool)
+{
+  /* 8KB is a lot, but it almost guarantees that any path will fit. */
+  char curdir[8192];
+  const char *utf8_ls_curdir, *utf8_is_curdir, *unencoded_url;
+
+  if (! getcwd(curdir, sizeof(curdir)))
+    return svn_error_create(SVN_ERR_BASE, NULL, "getcwd() failed");
+
+  SVN_ERR(svn_utf_cstring_to_utf8(&utf8_ls_curdir, curdir, pool));
+  utf8_is_curdir = svn_path_internal_style(utf8_ls_curdir, pool);
+
+  unencoded_url = apr_psprintf(pool, "file://%s%s%s%s",
+                               (utf8_is_curdir[0] != '/') ? "/" : "",
+                               utf8_is_curdir,
+                               (suffix[0] && suffix[0] != '/') ? "/" : "",
+                               suffix);
+
+  *url = svn_path_uri_encode(unencoded_url, pool);
+
+  return SVN_NO_ERROR;
+}
+
+
 svn_error_t *
 svn_test__stream_to_string(svn_stringbuf_t **string,
                            svn_stream_t *stream,
@@ -606,55 +645,186 @@ svn_test__check_greek_tree(svn_fs_root_t
   return SVN_NO_ERROR;
 }
 
-
+/**
+ * Loads the greek tree in a directory at ROOT_DIR under transaction TXN_ROOT.
+ * ROOT_DIR should be created by the caller.
+ *
+ * Note: this function will not commit the transaction.
+ */
+svn_error_t *
+svn_test__create_greek_tree_at(svn_fs_root_t *txn_root,
+                               const char *root_dir,
+                               apr_pool_t *pool)
+{
+  char *iota =     svn_relpath_join(root_dir, "iota", pool);
+  char *A =        svn_relpath_join(root_dir, "A", pool);
+  char *Amu =      svn_relpath_join(root_dir, "A/mu", pool);
+  char *AB =       svn_relpath_join(root_dir, "A/B", pool);
+  char *ABlambda = svn_relpath_join(root_dir, "A/B/lambda", pool);
+  char *ABE =      svn_relpath_join(root_dir, "A/B/E", pool);
+  char *ABEalpha = svn_relpath_join(root_dir, "A/B/E/alpha", pool);
+  char *ABEbeta =  svn_relpath_join(root_dir, "A/B/E/beta", pool);
+  char *ABF =      svn_relpath_join(root_dir, "A/B/F", pool);
+  char *AC =       svn_relpath_join(root_dir, "A/C", pool);
+  char *AD =       svn_relpath_join(root_dir, "A/D", pool);
+  char *ADgamma =  svn_relpath_join(root_dir, "A/D/gamma", pool);
+  char *ADG =      svn_relpath_join(root_dir, "A/D/G", pool);
+  char *ADGpi =    svn_relpath_join(root_dir, "A/D/G/pi", pool);
+  char *ADGrho =   svn_relpath_join(root_dir, "A/D/G/rho", pool);
+  char *ADGtau =   svn_relpath_join(root_dir, "A/D/G/tau", pool);
+  char *ADH =      svn_relpath_join(root_dir, "A/D/H", pool);
+  char *ADHchi =   svn_relpath_join(root_dir, "A/D/H/chi", pool);
+  char *ADHpsi =   svn_relpath_join(root_dir, "A/D/H/psi", pool);
+  char *ADHomega = svn_relpath_join(root_dir, "A/D/H/omega", pool);
+
+  SVN_ERR(svn_fs_make_file(txn_root, iota, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, iota, "This is the file 'iota'.\n", pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, A, pool));
+  SVN_ERR(svn_fs_make_file(txn_root, Amu, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, Amu, "This is the file 'mu'.\n", pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, AB, pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ABlambda, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ABlambda, "This is the file 'lambda'.\n", pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, ABE, pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ABEalpha, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ABEalpha, "This is the file 'alpha'.\n", pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ABEbeta, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ABEbeta, "This is the file 'beta'.\n", pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, ABF, pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, AC, pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, AD, pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ADgamma, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ADgamma, "This is the file 'gamma'.\n", pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, ADG, pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ADGpi, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ADGpi, "This is the file 'pi'.\n", pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ADGrho, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ADGrho, "This is the file 'rho'.\n", pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ADGtau, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ADGtau, "This is the file 'tau'.\n", pool));
+  SVN_ERR(svn_fs_make_dir  (txn_root, ADH, pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ADHchi, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ADHchi, "This is the file 'chi'.\n", pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ADHpsi, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ADHpsi, "This is the file 'psi'.\n", pool));
+  SVN_ERR(svn_fs_make_file(txn_root, ADHomega, pool));
+  SVN_ERR(svn_test__set_file_contents
+          (txn_root, ADHomega, "This is the file 'omega'.\n", pool));
+  return SVN_NO_ERROR;
+}
 
 svn_error_t *
 svn_test__create_greek_tree(svn_fs_root_t *txn_root,
                             apr_pool_t *pool)
 {
-  SVN_ERR(svn_fs_make_file(txn_root, "iota", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "iota", "This is the file 'iota'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/mu", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/mu", "This is the file 'mu'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A/B", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/B/lambda", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/B/lambda", "This is the file 'lambda'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A/B/E", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/B/E/alpha", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/B/E/alpha", "This is the file 'alpha'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/B/E/beta", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/B/E/beta", "This is the file 'beta'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A/B/F", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A/C", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A/D", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/D/gamma", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/D/gamma", "This is the file 'gamma'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A/D/G", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/D/G/pi", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/D/G/pi", "This is the file 'pi'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/D/G/rho", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/D/G/rho", "This is the file 'rho'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/D/G/tau", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/D/G/tau", "This is the file 'tau'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, "A/D/H", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/D/H/chi", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/D/H/chi", "This is the file 'chi'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/D/H/psi", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/D/H/psi", "This is the file 'psi'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, "A/D/H/omega", pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, "A/D/H/omega", "This is the file 'omega'.\n", pool));
+  return svn_test__create_greek_tree_at(txn_root, "", pool);
+}
+
+svn_error_t *
+svn_test__create_blame_repository(svn_repos_t **out_repos,
+                                  const char *test_name,
+                                  const svn_test_opts_t *opts,
+                                  apr_pool_t *pool)
+{
+  svn_repos_t *repos;
+  svn_fs_t *fs;
+  svn_fs_txn_t *txn;
+  svn_fs_root_t *txn_root, *revision_root;
+  svn_revnum_t youngest_rev = 0;
+
+  /* Create a filesystem and repository. */
+  SVN_ERR(svn_test__create_repos(&repos, test_name,
+                                 opts, pool));
+  *out_repos = repos;
+
+  fs = svn_repos_fs(repos);
+
+  /* Revision 1:  Add trunk, tags, branches. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "initial", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "trunk", pool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "tags", pool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "branches", pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
+  /* Revision 2:  Add the Greek tree on the trunk. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "initial", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__create_greek_tree_at(txn_root, "trunk", pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
+  /* Revision 3:  Tweak trunk/A/mu. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "user-trunk", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__set_file_contents(txn_root, "trunk/A/mu",
+                                      "A\nB\nC\nD\nE\nF\nG\nH\nI", pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
+  /* Revision 4:  Copy trunk to branches/1.0.x. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "copy", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_fs_revision_root(&revision_root, fs, youngest_rev, pool));
+  SVN_ERR(svn_fs_copy(revision_root, "trunk",
+                      txn_root, "branches/1.0.x",
+                      pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
+  /* Revision 5:  Tweak trunk/A/mu. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "user-trunk", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__set_file_contents(txn_root, "trunk/A/mu",
+                                      "A\nB\nC -- trunk edit\nD\nE\nF\nG\nH\nI",
+                                      pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
+  /* Revision 6:  Tweak branches/1.0.x/A/mu. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "user-branch", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__set_file_contents(txn_root, "branches/1.0.x/A/mu",
+                                      "A\nB\nC\nD -- branch edit\nE\nF\nG\nH\nI",
+                                      pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
+  /* Revision 7:  Merge trunk to branch. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "user-merge1", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__set_file_contents(txn_root, "branches/1.0.x/A/mu",
+                                      "A\nB\nC -- trunk edit\nD -- branch edit"
+                                      "\nE\nF\nG\nH\nI", pool));
+  SVN_ERR(svn_fs_change_node_prop(txn_root, "/branches/1.0.x", "svn:mergeinfo",
+                                  svn_string_create("/trunk:4-6", pool),
+                                  pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
+  /* Revision 8:  Merge branch to trunk. */
+  SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
+                                            "user-merge2", "log msg", pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__set_file_contents(txn_root, "trunk/A/mu",
+                                      "A\nB\nC -- trunk edit\nD -- branch edit\n"
+                                      "E\nF\nG\nH\nI", pool));
+  SVN_ERR(svn_fs_change_node_prop(txn_root, "/trunk", "svn:mergeinfo",
+                                  svn_string_create("/branches/1.0.x:4-7", pool),
+                                  pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.h?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/svn_test_fs.h Tue Aug 10 18:06:17 2010
@@ -73,6 +73,13 @@ svn_test__create_repos(svn_repos_t **rep
                        const svn_test_opts_t *opts,
                        apr_pool_t *pool);
 
+/* Set URL to a "file://" url for the current directory, suffixed by the
+   forward-slash-style relative path SUFFIX, performing all allocation
+   in POOL. */
+svn_error_t *
+svn_test__current_directory_url(const char **url,
+                                const char *suffix,
+                                apr_pool_t *pool);
 
 /* Read all data from a generic read STREAM, and return it in STRING.
    Allocate the svn_stringbuf_t in APRPOOL.  (All data in STRING will be
@@ -169,6 +176,19 @@ svn_error_t *
 svn_test__create_greek_tree(svn_fs_root_t *txn_root,
                             apr_pool_t *pool);
 
+/* Create the Greek Tree under TXN_ROOT at dir ROOT_DIR.  */
+svn_error_t *
+svn_test__create_greek_tree_at(svn_fs_root_t *txn_root,
+                               const char *root_dir,
+                               apr_pool_t *pool);
+
+/* Create a new repository with a greek tree, trunk, branch and some
+   merges between them. */
+svn_error_t *
+svn_test__create_blame_repository(svn_repos_t **out_repos,
+                                  const char *test_name,
+                                  const svn_test_opts_t *opts,
+                                  apr_pool_t *pool);
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/tests.conf
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/tests.conf?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/tests.conf (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/tests.conf Tue Aug 10 18:06:17 2010
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 ### This config file configures some aspects of the Subversion test
 ### suite.  Pass --config-file FILENAME to test programs if running
 ### them manually; "make check" passes this file in automatically.

Modified: subversion/branches/ignore-mergeinfo/tools/backup/hot-backup.py.in
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/backup/hot-backup.py.in?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/backup/hot-backup.py.in (original)
+++ subversion/branches/ignore-mergeinfo/tools/backup/hot-backup.py.in Tue Aug 10 18:06:17 2010
@@ -7,7 +7,7 @@
 #                 Berkeley DB.
 #
 #  Subversion is a tool for revision control. 
-#  See http://subversion.tigris.org for more information.
+#  See http://subversion.apache.org for more information.
 #    
 # ====================================================================
 #    Licensed to the Apache Software Foundation (ASF) under one

Modified: subversion/branches/ignore-mergeinfo/tools/buildbot/slaves/README
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/buildbot/slaves/README?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/buildbot/slaves/README (original)
+++ subversion/branches/ignore-mergeinfo/tools/buildbot/slaves/README Tue Aug 10 18:06:17 2010
@@ -57,7 +57,7 @@ slavedir/[botname] folder.
 
 You can copy and reuse the scripts the other buildbot slave owners use for 
 Windows, Linux or Mac buildslaves. You can find them here: 
-http://svn.collab.net/repos/svn/trunk/tools/buildbot/slaves
+http://svn.apache.org/repos/asf/subversion/trunk/tools/buildbot/slaves
 
 4. Builds
 ---------

Modified: subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion (original)
+++ subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion Tue Aug 10 18:06:17 2010
@@ -1,3 +1,22 @@
+# ------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ------------------------------------------------------------
+
 # Programmable completion for the Subversion svn command under bash. Source
 # this file (or on some systems add it to ~/.bash_completion and start a new
 # shell) and bash's completion mechanism will know all about svn's options!

Modified: subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion_test
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion_test?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion_test (original)
+++ subversion/branches/ignore-mergeinfo/tools/client-side/bash_completion_test Tue Aug 10 18:06:17 2010
@@ -1,4 +1,21 @@
 #!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 # Checks that the "_svn" function defined in the specified "bash_completion"
 # script produces appropriate lists of completions for various incomplete svn
 # command lines.

Modified: subversion/branches/ignore-mergeinfo/tools/client-side/change-svn-wc-format.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/client-side/change-svn-wc-format.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/client-side/change-svn-wc-format.py (original)
+++ subversion/branches/ignore-mergeinfo/tools/client-side/change-svn-wc-format.py Tue Aug 10 18:06:17 2010
@@ -66,7 +66,7 @@ Change the format of a Subversion workin
 def get_adm_dir():
   """Return the name of Subversion's administrative directory,
   adjusted for the SVN_ASP_DOT_NET_HACK environment variable.  See
-  <http://svn.collab.net/repos/svn/trunk/notes/asp-dot-net-hack.txt>
+  <http://svn.apache.org/repos/asf/subversion/trunk/notes/asp-dot-net-hack.txt>
   for details."""
   return "SVN_ASP_DOT_NET_HACK" in os.environ and "_svn" or ".svn"
 

Modified: subversion/branches/ignore-mergeinfo/tools/client-side/svn-graph.pl
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/client-side/svn-graph.pl?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/client-side/svn-graph.pl (original)
+++ subversion/branches/ignore-mergeinfo/tools/client-side/svn-graph.pl Tue Aug 10 18:06:17 2010
@@ -47,7 +47,7 @@ require SVN::Ra;
 require SVN::Client;
 
 # The URL of the Subversion repository we wish to graph
-# (e.g. "http://svn.collab.net/repos/svn").
+# (e.g. "http://svn.apache.org/repos/asf/subversion").
 my $repos_url;
 
 # The revision range we operate on, from $startrev -> $youngest.

Modified: subversion/branches/ignore-mergeinfo/tools/client-side/svn-viewspec.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/client-side/svn-viewspec.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/client-side/svn-viewspec.py (original)
+++ subversion/branches/ignore-mergeinfo/tools/client-side/svn-viewspec.py Tue Aug 10 18:06:17 2010
@@ -78,7 +78,7 @@ Examples
 Here's a sample viewspec file:
 
     Format: 1
-    Url: http://svn.collab.net/repos/svn
+    Url: http://svn.apache.org/repos/asf/subversion
     Revision: 36366
 
     trunk/**

Modified: subversion/branches/ignore-mergeinfo/tools/client-side/wcfind
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/client-side/wcfind?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/client-side/wcfind (original)
+++ subversion/branches/ignore-mergeinfo/tools/client-side/wcfind Tue Aug 10 18:06:17 2010
@@ -1,5 +1,24 @@
 #!/bin/sh
 
+# ------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ------------------------------------------------------------
+
 # Copyright 2007 Max Bowsher
 # Licensed under the terms Subversion ships under
 

Modified: subversion/branches/ignore-mergeinfo/tools/dev/analyze-svnlogs.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/dev/analyze-svnlogs.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/dev/analyze-svnlogs.py (original)
+++ subversion/branches/ignore-mergeinfo/tools/dev/analyze-svnlogs.py Tue Aug 10 18:06:17 2010
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 #
 # Licensed to the Apache Software Foundation (ASF) under one

Modified: subversion/branches/ignore-mergeinfo/tools/dev/contribulyze.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/dev/contribulyze.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/dev/contribulyze.py (original)
+++ subversion/branches/ignore-mergeinfo/tools/dev/contribulyze.py Tue Aug 10 18:06:17 2010
@@ -605,14 +605,14 @@ index_introduction = '''
 <p>The following list of contributors and their contributions is meant
 to help us keep track of whom to consider for commit access.  The list
 was generated from "svn&nbsp;log" output by <a
-href="http://svn.collab.net/repos/svn/trunk/tools/dev/contribulyze.py"
+href="http://svn.apache.org/repos/asf/subversion/trunk/tools/dev/contribulyze.py"
 >contribulyze.py</a>, which looks for log messages that use the <a
-href="http://subversion.tigris.org/hacking.html#crediting">special
-contribution format</a>.</p>
+href="http://subversion.apache.org/docs/community-guide/conventions.html#crediting"
+>special contribution format</a>.</p>
 
 <p><i>Please do not use this list as a generic guide to who has
 contributed what to Subversion!</i> It omits existing <a
-href="http://svn.collab.net/repos/svn/trunk/COMMITTERS"
+href="http://svn.apache.org/repos/asf/subversion/trunk/COMMITTERS"
 >full committers</a>, for example, because they are irrelevant to our
 search for new committers.  Also, it merely counts changes, it does
 not evaluate them.  To truly understand what someone has contributed,
@@ -717,7 +717,7 @@ def usage():
   print('in which you can browse to see who contributed what.')
   print('')
   print('The log input should use the contribution-tracking format defined')
-  print('in http://subversion.tigris.org/hacking.html#crediting.')
+  print('in http://subversion.apache.org/docs/community-guide/conventions.html#crediting.')
   print('')
   print('Options:')
   print('')

Modified: subversion/branches/ignore-mergeinfo/tools/dev/po-merge.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/dev/po-merge.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/dev/po-merge.py (original)
+++ subversion/branches/ignore-mergeinfo/tools/dev/po-merge.py Tue Aug 10 18:06:17 2010
@@ -123,7 +123,7 @@ def main(argv):
                  'A backup copy of lang.po is saved as lang.po.bak.\n'
                  '\n'
                  'Example:\n'
-                 '    svn cat http://svn.collab.net/repos/svn/trunk/subversion/po/sv.po | \\\n'
+                 '    svn cat http://svn.apache.org/repos/asf/subversion/trunk/subversion/po/sv.po | \\\n'
                  '        %s sv.po' % (argv0, argv0))
 
     # Read the source po file into a hash

Modified: subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.el
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.el?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.el (original)
+++ subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.el Tue Aug 10 18:06:17 2010
@@ -1,5 +1,23 @@
 ;;;; Emacs Lisp help for writing Subversion code. ;;;;
 
+;; Licensed to the Apache Software Foundation (ASF) under one
+;; or more contributor license agreements.  See the NOTICE file
+;; distributed with this work for additional information
+;; regarding copyright ownership.  The ASF licenses this file
+;; to you under the Apache License, Version 2.0 (the
+;; "License"); you may not use this file except in compliance
+;; with the License.  You may obtain a copy of the License at
+;;
+;;   http://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing,
+;; software distributed under the License is distributed on an
+;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+;; KIND, either express or implied.  See the License for the
+;; specific language governing permissions and limitations
+;; under the License.
+
+
 ;; Later on, there will be auto-detection of svn files, modeline
 ;; status, and a whole library of routines to interface with the
 ;; command-line client.  For now, there's this, at Ben's request.

Modified: subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.vim
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.vim?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.vim (original)
+++ subversion/branches/ignore-mergeinfo/tools/dev/svn-dev.vim Tue Aug 10 18:06:17 2010
@@ -2,6 +2,23 @@
 " a per buffer basis with :source svn-dev.vim, or can be source from ~/.vimrc to
 " apply settings to all files vim uses.  For other variation try :help autocmd.
 "
+" Licensed to the Apache Software Foundation (ASF) under one
+" or more contributor license agreements.  See the NOTICE file
+" distributed with this work for additional information
+" regarding copyright ownership.  The ASF licenses this file
+" to you under the Apache License, Version 2.0 (the
+" "License"); you may not use this file except in compliance
+" with the License.  You may obtain a copy of the License at
+"
+"   http://www.apache.org/licenses/LICENSE-2.0
+"
+" Unless required by applicable law or agreed to in writing,
+" software distributed under the License is distributed on an
+" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+" KIND, either express or implied.  See the License for the
+" specific language governing permissions and limitations
+" under the License.
+"
 " TODO: Try to find a way to wrap comments without putting a * on the next line,
 " since most of subversion doesn't use that style.  (Note that taking cro out of
 " formatoptions won't quite work, because then comments won't be wrapped by