You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by gb...@apache.org on 2013/09/26 15:47:26 UTC
svn commit: r1526487 [10/10] - in
/subversion/branches/invoke-diff-cmd-feature: ./ build/ac-macros/
build/generator/ build/generator/templates/ contrib/client-side/emacs/
notes/ subversion/bindings/javahl/native/
subversion/bindings/javahl/src/org/apac...
Modified: subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/tree_conflict_tests.py?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/tree_conflict_tests.py Thu Sep 26 13:47:21 2013
@@ -1455,6 +1455,67 @@ def update_dir_with_not_present(sbox):
run_and_verify_svn(None, None, [],
'ci', '-m', '', wc_dir)
+@XFail()
+def update_delete_mixed_rev(sbox):
+ "update that deletes mixed-rev"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ sbox.simple_move('A/B/E/alpha', 'A/B/E/alpha2')
+ sbox.simple_commit()
+ sbox.simple_update()
+ sbox.simple_rm('A/B')
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+ sbox.simple_update(target='A/B/E', revision=2)
+ sbox.simple_mkdir('A/B/E2')
+
+ # Update raises a tree conflict on A/B due to local mod A/B/E2
+ expected_output = wc.State(wc_dir, {
+ 'A/B' : Item(status=' ', treeconflict='C'),
+ })
+ expected_disk = main.greek_state.copy()
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E/alpha2' : Item(contents='This is the file \'alpha\'.\n'),
+ })
+ expected_disk.remove('A/B/E/alpha')
+ expected_status = get_virginal_state(wc_dir, 3)
+ expected_status.remove('A/B/E/alpha')
+ expected_status.add({
+ 'A/B/E2' : Item(status='A ', wc_rev='-'),
+ 'A/B/E/alpha2' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ expected_status.tweak('A/B',
+ status='A ', copied='+', treeconflict='C', wc_rev='-')
+ expected_status.tweak('A/B/F', 'A/B/E', 'A/B/E/beta', 'A/B/lambda',
+ copied='+', wc_rev='-')
+ run_and_verify_update(wc_dir,
+ expected_output, expected_disk, expected_status,
+ None, None, None, None, None, 1,
+ wc_dir)
+
+ # Resolving to working state should give a mixed-revision copy that
+ # gets committed as multiple copies
+ run_and_verify_resolved([sbox.ospath('A/B')], sbox.ospath('A/B'))
+ expected_output = wc.State(wc_dir, {
+ 'A/B' : Item(verb='Adding'),
+ 'A/B/E' : Item(verb='Replacing'),
+ 'A/B/E2' : Item(verb='Adding'),
+ })
+ expected_status.tweak('A/B', 'A/B/E', 'A/B/E2', 'A/B/F', 'A/B/E/alpha2',
+ 'A/B/E/beta', 'A/B/lambda',
+ status=' ', wc_rev=4, copied=None, treeconflict=None)
+ run_and_verify_commit(wc_dir,
+ expected_output, expected_status, None,
+ wc_dir)
+
+ expected_info = {
+ 'Name': 'alpha2',
+ 'Node Kind': 'file',
+ }
+ run_and_verify_info([expected_info], sbox.repo_url + '/A/B/E/alpha2')
+
#######################################################################
# Run the tests
@@ -1485,6 +1546,7 @@ test_list = [ None,
at_directory_external,
actual_only_node_behaviour,
update_dir_with_not_present,
+ update_delete_mixed_rev,
]
if __name__ == '__main__':
Modified: subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/upgrade_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/upgrade_tests.py?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/upgrade_tests.py (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/tests/cmdline/upgrade_tests.py Thu Sep 26 13:47:21 2013
@@ -430,7 +430,10 @@ def basic_upgrade_1_0(sbox):
url = sbox.repo_url
- xml_entries_relocate(sbox.wc_dir, 'file:///1.0.0/repos', url)
+ # This is non-canonical by the rules of svn_uri_canonicalize, it gets
+ # written into the entries file and upgrade has to canonicalize.
+ non_canonical_url = url[:-1] + '%%%02x' % ord(url[-1])
+ xml_entries_relocate(sbox.wc_dir, 'file:///1.0.0/repos', non_canonical_url)
# Attempt to use the working copy, this should give an error
expected_stderr = wc_is_too_old_regex
Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_fs_fs/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Sep 26 13:47:21 2013
@@ -10,4 +10,3 @@ test-get-set-revprop-packed-fs
*~
.*~
*.exe
-
Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_fs_x/
------------------------------------------------------------------------------
Reverse-merged /subversion/branches/fsx/subversion/tests/libsvn_fs_x:r1508077-1509914
Reverse-merged /subversion/branches/fsfs-format7/subversion/tests/libsvn_fs_x:r1507729-1507732,1507735-1507736
Merged /subversion/trunk/subversion/tests/libsvn_fs_x:r1507009-1507844,1509911-1509914,1516160-1526468
Merged /subversion/branches/fsfs-improvements/subversion/tests/libsvn_fs_x:r1499981-1517476
Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_fs_x/string-table-test.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/dirent_uri-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/dirent_uri-test.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/dirent_uri-test.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/dirent_uri-test.c Thu Sep 26 13:47:21 2013
@@ -911,6 +911,9 @@ static const testcase_canonicalize_t uri
{ "file:///C:/temp/REPOS", "file:///C:/temp/REPOS" },
{ "file:///c:/", "file:///c:" },
#endif /* SVN_USE_DOS_PATHS */
+ /* Hostnames that look like non-canonical paths */
+ { "file://./foo", "file://./foo" },
+ { "http://./foo", "http://./foo" },
/* svn_uri_is_canonical() was a private function in the 1.6 API, and
has since taken a MAJOR change of direction, namely that only
absolute URLs are considered canonical uris now. */
Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/packed-data-test.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/prefix-string-test.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/priority-queue-test.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/string-test.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_subr/string-test.c Thu Sep 26 13:47:21 2013
@@ -656,7 +656,7 @@ test_string_similarity(apr_pool_t *pool)
const char *stra;
const char *strb;
apr_size_t lcs;
- int score;
+ unsigned int score;
} tests[] =
{
#define SCORE(lcs, len) ((2000 * (lcs) + (len)/2) / (len))
Modified: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/op-depth-test.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/op-depth-test.c Thu Sep 26 13:47:21 2013
@@ -8207,6 +8207,61 @@ move_update_parent_replace(const svn_tes
return SVN_NO_ERROR;
}
+static svn_error_t *
+copy_mixed_rev_mods(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "copy_mixed_rev_mods", opts,
+ pool));
+
+ SVN_ERR(sbox_wc_mkdir(&b, "A"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(sbox_wc_commit(&b, ""));
+ SVN_ERR(sbox_wc_update(&b, "", 1));
+ SVN_ERR(sbox_wc_update(&b, "A/B", 2));
+ SVN_ERR(sbox_wc_delete(&b, "A/B"));
+ SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {2, "A/B", "normal", NO_COPY_FROM},
+ {2, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ SVN_ERR(sbox_wc_copy(&b, "A", "X"));
+ {
+ nodes_row_t nodes[] = {
+ {1, "X", "normal", 1, "A"},
+ {1, "X/B", "not-present", 2, "A/B"},
+ {2, "X/B", "normal", NO_COPY_FROM},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "X", nodes));
+ }
+
+ SVN_ERR(sbox_wc_commit(&b, "X"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "X", "normal", 3, "X"},
+ {0, "X/B", "normal", 3, "X/B"},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "X", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* ---------------------------------------------------------------------- */
/* The list of test functions */
@@ -8362,5 +8417,7 @@ struct svn_test_descriptor_t test_funcs[
"update with tree conflict (issue 4347)"),
SVN_TEST_OPTS_PASS(move_update_parent_replace,
"move update with replaced parent (issue 4388)"),
+ SVN_TEST_OPTS_XFAIL(copy_mixed_rev_mods,
+ "copy mixed-rev with mods"),
SVN_TEST_NULL
};
Modified: subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/wc-queries-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/wc-queries-test.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/tests/libsvn_wc/wc-queries-test.c Thu Sep 26 13:47:21 2013
@@ -165,7 +165,7 @@ test_sqlite_version(apr_pool_t *scratch_
printf("DBG: Using Sqlite %s\n", sqlite3_version);
if (sqlite3_libversion_number() != SQLITE_VERSION_NUMBER)
- printf("DBG: Compiled against Sqlite %s", SQLITE_VERSION);
+ printf("DBG: Compiled against Sqlite %s\n", SQLITE_VERSION);
if (sqlite3_libversion_number() < SQLITE_VERSION_NUMBER)
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
Modified: subversion/branches/invoke-diff-cmd-feature/tools/dev/fsfs-access-map.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/tools/dev/fsfs-access-map.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/tools/dev/fsfs-access-map.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/tools/dev/fsfs-access-map.c Thu Sep 26 13:47:21 2013
@@ -52,9 +52,15 @@ typedef struct file_stats_t
/* number of lseek calls to clusters not previously read */
apr_int64_t uncached_seek_count;
+ /* number of lseek counts not followed by a read */
+ apr_int64_t unnecessary_seeks;
+
/* number of read() calls */
apr_int64_t read_count;
+ /* number of read() calls that returned 0 bytes */
+ apr_int64_t empty_reads;
+
/* total number of bytes returned by those reads */
apr_int64_t read_size;
@@ -86,6 +92,8 @@ typedef struct handle_info_t
/* bytes read so far in the current series of reads started (default: 0) */
apr_int64_t last_read_size;
+ /* number of read() calls in this series */
+ apr_int64_t read_count;
} handle_info_t;
/* useful typedef */
@@ -139,6 +147,11 @@ store_read_info(handle_info_t *handle_in
++*count;
}
}
+ else if (handle_info->read_count == 0)
+ {
+ /* two consecutive seeks */
+ handle_info->file->unnecessary_seeks++;
+ }
}
/* Handle a open() call. Ensures that a file_info_t for the given NAME
@@ -231,9 +244,13 @@ read_file(int handle, apr_int64_t count)
{
/* known file handle -> expand current read sequence */
+ handle_info->read_count++;
handle_info->last_read_size += count;
handle_info->file->read_count++;
handle_info->file->read_size += count;
+
+ if (count == 0)
+ handle_info->file->empty_reads++;
}
}
@@ -253,6 +270,7 @@ seek_file(int handle, apr_int64_t locati
handle_info->last_read_size = 0;
handle_info->last_read_start = location;
+ handle_info->read_count = 0;
handle_info->file->seek_count++;
/* if we seek to a location that had not been read from before,
@@ -678,6 +696,8 @@ print_stats(apr_pool_t *pool)
apr_int64_t clusters_read = 0;
apr_int64_t unique_clusters_read = 0;
apr_int64_t uncached_seek_count = 0;
+ apr_int64_t unnecessary_seek_count = 0;
+ apr_int64_t empty_read_count = 0;
apr_hash_index_t *hi;
for (hi = apr_hash_first(pool, files); hi; hi = apr_hash_next(hi))
@@ -695,13 +715,17 @@ print_stats(apr_pool_t *pool)
clusters_read += file->clusters_read;
unique_clusters_read += file->unique_clusters_read;
uncached_seek_count += file->uncached_seek_count;
+ unnecessary_seek_count += file->unnecessary_seeks;
+ empty_read_count += file->empty_reads;
}
printf("%20s files\n", svn__i64toa_sep(apr_hash_count(files), ',', pool));
printf("%20s files opened\n", svn__i64toa_sep(open_count, ',', pool));
printf("%20s seeks\n", svn__i64toa_sep(seek_count, ',', pool));
+ printf("%20s unnecessary seeks\n", svn__i64toa_sep(unnecessary_seek_count, ',', pool));
printf("%20s uncached seeks\n", svn__i64toa_sep(uncached_seek_count, ',', pool));
printf("%20s reads\n", svn__i64toa_sep(read_count, ',', pool));
+ printf("%20s empty reads\n", svn__i64toa_sep(empty_read_count, ',', pool));
printf("%20s unique clusters read\n", svn__i64toa_sep(unique_clusters_read, ',', pool));
printf("%20s clusters read\n", svn__i64toa_sep(clusters_read, ',', pool));
printf("%20s bytes read\n", svn__i64toa_sep(read_size, ',', pool));
Modified: subversion/branches/invoke-diff-cmd-feature/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/tools/dev/unix-build/Makefile.svn?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/invoke-diff-cmd-feature/tools/dev/unix-build/Makefile.svn Thu Sep 26 13:47:21 2013
@@ -741,6 +741,7 @@ $(SERF_OBJDIR)/.compiled: $(SERF_OBJDIR)
# install serf
$(SERF_OBJDIR)/.installed: $(SERF_OBJDIR)/.compiled
+ rm -rf $(PREFIX)/serf # XXX scons cannot reinstall :(
cd $(SERF_SRCDIR) && \
scons install
touch $@
Modified: subversion/branches/invoke-diff-cmd-feature/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/tools/dist/backport.pl?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/tools/dist/backport.pl (original)
+++ subversion/branches/invoke-diff-cmd-feature/tools/dist/backport.pl Thu Sep 26 13:47:21 2013
@@ -367,13 +367,14 @@ sub parse_entry {
# summary
do {
push @logsummary, shift
- } until $_[0] =~ /^\s*\w+:/ or not defined $_[0];
+ } until $_[0] =~ /^\s*[][\w]+:/ or not defined $_[0];
# votes
unshift @votes, pop until $_[-1] =~ /^\s*Votes:/ or not defined $_[-1];
pop;
# depends, branch, notes
+ # Ignored headers: Changes[*]
while (@_) {
given (shift) {
when (/^Depends:/) {
Modified: subversion/branches/invoke-diff-cmd-feature/tools/server-side/fsfs-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/tools/server-side/fsfs-stats.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/tools/server-side/fsfs-stats.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/tools/server-side/fsfs-stats.c Thu Sep 26 13:47:21 2013
@@ -271,6 +271,12 @@ typedef struct fs_fs_t
/* history of sizes of changed nodes */
histogram_t node_size_histogram;
+ /* history of representation sizes */
+ histogram_t added_rep_size_histogram;
+
+ /* history of sizes of changed nodes */
+ histogram_t added_node_size_histogram;
+
/* history of unused representations */
histogram_t unused_rep_histogram;
@@ -487,6 +493,7 @@ add_to_histogram(histogram_t *histogram,
/* Update data aggregators in FS with this representation of type KIND, on-
* disk REP_SIZE and expanded node size EXPANDED_SIZE for PATH in REVSION.
+ * PLAIN_ADDED indicates whether the node has a deltification predecessor.
*/
static void
add_change(fs_fs_t *fs,
@@ -494,7 +501,8 @@ add_change(fs_fs_t *fs,
apr_int64_t expanded_size,
svn_revnum_t revision,
const char *path,
- rep_kind_t kind)
+ rep_kind_t kind,
+ svn_boolean_t plain_added)
{
/* identify largest reps */
if (rep_size >= fs->largest_changes->min_size)
@@ -523,6 +531,12 @@ add_change(fs_fs_t *fs,
add_to_histogram(&fs->rep_size_histogram, rep_size);
add_to_histogram(&fs->node_size_histogram, expanded_size);
+ if (plain_added)
+ {
+ add_to_histogram(&fs->added_rep_size_histogram, rep_size);
+ add_to_histogram(&fs->added_node_size_histogram, expanded_size);
+ }
+
/* specific histograms by type */
switch (kind)
{
@@ -1289,6 +1303,7 @@ read_noderev(fs_fs_t *fs,
representation_t *props = NULL;
apr_size_t start_offset = offset;
svn_boolean_t is_dir = FALSE;
+ svn_boolean_t has_predecessor = FALSE;
const char *path = "???";
scratch_pool = svn_pool_create(scratch_pool);
@@ -1349,15 +1364,17 @@ read_noderev(fs_fs_t *fs,
}
else if (key_matches(&key, "cpath"))
path = value.data;
+ else if (key_matches(&key, "pred"))
+ has_predecessor = TRUE;
}
/* record largest changes */
if (text && text->ref_count == 1)
add_change(fs, (apr_int64_t)text->size, (apr_int64_t)text->expanded_size,
- text->revision, path, text->kind);
+ text->revision, path, text->kind, !has_predecessor);
if (props && props->ref_count == 1)
add_change(fs, (apr_int64_t)props->size, (apr_int64_t)props->expanded_size,
- props->revision, path, props->kind);
+ props->revision, path, props->kind, !has_predecessor);
/* if this is a directory and has not been processed, yet, read and
* process it recursively */
@@ -2046,6 +2063,7 @@ print_stats(fs_fs_t *fs,
printf(_("%20s bytes in %12s representations total\n"
"%20s bytes in %12s directory representations\n"
"%20s bytes in %12s file representations\n"
+ "%20s bytes in %12s representations of added file nodes\n"
"%20s bytes in %12s directory property representations\n"
"%20s bytes in %12s file property representations\n"
"%20s bytes in header & footer overhead\n"),
@@ -2055,6 +2073,8 @@ print_stats(fs_fs_t *fs,
svn__i64toa_sep(dir_rep_stats.total.count, ',', pool),
svn__i64toa_sep(file_rep_stats.total.packed_size, ',', pool),
svn__i64toa_sep(file_rep_stats.total.count, ',', pool),
+ svn__i64toa_sep(fs->added_rep_size_histogram.total.sum, ',', pool),
+ svn__i64toa_sep(fs->added_rep_size_histogram.total.count, ',', pool),
svn__i64toa_sep(dir_prop_rep_stats.total.packed_size, ',', pool),
svn__i64toa_sep(dir_prop_rep_stats.total.count, ',', pool),
svn__i64toa_sep(file_prop_rep_stats.total.packed_size, ',', pool),
Modified: subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-populate-node-origins-index.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-populate-node-origins-index.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-populate-node-origins-index.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-populate-node-origins-index.c Thu Sep 26 13:47:21 2013
@@ -77,7 +77,8 @@ index_revision_adds(int *count, svn_fs_t
*count = 0;
SVN_ERR(svn_fs_revision_root(&root, fs, revision, pool));
- SVN_ERR(svn_fs_paths_changed2(&changes, root, pool));
+ SVN_ERR(svn_fs_paths_changed3(&changes, root,
+ svn_move_behavior_explicit_moves, pool));
/* No paths changed in this revision? Nothing to do. */
if (apr_hash_count(changes) == 0)
@@ -94,7 +95,9 @@ index_revision_adds(int *count, svn_fs_t
apr_hash_this(hi, &path, NULL, &val);
change = val;
if ((change->change_kind == svn_fs_path_change_add)
- || (change->change_kind == svn_fs_path_change_replace))
+ || (change->change_kind == svn_fs_path_change_replace)
+ || (change->change_kind == svn_fs_path_change_move)
+ || (change->change_kind == svn_fs_path_change_movereplace))
{
if (! (change->copyfrom_path
&& SVN_IS_VALID_REVNUM(change->copyfrom_rev)))
Modified: subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-rep-sharing-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-rep-sharing-stats.c?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-rep-sharing-stats.c (original)
+++ subversion/branches/invoke-diff-cmd-feature/tools/server-side/svn-rep-sharing-stats.c Thu Sep 26 13:47:21 2013
@@ -33,6 +33,7 @@
#include "../../subversion/libsvn_fs_fs/fs_fs.h"
/* for svn_fs_fs__id_* (used in assertions only) */
#include "../../subversion/libsvn_fs_fs/id.h"
+#include "../../subversion/libsvn_fs_fs/cached_data.h"
#include "private/svn_cmdline_private.h"
@@ -183,7 +184,8 @@ struct key_t
/* What we need to know about a rep. */
struct value_t
{
- svn_checksum_t *sha1_checksum;
+ svn_checksum_t checksum;
+ unsigned char sha1_digest[APR_SHA1_DIGESTSIZE];
apr_uint64_t refcount;
};
@@ -201,7 +203,7 @@ static svn_error_t *record(apr_hash_t *r
* exist or doesn't have the checksum we are after. (The latter case
* often corresponds to node_rev->kind == svn_node_dir.)
*/
- if (records == NULL || rep == NULL || rep->sha1_checksum == NULL)
+ if (records == NULL || rep == NULL || !rep->has_sha1)
return SVN_NO_ERROR;
/* Construct the key.
@@ -216,17 +218,19 @@ static svn_error_t *record(apr_hash_t *r
if ((value = apr_hash_get(records, key, sizeof(*key))))
{
/* Paranoia. */
- SVN_ERR_ASSERT(value->sha1_checksum != NULL);
- SVN_ERR_ASSERT(svn_checksum_match(value->sha1_checksum,
- rep->sha1_checksum));
+ SVN_ERR_ASSERT(memcmp(value->sha1_digest,
+ rep->sha1_digest,
+ sizeof(value->sha1_digest)));
/* Real work. */
value->refcount++;
}
else
{
value = apr_palloc(result_pool, sizeof(*value));
- value->sha1_checksum = svn_checksum_dup(rep->sha1_checksum, result_pool);
+ value->checksum.digest = value->sha1_digest;
+ value->checksum.kind = svn_checksum_sha1;
value->refcount = 1;
+ memcpy(value->sha1_digest, rep->sha1_digest, sizeof(value->sha1_digest));
}
/* Store them. */
@@ -265,7 +269,9 @@ process_one_revision(svn_fs_t *fs,
/* Get the changed paths. */
SVN_ERR(svn_fs_revision_root(&rev_root, fs, revnum, scratch_pool));
- SVN_ERR(svn_fs_paths_changed2(&paths_changed, rev_root, scratch_pool));
+ SVN_ERR(svn_fs_paths_changed3(&paths_changed, rev_root,
+ svn_move_behavior_explicit_moves,
+ scratch_pool));
/* Iterate them. */
/* ### use iterpool? */
@@ -341,7 +347,7 @@ pretty_print(const char *name,
SVN_ERR(svn_cmdline_printf(scratch_pool, "%s %" APR_UINT64_T_FMT " %s\n",
name, value->refcount,
svn_checksum_to_cstring_display(
- value->sha1_checksum,
+ &value->checksum,
scratch_pool)));
}
Modified: subversion/branches/invoke-diff-cmd-feature/tools/server-side/svnpubsub/svnwcsub.py
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/tools/server-side/svnpubsub/svnwcsub.py?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/tools/server-side/svnpubsub/svnwcsub.py (original)
+++ subversion/branches/invoke-diff-cmd-feature/tools/server-side/svnpubsub/svnwcsub.py Thu Sep 26 13:47:21 2013
@@ -476,7 +476,15 @@ def handle_options(options):
# Otherwise, we should write this (foreground) PID into the file.
if options.pidfile and not options.daemon:
pid = os.getpid()
- open(options.pidfile, 'w').write('%s\n' % pid)
+ # Be wary of symlink attacks
+ try:
+ os.remove(options.pidfile)
+ except OSError:
+ pass
+ fd = os.open(options.pidfile, os.O_WRONLY | os.O_CREAT | os.O_EXCL,
+ 0444)
+ os.write(fd, '%d\n' % pid)
+ os.close(fd)
logging.info('pid %d written to %s', pid, options.pidfile)
if options.gid:
@@ -536,7 +544,8 @@ def main(args):
# We manage the logfile ourselves (along with possible rotation). The
# daemon process can just drop stdout/stderr into /dev/null.
- d = Daemon('/dev/null', options.pidfile, options.umask, bdec)
+ d = Daemon('/dev/null', os.path.abspath(options.pidfile),
+ options.umask, bdec)
if options.daemon:
# Daemonize the process and call sys.exit() with appropriate code
d.daemonize_exit()