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 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