You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2012/07/13 21:04:36 UTC
svn commit: r1361339 [1/14] - in /subversion/branches/master-passphrase: ./
build/generator/templates/ notes/directory-index/ notes/wc-ng/
subversion/bindings/javahl/native/
subversion/bindings/javahl/tests/org/apache/subversion/javahl/
subversion/bind...
Author: cmpilato
Date: Fri Jul 13 19:04:32 2012
New Revision: 1361339
URL: http://svn.apache.org/viewvc?rev=1361339&view=rev
Log:
Sync the master-passphrase branch with trunk.
(Merged /subversion/trunk:r1354549-1361337.)
Added:
subversion/branches/master-passphrase/subversion/libsvn_subr/utf_width.c
- copied unchanged from r1361337, subversion/trunk/subversion/libsvn_subr/utf_width.c
subversion/branches/master-passphrase/subversion/svn/file-merge.c
- copied unchanged from r1361337, subversion/trunk/subversion/svn/file-merge.c
subversion/branches/master-passphrase/subversion/tests/libsvn_subr/io-test.c
- copied unchanged from r1361337, subversion/trunk/subversion/tests/libsvn_subr/io-test.c
subversion/branches/master-passphrase/subversion/tests/libsvn_wc/conflict-data-test.c
- copied unchanged from r1361337, subversion/trunk/subversion/tests/libsvn_wc/conflict-data-test.c
Removed:
subversion/branches/master-passphrase/subversion/tests/libsvn_wc/tree-conflict-data-test.c
Modified:
subversion/branches/master-passphrase/ (props changed)
subversion/branches/master-passphrase/CHANGES
subversion/branches/master-passphrase/LICENSE
subversion/branches/master-passphrase/NOTICE
subversion/branches/master-passphrase/build.conf
subversion/branches/master-passphrase/build/generator/templates/svn_config.vcxproj.ezt
subversion/branches/master-passphrase/notes/directory-index/schema.sql
subversion/branches/master-passphrase/notes/wc-ng/conflict-storage-2.0
subversion/branches/master-passphrase/subversion/bindings/javahl/native/Targets.cpp
subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/fs.py
subversion/branches/master-passphrase/subversion/bindings/swig/ruby/test/test_client.rb
subversion/branches/master-passphrase/subversion/include/private/svn_delta_private.h
subversion/branches/master-passphrase/subversion/include/private/svn_skel.h
subversion/branches/master-passphrase/subversion/include/private/svn_wc_private.h
subversion/branches/master-passphrase/subversion/include/svn_error_codes.h
subversion/branches/master-passphrase/subversion/include/svn_fs.h
subversion/branches/master-passphrase/subversion/include/svn_io.h
subversion/branches/master-passphrase/subversion/include/svn_path.h
subversion/branches/master-passphrase/subversion/include/svn_utf.h
subversion/branches/master-passphrase/subversion/include/svn_wc.h
subversion/branches/master-passphrase/subversion/libsvn_client/checkout.c
subversion/branches/master-passphrase/subversion/libsvn_client/client.h
subversion/branches/master-passphrase/subversion/libsvn_client/externals.c
subversion/branches/master-passphrase/subversion/libsvn_client/log.c
subversion/branches/master-passphrase/subversion/libsvn_client/merge.c
subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c
subversion/branches/master-passphrase/subversion/libsvn_client/switch.c
subversion/branches/master-passphrase/subversion/libsvn_client/update.c
subversion/branches/master-passphrase/subversion/libsvn_delta/svndiff.c
subversion/branches/master-passphrase/subversion/libsvn_diff/parse-diff.c
subversion/branches/master-passphrase/subversion/libsvn_fs/fs-loader.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/bdb-err.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/changes-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/checksum-reps-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/copies-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/lock-tokens-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/locks-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/miscellaneous-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/node-origins-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/nodes-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/reps-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/rev-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/strings-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/txn-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/bdb/uuids-table.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/fs.c
subversion/branches/master-passphrase/subversion/libsvn_fs_base/trail.c
subversion/branches/master-passphrase/subversion/libsvn_fs_fs/fs.h
subversion/branches/master-passphrase/subversion/libsvn_fs_fs/fs_fs.c
subversion/branches/master-passphrase/subversion/libsvn_fs_fs/structure
subversion/branches/master-passphrase/subversion/libsvn_fs_fs/tree.c
subversion/branches/master-passphrase/subversion/libsvn_repos/dump.c
subversion/branches/master-passphrase/subversion/libsvn_repos/fs-wrap.c
subversion/branches/master-passphrase/subversion/libsvn_repos/repos.c
subversion/branches/master-passphrase/subversion/libsvn_subr/deprecated.c
subversion/branches/master-passphrase/subversion/libsvn_subr/dirent_uri.c
subversion/branches/master-passphrase/subversion/libsvn_subr/io.c
subversion/branches/master-passphrase/subversion/libsvn_subr/path.c
subversion/branches/master-passphrase/subversion/libsvn_subr/simple_providers.c
subversion/branches/master-passphrase/subversion/libsvn_subr/skel.c
subversion/branches/master-passphrase/subversion/libsvn_wc/adm_ops.c
subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.c
subversion/branches/master-passphrase/subversion/libsvn_wc/conflicts.h
subversion/branches/master-passphrase/subversion/libsvn_wc/copy.c
subversion/branches/master-passphrase/subversion/libsvn_wc/entries.c
subversion/branches/master-passphrase/subversion/libsvn_wc/externals.c
subversion/branches/master-passphrase/subversion/libsvn_wc/info.c
subversion/branches/master-passphrase/subversion/libsvn_wc/merge.c
subversion/branches/master-passphrase/subversion/libsvn_wc/node.c
subversion/branches/master-passphrase/subversion/libsvn_wc/props.c
subversion/branches/master-passphrase/subversion/libsvn_wc/props.h
subversion/branches/master-passphrase/subversion/libsvn_wc/questions.c
subversion/branches/master-passphrase/subversion/libsvn_wc/tree_conflicts.c
subversion/branches/master-passphrase/subversion/libsvn_wc/update_editor.c
subversion/branches/master-passphrase/subversion/libsvn_wc/upgrade.c
subversion/branches/master-passphrase/subversion/libsvn_wc/util.c
subversion/branches/master-passphrase/subversion/libsvn_wc/wc-metadata.sql
subversion/branches/master-passphrase/subversion/libsvn_wc/wc-queries.sql
subversion/branches/master-passphrase/subversion/libsvn_wc/wc.h
subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.c
subversion/branches/master-passphrase/subversion/libsvn_wc/wc_db.h
subversion/branches/master-passphrase/subversion/libsvn_wc/workqueue.c
subversion/branches/master-passphrase/subversion/libsvn_wc/workqueue.h
subversion/branches/master-passphrase/subversion/mod_dav_svn/liveprops.c
subversion/branches/master-passphrase/subversion/po/fr.po
subversion/branches/master-passphrase/subversion/svn/cl.h
subversion/branches/master-passphrase/subversion/svn/conflict-callbacks.c
subversion/branches/master-passphrase/subversion/svn/export-cmd.c
subversion/branches/master-passphrase/subversion/svn/log-cmd.c
subversion/branches/master-passphrase/subversion/svn/main.c
subversion/branches/master-passphrase/subversion/svn/merge-cmd.c
subversion/branches/master-passphrase/subversion/svn/notify.c
subversion/branches/master-passphrase/subversion/svn/resolve-cmd.c
subversion/branches/master-passphrase/subversion/svn/switch-cmd.c
subversion/branches/master-passphrase/subversion/svn/update-cmd.c
subversion/branches/master-passphrase/subversion/svnadmin/main.c
subversion/branches/master-passphrase/subversion/tests/cmdline/commit_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/copy_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/davautocheck.sh
subversion/branches/master-passphrase/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
subversion/branches/master-passphrase/subversion/tests/cmdline/log_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/merge_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/merge_tree_conflict_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/special_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/svnlook_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/svntest/main.py
subversion/branches/master-passphrase/subversion/tests/cmdline/switch_tests.py
subversion/branches/master-passphrase/subversion/tests/cmdline/update_tests.py
subversion/branches/master-passphrase/subversion/tests/libsvn_diff/diff-diff3-test.c
subversion/branches/master-passphrase/subversion/tests/libsvn_fs_fs/fs-pack-test.c
subversion/branches/master-passphrase/subversion/tests/libsvn_subr/ (props changed)
subversion/branches/master-passphrase/subversion/tests/libsvn_subr/skel-test.c
subversion/branches/master-passphrase/subversion/tests/libsvn_wc/ (props changed)
subversion/branches/master-passphrase/subversion/tests/libsvn_wc/db-test.c
subversion/branches/master-passphrase/subversion/tests/libsvn_wc/op-depth-test.c
subversion/branches/master-passphrase/subversion/tests/libsvn_wc/wc-queries-test.c
subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/benchmark.py
subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/run
subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/run.bat
Propchange: subversion/branches/master-passphrase/
------------------------------------------------------------------------------
Merged /subversion/trunk:r1354549-1361337
Modified: subversion/branches/master-passphrase/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/CHANGES?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/CHANGES (original)
+++ subversion/branches/master-passphrase/CHANGES Fri Jul 13 19:04:32 2012
@@ -25,6 +25,8 @@ http://svn.apache.org/repos/asf/subversi
* 'svn diff' can compare arbitrary files and directories (r1310291, et al)
* ra_serf avoids re-downloading content present in pristine store (r1333936)
* 'svn mergeinfo' now honors the --revision (-r) option (issue #4199)
+ * new --search and --isearch options for 'svn log' (r1354666, -830)
+ * new built-in interactive text conflict merge tool (r1357864, et al)
- Client-side bugfixes:
*
Modified: subversion/branches/master-passphrase/LICENSE
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/LICENSE?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/LICENSE (original)
+++ subversion/branches/master-passphrase/LICENSE Fri Jul 13 19:04:32 2012
@@ -260,3 +260,11 @@ subversion/bindings/swig/python/tests/tr
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+For the file subversion/libsvn_subr/utf_width.c
+
+ * Markus Kuhn -- 2007-05-26 (Unicode 5.0)
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * for any purpose and without fee is hereby granted. The author
+ * disclaims all warranties with regard to this software.
Modified: subversion/branches/master-passphrase/NOTICE
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/NOTICE?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/NOTICE (original)
+++ subversion/branches/master-passphrase/NOTICE Fri Jul 13 19:04:32 2012
@@ -13,4 +13,6 @@ For more information, see LICENSE.
This product includes software developed under the X Consortium License
see: build/install-sh
+This product includes software developed by Markus Kuhn under a permissive
+license, see LICENSE.
Modified: subversion/branches/master-passphrase/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/build.conf?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/build.conf (original)
+++ subversion/branches/master-passphrase/build.conf Fri Jul 13 19:04:32 2012
@@ -757,6 +757,14 @@ sources = hashdump-test.c
install = test
libs = libsvn_test libsvn_subr apriconv apr
+[io-test]
+description = Test I/O Operations
+type = exe
+path = subversion/tests/libsvn_subr
+sources = io-test.c
+install = test
+libs = libsvn_test libsvn_subr apriconv apr
+
[opt-test]
description = Test options library
type = exe
@@ -941,11 +949,11 @@ libs = libsvn_test libsvn_ra_local libsv
# ----------------------------------------------------------------------------
# Tests for libsvn_wc
-[tree-conflict-data-test]
+[conflict-data-test]
description = Test the storage of tree conflict data
type = exe
path = subversion/tests/libsvn_wc
-sources = tree-conflict-data-test.c utils.c
+sources = conflict-data-test.c utils.c
install = test
libs = libsvn_client libsvn_test libsvn_wc libsvn_subr apriconv apr
@@ -1140,7 +1148,7 @@ libs = __ALL__
opt-test path-test stream-test string-test time-test utf-test
target-test error-test cache-test spillbuf-test crypto-test
named_atomic-test named_atomic-proc-test revision-test
- subst_translate-test
+ subst_translate-test io-test
translate-test
random-test window-test
diff-diff3-test
@@ -1149,7 +1157,7 @@ libs = __ALL__
entries-dump atomic-ra-revprop-change wc-lock-tester wc-incomplete-tester
diff diff3 diff4
client-test
- tree-conflict-data-test db-test pristine-store-test entries-compat-test
+ conflict-data-test db-test pristine-store-test entries-compat-test
op-depth-test dirent_uri-test wc-queries-test
auth-test
parse-diff-test
Modified: subversion/branches/master-passphrase/build/generator/templates/svn_config.vcxproj.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/build/generator/templates/svn_config.vcxproj.ezt?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/build/generator/templates/svn_config.vcxproj.ezt (original)
+++ subversion/branches/master-passphrase/build/generator/templates/svn_config.vcxproj.ezt Fri Jul 13 19:04:32 2012
@@ -26,6 +26,7 @@
</ProjectConfiguration>
[end][end] </ItemGroup>
<PropertyGroup Label="Globals">
+ <ProjectName>svn_config</ProjectName>
<ProjectGuid>[project_guid]</ProjectGuid>
<Keyword>MakeFileProj</Keyword>
</PropertyGroup>
@@ -34,6 +35,7 @@
<ConfigurationType>Utility</ConfigurationType>
<UseDebugLibraries>[is configs "Debug"]true[else]false[end]</UseDebugLibraries>
<PlatformToolset>[toolset_version]</PlatformToolset>
+ <CLRSupport>false</CLRSupport>
</PropertyGroup>
[end][end] <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -67,6 +69,9 @@
[end][end]
</CustomBuild>
[end] </ItemGroup>
+ <ItemGroup>
+[for sql][for sql.dependencies] <None Include="$(SolutionDir)\[sql.dependencies]" />
+[end][end] </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
Modified: subversion/branches/master-passphrase/notes/directory-index/schema.sql
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/notes/directory-index/schema.sql?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/notes/directory-index/schema.sql (original)
+++ subversion/branches/master-passphrase/notes/directory-index/schema.sql Fri Jul 13 19:04:32 2012
@@ -19,165 +19,192 @@
---SCRIPT CREATE_SCHEMA
-DROP TABLE IF EXISTS dirindex;
-DROP TABLE IF EXISTS strindex;
-DROP TABLE IF EXISTS revision;
-
--- Revision record
-
-CREATE TABLE revision (
- version integer NOT NULL PRIMARY KEY,
- created timestamp NOT NULL,
- author varchar NULL,
- log varchar NULL
-);
-
--- Path lookup table
+DROP TABLE IF EXISTS noderev;
+DROP TABLE IF EXISTS branch;
+DROP TABLE IF EXISTS txn;
+
+
+-- Transactions
+CREATE TABLE txn (
+ -- transaction number
+ id integer NOT NULL PRIMARY KEY,
+
+ -- the version of the tree associated with this transaction;
+ -- initially the same as id, but may refer to the originator
+ -- transaction when tracking revprop changes and/or modified trees
+ -- (q.v., obliterate)
+ txnid integer NOT NULL REFERENCES txn(id),
+
+ -- the revision that this transaction represents; as long as this is
+ -- null, the transaction has not yet been committed.
+ revision integer NULL,
+
+ -- creation date, independent of the svn:date property
+ created timestamp NOT NULL,
+
+ -- transaction author, independent of the svn:author property; may
+ -- be null if the repository allows anonymous modifications
+ author varchar NULL
-CREATE TABLE strindex (
- strid integer NOT NULL PRIMARY KEY,
- content varchar NOT NULL UNIQUE
+ -- other attributes:
+ -- revision properties
);
--- Versioned directory tree
+CREATE INDEX txn_revision_idx ON txn(revision);
-CREATE TABLE dirindex (
- -- unique id of this node revision, used for
- -- predecessor/successor links
- rowid integer NOT NULL PRIMARY KEY,
- -- link to this node's immediate predecessor
- origin integer NULL REFERENCES dirindex(rowid),
+-- Branches -- unique forks in the nodes' history
+CREATE TABLE branch (
+ -- branch identifier
+ id integer NOT NULL PRIMARY KEY,
- -- absolute (repository) path
- pathid integer NOT NULL REFERENCES strindex(strid),
+ -- the node to which this branch belongs; refers to the initial
+ -- branch of the node
+ nodeid integer NOT NULL REFERENCES branch(id),
- -- revision number
- version integer NOT NULL REFERENCES revision(version),
+ -- the source branch from which this branch was forked
+ origin integer NULL REFERENCES branch(id),
- -- node kind (D = dir, F = file, etc.)
- kind character(1) NOT NULL,
+ -- the transaction in which the branch was created
+ txnid integer NOT NULL REFERENCES txn(id)
- -- the operation that produced this entry:
- -- A = add, R = replace, M = modify, D = delete, N = rename
- opcode character(1) NOT NULL,
-
- -- the index entry is the result of an implicit subtree operation
- subtree boolean NOT NULL
+ -- sanity check: ye can't be yer own daddy
+ CONSTRAINT genetic_diversity CHECK (id <> origin)
);
-CREATE UNIQUE INDEX dirindex_versioned_tree ON dirindex(pathid, version DESC);
-CREATE INDEX dirindex_successor_list ON dirindex(origin);
-CREATE INDEX dirindex_operation ON dirindex(opcode);
-
--- Repository root
-
-INSERT INTO revision (version, created, author, log)
- VALUES (0, 'EPOCH', NULL, NULL);
-INSERT INTO strindex (strid, content) VALUES (0, '/');
-INSERT INTO dirindex (rowid, origin, pathid, version, kind, opcode, subtree)
- VALUES (0, NULL, 0, 0, 'D', 'A', 0);
-
-
----STATEMENT INSERT_REVISION_RECORD
-
-INSERT INTO revision (version, created, author, log)
- VALUES (?, ?, ?, ?);
-
----STATEMENT GET_REVENT_BY_VERSION
-
-SELECT * FROM revision WHERE version = ?;
-
----STATEMENT INSERT_STRINDEX_RECORD
-
-INSERT INTO strindex (content) VALUES (?);
-
----STATEMENT GET_STRENT_BY_STRID
-
-SELECT * FROM strindex WHERE strid = ?;
----STATEMENT GET_STRENT_BY_CONTENT
+CREATE INDEX branch_node_idx ON branch(nodeid);
+CREATE INDEX branch_successor_idx ON branch(origin);
-SELECT * FROM strindex WHERE content = ?;
----STATEMENT INSERT_DIRINDEX_RECORD
+-- Node revisions -- DAG of versioned node changes
+CREATE TABLE noderev (
+ -- node revision identifier
+ id integer NOT NULL PRIMARY KEY,
-INSERT INTO dirindex (origin, pathid, version, kind, opcode, subtree)
- VALUES (?, ?, ?, ?, ?, ?);
+ -- the node identifier; a new node will get the ID of its initial
+ -- branch
+ nodeid integer NOT NULL REFERENCES branch(id),
----STATEMENT GET_DIRENT_BY_ROWID
+ -- the node kind; immutable within the node
+ -- D = directory, F = file, L = link
+ kind character(1) NOT NULL,
-SELECT dirindex.*, strindex.content FROM dirindex
- JOIN strindex ON dirindex.pathid = strindex.strid
-WHERE dirindex.rowid = ?;
+ -- this node revision's immediate predecessor
+ origin integer NULL REFERENCES noderev(id),
----STATEMENT GET_DIRENT_BY_ABSPATH_AND_VERSION
+ -- the parent (directory) of this node revision -- tree graph
+ parent integer NULL REFERENCES branch(id),
-SELECT dirindex.*, strindex.content AS abspath FROM dirindex
- JOIN strindex ON dirindex.pathid = strindex.strid
-WHERE abspath = ? AND dirindex.version = ?;
+ -- the branch that this node revision belongs to -- history graph
+ branch integer NOT NULL REFERENCES branch(id),
----STATEMENT LOOKUP_ABSPATH_AT_REVISION
+ -- the indexable, NFC-normalized name of this noderev within its parent
+ name varchar NOT NULL,
-SELECT dirindex.*, strindex.content AS abspath FROM dirindex
- JOIN strindex ON dirindex.pathid = strindex.strid
-WHERE abspath = ? AND dirindex.version <= ?
-ORDER BY abspath ASC, dirindex.version DESC
-LIMIT 1;
+ -- the original, denormalized, non-indexable name; null if it's ths
+ -- same as the name
+ dename varchar NULL,
----STATEMENT LIST_SUBTREE_AT_REVISION
+ -- the transaction in which the node was changed
+ txnid integer NOT NULL REFERENCES txn(id),
-SELECT dirindex.*, strindex.content AS abspath FROM dirindex
- JOIN strindex ON dirindex.pathid = strindex.strid
- JOIN (SELECT pathid, MAX(version) AS maxver FROM dirindex
- WHERE version <= ? GROUP BY pathid)
- AS filtered
- ON dirindex.pathid == filtered.pathid
- AND dirindex.version == filtered.maxver
-WHERE abspath LIKE ? ESCAPE '#'
- AND dirindex.opcode <> 'D'
-ORDER BY abspath ASC;
+ -- the change that produced this node revision
+ -- A = added, D = deleted, M = modified, N = renamed, R = replaced
+ -- B = branched (requires kind=D + added + origin <> null)
+ -- L = lazy branch, indicates that child lookup should be performed
+ -- on the origin (same constraints as for opcode=B)
+ opcode character(1) NOT NULL,
----STATEMENT LIST_DIRENT_SUCCESSORS
+ -- sanity check: only directories can be lazy
+ CONSTRAINT minimal_workload CHECK (
+ ((opcode = 'B' OR opcode = 'L') AND kind = 'D' AND origin IS NOT NULL)
+ OR opcode <> 'B' AND opcode <> 'L'),
-SELECT dirindex.*, strindex.content AS abspath FROM dirindex
- JOIN strindex ON dirindex.pathid = strindex.strid
-WHERE dirindex.origin = ?
-ORDER BY abspath ASC, dirindex.version ASC;
+ -- sanity check: ye can't be yer own daddy
+ CONSTRAINT genetic_diversity CHECK (id <> origin),
+ -- sanity check: ye can't be yer own stepdaddy, either
+ CONSTRAINT escher_avoidance CHECK (parent <> branch)
--- Temporary transaction
-
----SCRIPT CREATE_TRANSACTION_CONTEXT
-
-CREATE TEMPORARY TABLE txncontext (
- origin integer NULL,
- abspath varchar NOT NULL UNIQUE,
- kind character(1) NOT NULL,
- opcode character(1) NOT NULL,
- subtree boolean NOT NULL
+ -- other attributes:
+ -- versioned properties
+ -- contents reference
);
----SCRIPT REMOVE_TRANSACTION_CONTEXT
-
-DROP TABLE IF EXISTS temp.txncontext;
-
----STATEMENT INSERT_TRANSACTION_RECORD
-
-INSERT INTO temp.txncontext (origin, abspath, kind, opcode, subtree)
- VALUES (?, ?, ?, ?, ?);
-
----STATEMENT GET_TRANSACTION_RECORD
-
-SELECT * FROM temp.txncontext WHERE abspath = ?;
-
----STATEMENT REMOVE_TRANSACTION_RECORD
-
-DELETE FROM temp.txncontext WHERE abspath = ?;
-
----STATEMENT REMOVE_TRANSACTION_SUBTREE
-
-DELETE FROM temp.txncontext WHERE abspath LIKE ? ESCAPE '#';
-
----STATEMENT LIST_TRANSACTION_RECORDS
-
-SELECT * FROM temp.txncontext ORDER BY abspath ASC;
+CREATE UNIQUE INDEX noderev_tree_idx ON noderev(parent, name, txnid);
+CREATE INDEX nodefev_node_idx ON noderev(nodeid);
+CREATE INDEX noderev_successor_idx ON noderev(origin);
+
+
+-- Root directory
+
+INSERT INTO txn (id, txnid, revision, created) VALUES (0, 0, 0, 'EPOCH');
+INSERT INTO branch (id, nodeid, txnid) VALUES (0, 0, 0);
+INSERT INTO noderev (id, nodeid, kind, branch, name, txnid, opcode)
+ VALUES (0, 0, 'D', 0, '', 0, 'A');
+
+
+--# ---STATEMENT INSERT_TXN
+--# INSERT INTO txn (revnum, created, author)
+--# VALUES (:revnum, :created, :author);
+--#
+--# ---STATEMENT GET_TXN
+--# SELECT * FROM txn WHERE id = :id;
+--#
+--# ---STATEMENT FIND_TXN_BY_REVNUM
+--# SELECT * FROM txn WHERE revnum = :revnum;
+--#
+--# ---STATEMENT FIND_NEWEST_REVISION_TXN
+--# SELECT * FROM txn WHERE revnum IS NOT NULL ORDER BY revnum DESC LIMIT 1;
+--#
+--# ---STATEMENT SET_TXN_REVNUM
+--# UPDATE txn SET revnum = :revnum WHERE id = :id;
+--#
+--# ---STATEMENT INSERT_NODE
+--# INSERT INTO node (kind, txnid) VALUES (:kind, :txnid);
+--#
+--# ---STATEMENT GET_NODE
+--# SELECT * FROM node WHERE id = :id;
+--#
+--# ---STATEMENT INSERT_BRANCH
+--# INSERT INTO branch (origin, node, txnid)
+--# VALUES (:origin, :node, :txnid);
+--#
+--# ---STATEMENT GET_BRANCH
+--# SELECT * FROM branch WHERE id = :id;
+--#
+--# ---STATEMENT INSERT_NODEREV
+--# INSERT INTO noderev (origin, parent, branch,
+--# iname, oname, txnid, change)
+--# VALUES (:origin, :parent, :branch,
+--# :iname, :oname, :txnid, :change);
+--#
+--# ---STATEMENT FIND_NODEREV_BY_NAME_FOR_TXN
+--# SELECT
+--# noderev.*,
+--# node.id AS node,
+--# node.kind AS kind
+--# FROM
+--# noderev JOIN branch ON noderev.branch = branch.id
+--# JOIN node ON branch.node = node.id
+--# WHERE
+--# parent = :parent AND iname = ":iname"
+--# AND noderev.txnid <= :txnid
+--# ORDER BY txnid DESC
+--# LIMIT 1;
+--#
+--# ---STATEMENT LIST_DIRECTORY_FOR_TXN
+--# SELECT
+--# noderev.*,
+--# node.id AS node,
+--# node.kind AS kind,
+--# FROM
+--# noderev JOIN branch ON noderev.branch = branch.id
+--# JOIN node ON branch.node = node.id
+--# JOIN (SELECT iname, MAX(txnid) AS maxtxn FROM noderev
+--# WHERE txnid <= :txnid) AS filter
+--# ON noderev.iname = filter.iname AND txnid = filter.maxtxn
+--# WHERE
+--# noderev.parent = :parent
+--# AND noderev.change <> 'D'
+--# ORDER BY iname ASC;
Modified: subversion/branches/master-passphrase/notes/wc-ng/conflict-storage-2.0
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/notes/wc-ng/conflict-storage-2.0?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/notes/wc-ng/conflict-storage-2.0 (original)
+++ subversion/branches/master-passphrase/notes/wc-ng/conflict-storage-2.0 Fri Jul 13 19:04:32 2012
@@ -79,7 +79,8 @@ this format in a future version if we wa
"update" and "switch" will have 1 PATH_REV item, containing the original BASE
path from before the update/switch. The new location is already available in
-BASE so doesn't have to be duplicated.
+BASE so doesn't have to be duplicated. If the node is an addition the empty
+list is used.
Merge will have 2 items: the left and right paths. These can come from a
different repository.
@@ -128,9 +129,9 @@ while resolving we can start using the W
svn info can provide additional information about the conflict and all the
svn resolve options apply in both interactive an non-interactive situations.
-The MARKERS list always has at least 3 items, where the first 3 map to OLD,
-NEW and WORKING in the old WC-1.0 behavior. () markers are needed to keep
-this code compatible with svn_wc_entry_t mapping.
+The MARKERS list always has 4 items, mapping to ORIGINAL, MINE, ORIGINAL-THEIRS
+and THEIRS. () markers are needed to keep this code compatible with
+svn_wc_entry_t mapping.
Using the PRISTINE store as additional backing store for text conflicts
is left out of this proposal and can be implemented independently.
@@ -139,13 +140,23 @@ Property Conflicts
------------------
Property conflicts are initially described as
- ("prop" MARKERS (PROPS-OLD PROPS-NEW PROPS_WORKING) ...)
+ ("prop" MARKERS PROP-NAMES
+ OLD-PROPS MINE-PROPS THEIR-PROPS ...)
+
+PROP-NAMES is a list of conflicted/not-resolved properties.
+*-PROPS are (key value) property mapping lists.
This simple model extends the wc-1.0 model to allow the same conflict
resolving as for text conflicts. All the options 'base', 'working',
'mine-conflict', 'theirs-conflict', 'mine-full' and 'theirs-full' are
relatively easy to implement once we have the values stored.
+Conceptually we need 4 list of property hashes as we merge the difference
+between two lists into a potentially already modified working copy. But in
+case of update and merge the old and theirs-old list is the same and in case
+of a merge we still have the mine-old as the pristine version. So by
+retrieving the operation from the WHY skel we can reconstruct the 4 lists.
+
svn info can provide additional information about the conflict and all the
svn resolve options apply in both interactive an non-interactive situations.
@@ -159,6 +170,7 @@ independently once this is implemented.
The --accept options already provide a lot of additional value and the
WHY model would allow access to the specific sets by URL.
+
Tree Conflicts
--------------
@@ -176,3 +188,7 @@ where it applies to the WHY parts.
It would be nice if some other --accept values would be accepted, but that
is outside the scope of this design.
+
+### gs: is LOCAL-STATE defined the same as in 'conflict-storage' ?
+
+### gs: what is the definition of INCOMING-ACTION ?
Modified: subversion/branches/master-passphrase/subversion/bindings/javahl/native/Targets.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/javahl/native/Targets.cpp?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/javahl/native/Targets.cpp (original)
+++ subversion/branches/master-passphrase/subversion/bindings/javahl/native/Targets.cpp Fri Jul 13 19:04:32 2012
@@ -86,7 +86,7 @@ const apr_array_header_t *Targets::array
m_error_occured = err;
break;
}
- APR_ARRAY_PUSH(apr_targets, const char *) = *it;
+ APR_ARRAY_PUSH(apr_targets, const char *) = target;
}
return apr_targets;
Modified: subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Fri Jul 13 19:04:32 2012
@@ -1983,6 +1983,11 @@ public class BasicTests extends SVNTests
assertEquals("wrong date with getTimeMillis()",
lm[0].getDate(),
new java.util.Date(lm[0].getTimeMillis()));
+
+ // Ensure that targets get canonicalized
+ String non_canonical = thisTest.getUrl().toString() + "/";
+ LogMessage lm2[] = collectLogMessages(non_canonical, null,
+ ranges, false, true, false, 0);
}
/**
@@ -3104,10 +3109,12 @@ public class BasicTests extends SVNTests
conflict.getSrcLeftVersion().getPathInRepos(), tcTest.getUrl() + "/A/B/E/alpha");
assertEquals(conflict.getSrcLeftVersion().getPegRevision(), 1L);
- assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
- assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl().toString());
- assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
-
+ if (conflict.getSrcRightVersion() != null)
+ {
+ assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
+ assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl().toString());
+ assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
+ }
}
/**
Modified: subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/master-passphrase/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java Fri Jul 13 19:04:32 2012
@@ -1963,6 +1963,11 @@ public class BasicTests extends SVNTests
assertEquals("wrong date with getTimeMillis()",
lm[0].getDate(),
new java.util.Date(lm[0].getTimeMillis()));
+
+ // Ensure that targets get canonicalized
+ String non_canonical = thisTest.getUrl().toString() + "/";
+ LogMessage lm2[] = client.logMessages(non_canonical, null,
+ null, false, true);
}
/**
@@ -3034,10 +3039,12 @@ public class BasicTests extends SVNTests
conflict.getSrcLeftVersion().getPathInRepos(), tcTest.getUrl() + "/A/B/E/alpha");
assertEquals(conflict.getSrcLeftVersion().getPegRevision(), 1L);
- assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
- assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl());
- assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
-
+ if (conflict.getSrcRightVersion() != null)
+ {
+ assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
+ assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl());
+ assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);
+ }
}
/**
Modified: subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/fs.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/fs.py?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/fs.py (original)
+++ subversion/branches/master-passphrase/subversion/bindings/swig/python/svn/fs.py Fri Jul 13 19:04:32 2012
@@ -115,7 +115,7 @@ class FileDiff:
+ [self.tempfile1, self.tempfile2]
# open the pipe, and return the file object for reading from the child.
- p = _subprocess.Popen(cmd, stdout=_subprocess.PIPE,
+ p = _subprocess.Popen(cmd, stdout=_subprocess.PIPE, bufsize=-1,
close_fds=_sys.platform != "win32")
return p.stdout
Modified: subversion/branches/master-passphrase/subversion/bindings/swig/ruby/test/test_client.rb
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/bindings/swig/ruby/test/test_client.rb?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/bindings/swig/ruby/test/test_client.rb (original)
+++ subversion/branches/master-passphrase/subversion/bindings/swig/ruby/test/test_client.rb Fri Jul 13 19:04:32 2012
@@ -1992,8 +1992,6 @@ class SvnClientTest < Test::Unit::TestCa
[path, Svn::Wc::NOTIFY_UPDATE_UPDATE],
[@wc_path, Svn::Wc::NOTIFY_UPDATE_UPDATE],
[@wc_path, Svn::Wc::NOTIFY_UPDATE_COMPLETED],
- [@wc_path, Svn::Wc::NOTIFY_CONFLICT_RESOLVER_STARTING],
- [@wc_path, Svn::Wc::NOTIFY_CONFLICT_RESOLVER_DONE],
],
notify_info)
@@ -2004,8 +2002,6 @@ class SvnClientTest < Test::Unit::TestCa
[path, Svn::Wc::NOTIFY_UPDATE_UPDATE],
[@wc_path, Svn::Wc::NOTIFY_UPDATE_UPDATE],
[@wc_path, Svn::Wc::NOTIFY_UPDATE_COMPLETED],
- [@wc_path, Svn::Wc::NOTIFY_CONFLICT_RESOLVER_STARTING],
- [@wc_path, Svn::Wc::NOTIFY_CONFLICT_RESOLVER_DONE],
],
notify_info)
end
Modified: subversion/branches/master-passphrase/subversion/include/private/svn_delta_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/private/svn_delta_private.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/private/svn_delta_private.h (original)
+++ subversion/branches/master-passphrase/subversion/include/private/svn_delta_private.h Fri Jul 13 19:04:32 2012
@@ -101,6 +101,25 @@ svn_delta__delta_from_editor(const svn_d
struct svn_delta__extra_baton *exb,
apr_pool_t *pool);
+/**
+ * Get the data from IN, compress it according to the specified
+ * COMPRESSION_LEVEL and write the result to OUT.
+ * SVN_DELTA_COMPRESSION_LEVEL_NONE is valid for COMPRESSION_LEVEL.
+ */
+svn_error_t *
+svn__compress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ int compression_level);
+
+/**
+ * Get the compressed data from IN, decompress it and write the result to
+ * OUT. Return an error if the decompressed size is larger than LIMIT.
+ */
+svn_error_t *
+svn__decompress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ apr_size_t limit);
+
#ifdef __cplusplus
}
Modified: subversion/branches/master-passphrase/subversion/include/private/svn_skel.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/private/svn_skel.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/private/svn_skel.h (original)
+++ subversion/branches/master-passphrase/subversion/include/private/svn_skel.h Fri Jul 13 19:04:32 2012
@@ -133,6 +133,11 @@ svn_skel_t *svn_skel__mem_atom(const voi
/* Create an empty list skel, allocated from POOL. */
svn_skel_t *svn_skel__make_empty_list(apr_pool_t *pool);
+/* Duplicates the skel structure SRC_SKEL and if DUP_DATA is true also the
+ data it references in RESULT_POOL */
+svn_skel_t *svn_skel__dup(const svn_skel_t *src_skel, svn_boolean_t dup_data,
+ apr_pool_t *result_pool);
+
/* Prepend SKEL to LIST. */
void svn_skel__prepend(svn_skel_t *skel, svn_skel_t *list);
Modified: subversion/branches/master-passphrase/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/private/svn_wc_private.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/master-passphrase/subversion/include/private/svn_wc_private.h Fri Jul 13 19:04:32 2012
@@ -305,20 +305,6 @@ svn_wc__del_tree_conflict(svn_wc_context
const char *victim_abspath,
apr_pool_t *scratch_pool);
-
-/* Return a hash @a *tree_conflicts of all the children of @a
- * local_abspath that are in tree conflicts. The hash maps local
- * abspaths to pointers to svn_wc_conflict_description2_t, all
- * allocated in result pool.
- */
-svn_error_t *
-svn_wc__get_all_tree_conflicts(apr_hash_t **tree_conflicts,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
/** Like svn_wc_is_wc_root(), but it doesn't consider switched subdirs or
* deleted entries as working copy roots.
*/
@@ -742,27 +728,6 @@ svn_wc__node_get_lock_info(const char **
apr_pool_t *scratch_pool);
/**
- * A hack to remove the last entry from libsvn_client. This simply fetches an
- * some values from WC-NG, and puts the needed bits into the output parameters,
- * allocated in @a result_pool.
- *
- * All output arguments can be NULL to indicate that the
- * caller is not interested in the specific result.
- *
- * @a local_abspath and @a wc_ctx are what you think they are.
- */
-svn_error_t *
-svn_wc__node_get_conflict_info(const char **conflict_old,
- const char **conflict_new,
- const char **conflict_wrk,
- const char **prejfile,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/**
* Acquire a recursive write lock for @a local_abspath. If @a lock_anchor
* is true, determine if @a local_abspath has an anchor that should be locked
* instead; otherwise, @a local_abspath must be a versioned directory.
Modified: subversion/branches/master-passphrase/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_error_codes.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_error_codes.h Fri Jul 13 19:04:32 2012
@@ -777,6 +777,11 @@ SVN_ERROR_START
SVN_ERR_FS_CATEGORY_START + 50,
"The filesystem editor completion process was not followed")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_FS_PACKED_REPPROP_READ_FAILURE,
+ SVN_ERR_FS_CATEGORY_START + 51,
+ "A packed revprop could not be read")
+
/* repos errors */
SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
Modified: subversion/branches/master-passphrase/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_fs.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_fs.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_fs.h Fri Jul 13 19:04:32 2012
@@ -120,6 +120,13 @@ typedef struct svn_fs_t svn_fs_t;
* @since New in 1.6.
*/
#define SVN_FS_CONFIG_PRE_1_6_COMPATIBLE "pre-1.6-compatible"
+
+/** Create repository format compatible with Subversion versions
+ * earlier than 1.8.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_FS_CONFIG_PRE_1_8_COMPATIBLE "pre-1.8-compatible"
/** @} */
Modified: subversion/branches/master-passphrase/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_io.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_io.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_io.h Fri Jul 13 19:04:32 2012
@@ -607,6 +607,25 @@ svn_io_filesizes_different_p(svn_boolean
const char *file2,
apr_pool_t *pool);
+/** Set @a *different_p12 to non-zero if @a file1 and @a file2 have different
+ * sizes, else set to zero. Do the similar for @a *different_p23 with
+ * @a file2 and @a file3, and @a *different_p13 for @a file1 and @a file3.
+ * All three of @a file1, @a file2 and @a file3 are utf8-encoded.
+ *
+ * Setting @a *different_p12 to zero does not mean the files definitely
+ * have the same size, it merely means that the sizes are not
+ * definitely different. That is, if the size of one or both files
+ * cannot be determined, then the sizes are not known to be different,
+ * so @a *different_p12 is set to 0.
+ */
+svn_error_t *
+svn_io_filesizes_three_different_p(svn_boolean_t *different_p12,
+ svn_boolean_t *different_p23,
+ svn_boolean_t *different_p13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool);
/** Return in @a *checksum the checksum of type @a kind of @a file
* Use @a pool for temporary allocations and to allocate @a *checksum.
@@ -642,6 +661,20 @@ svn_io_files_contents_same_p(svn_boolean
const char *file2,
apr_pool_t *pool);
+/** Set @a *same12 to TRUE if @a file1 and @a file2 have the same
+ * contents, else set it to FALSE. Do the similar for @a *same23
+ * with @a file2 and @a file3, and @a *same13 for @a file1 and @a
+ * file3. Use @a pool for temporary allocations.
+ */
+svn_error_t *
+svn_io_files_contents_three_same_p(svn_boolean_t *same12,
+ svn_boolean_t *same23,
+ svn_boolean_t *same13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool);
+
/** Create file at utf8-encoded @a file with contents @a contents.
* @a file must not already exist.
* Use @a pool for memory allocations.
@@ -2167,6 +2200,36 @@ svn_io_write_version_file(const char *pa
int version,
apr_pool_t *pool);
+/* Read a line of text from a file, up to a specified length.
+ *
+ * Allocate @a *stringbuf in @a result_pool, and read into it one line
+ * from @a file. Reading stops either after a line-terminator was found
+ * or after @a max_len bytes have been read.
+ *
+ * If end-of-file is reached or @a max_len bytes have been read, and @a eof
+ * is not NULL, then set @a *eof to @c TRUE.
+ *
+ * The line-terminator is not stored in @a *stringbuf.
+ * The line-terminator is detected automatically and stored in @a *eol
+ * if @a eol is not NULL. If EOF is reached and @a file does not end
+ * with a newline character, and @a eol is not NULL, @ *eol is set to NULL.
+ *
+ * @a scratch_pool is used for temporary allocations.
+ *
+ * Hint: To read all data until a line-terminator is hit, pass APR_SIZE_MAX
+ * for @a max_len.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_file_readline(apr_file_t *file,
+ svn_stringbuf_t **stringbuf,
+ const char **eol,
+ svn_boolean_t *eof,
+ apr_size_t max_len,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/** @} */
#ifdef __cplusplus
Modified: subversion/branches/master-passphrase/subversion/include/svn_path.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_path.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_path.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_path.h Fri Jul 13 19:04:32 2012
@@ -106,8 +106,8 @@ svn_path_local_style(const char *path, a
* for the base.
*
* @deprecated Provided for backward compatibility with the 1.6 API.
- * New code should use svn_dirent_join(), svn_uri_join(),
- * svn_relpath_join() or svn_fspath__join().
+ * New code should use svn_dirent_join(), svn_relpath_join() or
+ * svn_fspath__join().
*/
SVN_DEPRECATED
char *
Modified: subversion/branches/master-passphrase/subversion/include/svn_utf.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_utf.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_utf.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_utf.h Fri Jul 13 19:04:32 2012
@@ -236,6 +236,12 @@ svn_utf_cstring_from_utf8_string(const c
const svn_string_t *src,
apr_pool_t *pool);
+/** Return the display width of UTF-8-encoded C string @a cstr.
+ * If the string is not printable or invalid UTF-8, return -1.
+ * @since New in 1.8. */
+int
+svn_utf_cstring_utf8_width(const char *cstr);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/master-passphrase/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/include/svn_wc.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/include/svn_wc.h (original)
+++ subversion/branches/master-passphrase/subversion/include/svn_wc.h Fri Jul 13 19:04:32 2012
@@ -1584,6 +1584,8 @@ typedef enum svn_wc_conflict_reason_t
/** Object is moved away. @since New in 1.8. */
svn_wc_conflict_reason_moved_away,
/** Object is moved away and was edited post-move. @since New in 1.8. */
+ /* ### Do we really need this. The edit state is on a different node,
+ which might just change while the tree conflict exists? */
svn_wc_conflict_reason_moved_away_and_edited,
/** Object is moved here. @since New in 1.8. */
svn_wc_conflict_reason_moved_here
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/checkout.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/checkout.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/checkout.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/checkout.c Fri Jul 13 19:04:32 2012
@@ -168,10 +168,7 @@ svn_client__checkout_internal(svn_revnum
allow_unver_obstructions,
TRUE /* adds_as_modification */,
FALSE, FALSE,
- use_sleep, ctx,
- ctx->conflict_func2,
- ctx->conflict_baton2,
- pool);
+ use_sleep, ctx, pool);
}
if (err)
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/client.h?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/client.h (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/client.h Fri Jul 13 19:04:32 2012
@@ -87,16 +87,18 @@ svn_client__get_revision_number(svn_revn
const svn_opt_revision_t *revision,
apr_pool_t *scratch_pool);
-/* Set *COPYFROM_PATH and *COPYFROM_REV to the path (without initial '/')
- and revision that served as the source of the copy from which PATH_OR_URL
- at REVISION was created, or NULL and SVN_INVALID_REVNUM (respectively) if
- PATH_OR_URL at REVISION was not the result of a copy operation. */
-svn_error_t *svn_client__get_copy_source(const char *path_or_url,
- const svn_opt_revision_t *revision,
- const char **copyfrom_path,
- svn_revnum_t *copyfrom_rev,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+/* Set *ORIGINAL_REPOS_RELPATH and *ORIGINAL_REVISION to the original location
+ that served as the source of the copy from which PATH_OR_URL at REVISION was
+ created, or NULL and SVN_INVALID_REVNUM (respectively) if PATH_OR_URL at
+ REVISION was not the result of a copy operation. */
+svn_error_t *
+svn_client__get_copy_source(const char **original_repos_relpath,
+ svn_revnum_t *original_revision,
+ const char *path_or_url,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/* Set *START_URL and *START_REVISION (and maybe *END_URL
and *END_REVISION) to the revisions and repository URLs of one
@@ -461,10 +463,6 @@ svn_client__make_local_parents(const cha
target which are missing from the working copy.
NOTE: You may not specify both INNERUPDATE and MAKE_PARENTS as true.
-
- Use CONFLICT_FUNC2 and CONFLICT_BATON2 instead of CTX->CONFLICT_FUNC2
- and CTX->CONFLICT_BATON2. If CONFLICT_FUNC2 is NULL, postpone all conflicts
- allowing the caller to perform post-update conflict resolution.
*/
svn_error_t *
svn_client__update_internal(svn_revnum_t *result_rev,
@@ -479,8 +477,6 @@ svn_client__update_internal(svn_revnum_t
svn_boolean_t innerupdate,
svn_boolean_t *timestamp_sleep,
svn_client_ctx_t *ctx,
- svn_wc_conflict_resolver_func2_t conflict_func2,
- void *conflict_baton2,
apr_pool_t *pool);
/* Checkout into LOCAL_ABSPATH a working copy of URL at REVISION, and (if not
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/externals.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/externals.c Fri Jul 13 19:04:32 2012
@@ -169,10 +169,7 @@ switch_dir_external(const char *local_ab
FALSE, FALSE, FALSE, TRUE,
FALSE, TRUE,
timestamp_sleep,
- ctx,
- ctx->conflict_func2,
- ctx->conflict_baton2,
- subpool));
+ ctx, subpool));
svn_pool_destroy(subpool);
goto cleanup;
}
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/log.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/log.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/log.c Fri Jul 13 19:04:32 2012
@@ -90,23 +90,24 @@ copyfrom_info_receiver(svn_location_segm
}
svn_error_t *
-svn_client__get_copy_source(const char *path_or_url,
+svn_client__get_copy_source(const char **original_repos_relpath,
+ svn_revnum_t *original_revision,
+ const char *path_or_url,
const svn_opt_revision_t *revision,
- const char **copyfrom_path,
- svn_revnum_t *copyfrom_rev,
svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_error_t *err;
copyfrom_info_t copyfrom_info = { 0 };
- apr_pool_t *sesspool = svn_pool_create(pool);
+ apr_pool_t *sesspool = svn_pool_create(scratch_pool);
svn_ra_session_t *ra_session;
svn_client__pathrev_t *at_loc;
copyfrom_info.is_first = TRUE;
copyfrom_info.path = NULL;
copyfrom_info.rev = SVN_INVALID_REVNUM;
- copyfrom_info.pool = pool;
+ copyfrom_info.pool = result_pool;
SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &at_loc,
path_or_url, NULL,
@@ -119,7 +120,7 @@ svn_client__get_copy_source(const char *
err = svn_ra_get_location_segments(ra_session, "", at_loc->rev, at_loc->rev,
SVN_INVALID_REVNUM,
copyfrom_info_receiver, ©from_info,
- pool);
+ scratch_pool);
svn_pool_destroy(sesspool);
@@ -133,14 +134,14 @@ svn_client__get_copy_source(const char *
svn_error_clear(err);
err = SVN_NO_ERROR;
- *copyfrom_path = NULL;
- *copyfrom_rev = SVN_INVALID_REVNUM;
+ *original_repos_relpath = NULL;
+ *original_revision = SVN_INVALID_REVNUM;
}
return svn_error_trace(err);
}
- *copyfrom_path = copyfrom_info.path;
- *copyfrom_rev = copyfrom_info.rev;
+ *original_repos_relpath = copyfrom_info.path;
+ *original_revision = copyfrom_info.rev;
return SVN_NO_ERROR;
}
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/merge.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/merge.c Fri Jul 13 19:04:32 2012
@@ -597,13 +597,15 @@ make_conflict_versions(const svn_wc_conf
right_relpath = svn_client__pathrev_relpath(merge_source->loc2,
pool);
- *left = svn_wc_conflict_version_create(
+ *left = svn_wc_conflict_version_create2(
merge_source->loc1->repos_root_url,
+ merge_source->loc1->repos_uuid,
svn_relpath_join(left_relpath, child, pool),
merge_source->loc1->rev, node_kind, pool);
- *right = svn_wc_conflict_version_create(
+ *right = svn_wc_conflict_version_create2(
merge_source->loc2->repos_root_url,
+ merge_source->loc2->repos_uuid,
svn_relpath_join(right_relpath, child, pool),
merge_source->loc2->rev, node_kind, pool);
@@ -661,13 +663,24 @@ tree_conflict(merge_cmd_baton_t *merge_b
svn_wc_conflict_reason_t reason)
{
const svn_wc_conflict_description2_t *existing_conflict;
+ svn_error_t *err;
if (merge_b->record_only || merge_b->dry_run)
return SVN_NO_ERROR;
- SVN_ERR(svn_wc__get_tree_conflict(&existing_conflict, merge_b->ctx->wc_ctx,
- victim_abspath, merge_b->pool,
- merge_b->pool));
+ err = svn_wc__get_tree_conflict(&existing_conflict, merge_b->ctx->wc_ctx,
+ victim_abspath, merge_b->pool,
+ merge_b->pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ existing_conflict = FALSE;
+ }
+
if (existing_conflict == NULL)
{
svn_wc_conflict_description2_t *conflict;
@@ -1363,12 +1376,19 @@ merge_dir_props_changed(svn_wc_notify_st
definition, 'svn merge' shouldn't touch any pristine data */
if (props->nelts)
{
+ const svn_wc_conflict_version_t *left;
+ const svn_wc_conflict_version_t *right;
svn_client_ctx_t *ctx = merge_b->ctx;
+ SVN_ERR(make_conflict_versions(&left, &right, local_abspath,
+ svn_node_dir, &merge_b->merge_source,
+ merge_b->target, merge_b->pool));
+
SVN_ERR(svn_wc_merge_props3(state, ctx->wc_ctx, local_abspath,
- NULL, NULL, original_props, props,
+ left, right,
+ original_props, props,
merge_b->dry_run,
- NULL, NULL, /* postpone conflicts */
+ ctx->conflict_func2, ctx->conflict_baton2,
ctx->cancel_func, ctx->cancel_baton,
scratch_pool));
}
@@ -1682,7 +1702,7 @@ merge_file_changed(svn_wc_notify_state_t
left, right,
original_props, prop_changes,
merge_b->dry_run,
- NULL, NULL, /* postpone conflicts */
+ ctx->conflict_func2, ctx->conflict_baton2,
ctx->cancel_func, ctx->cancel_baton,
scratch_pool));
}
@@ -1716,8 +1736,8 @@ merge_file_changed(svn_wc_notify_state_t
local_abspath, FALSE, scratch_pool));
/* Postpone all conflicts. */
- conflict_baton.wrapped_func = NULL;
- conflict_baton.wrapped_baton = NULL;
+ conflict_baton.wrapped_func = ctx->conflict_func2;
+ conflict_baton.wrapped_baton = ctx->conflict_baton2;
conflict_baton.conflicted_paths = &merge_b->conflicted_paths;
conflict_baton.pool = merge_b->pool;
@@ -1869,6 +1889,7 @@ merge_file_added(svn_wc_notify_state_t *
svn_stream_t *new_contents, *new_base_contents;
apr_hash_t *new_base_props, *new_props;
const svn_wc_conflict_description2_t *existing_conflict;
+ svn_error_t *err;
/* If this is a merge from the same repository as our
working copy, we handle adds as add-with-history.
@@ -1904,10 +1925,20 @@ merge_file_added(svn_wc_notify_state_t *
scratch_pool, scratch_pool));
}
- SVN_ERR(svn_wc__get_tree_conflict(&existing_conflict,
- merge_b->ctx->wc_ctx,
- mine_abspath, merge_b->pool,
- merge_b->pool));
+ err = svn_wc__get_tree_conflict(&existing_conflict,
+ merge_b->ctx->wc_ctx,
+ mine_abspath, merge_b->pool,
+ merge_b->pool);
+
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+ return svn_error_trace(err);
+
+ svn_error_clear(err);
+ existing_conflict = FALSE;
+ }
+
if (existing_conflict)
{
svn_boolean_t moved_here;
@@ -2396,6 +2427,10 @@ merge_dir_added(svn_wc_notify_state_t *s
reason));
if (tree_conflicted)
*tree_conflicted = TRUE;
+ if (skip)
+ *skip = TRUE;
+ if (skip_children)
+ *skip_children = TRUE;
if (state)
*state = svn_wc_notify_state_obstructed;
}
@@ -6548,8 +6583,9 @@ normalize_merge_sources_internal(apr_arr
{
svn_location_segment_t *segment2 =
APR_ARRAY_IDX(segments, 1, svn_location_segment_t *);
- const char *copyfrom_path, *segment_url;
- svn_revnum_t copyfrom_rev;
+ const char *segment_url;
+ const char *original_repos_relpath;
+ svn_revnum_t original_revision;
svn_opt_revision_t range_start_rev;
range_start_rev.kind = svn_opt_revision_number;
range_start_rev.value.number = segment2->range_start;
@@ -6557,24 +6593,23 @@ normalize_merge_sources_internal(apr_arr
segment_url = svn_path_url_add_component2(
source_loc->repos_root_url, segment2->path,
scratch_pool);
- SVN_ERR(svn_client__get_copy_source(segment_url,
- &range_start_rev,
- ©from_path,
- ©from_rev,
- ctx, result_pool));
+ SVN_ERR(svn_client__get_copy_source(&original_repos_relpath,
+ &original_revision,
+ segment_url,
+ &range_start_rev, ctx,
+ result_pool, scratch_pool));
/* Got copyfrom data? Fix up the first segment to cover
back to COPYFROM_REV + 1, and then prepend a new
segment covering just COPYFROM_REV. */
- if (copyfrom_path && SVN_IS_VALID_REVNUM(copyfrom_rev))
+ if (original_repos_relpath)
{
svn_location_segment_t *new_segment =
apr_pcalloc(result_pool, sizeof(*new_segment));
- /* Skip the leading '/'. */
- new_segment->path = (*copyfrom_path == '/')
- ? copyfrom_path + 1 : copyfrom_path;
- new_segment->range_start = copyfrom_rev;
- new_segment->range_end = copyfrom_rev;
- segment->range_start = copyfrom_rev + 1;
+
+ new_segment->path = original_repos_relpath;
+ new_segment->range_start = original_revision;
+ new_segment->range_end = original_revision;
+ segment->range_start = original_revision + 1;
svn_sort__array_insert(&new_segment, segments, 0);
}
}
@@ -9692,22 +9727,6 @@ merge_locked(const char *source1,
if (err)
return svn_error_trace(err);
- if (ctx->conflict_func2)
- {
- /* Resolve conflicts within the merge target. */
- SVN_ERR(svn_wc__resolve_conflicts(ctx->wc_ctx, target_abspath,
- depth,
- TRUE /* resolve_text */,
- "" /* resolve_prop (ALL props) */,
- TRUE /* resolve_tree */,
- svn_wc_conflict_choose_unspecified,
- ctx->conflict_func2,
- ctx->conflict_baton2,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- scratch_pool));
- }
-
return SVN_NO_ERROR;
}
@@ -11005,22 +11024,6 @@ merge_peg_locked(const char *source_path
/* We're done with our RA session. */
svn_pool_destroy(sesspool);
- if (ctx->conflict_func2)
- {
- /* Resolve conflicts within the merge target. */
- SVN_ERR(svn_wc__resolve_conflicts(ctx->wc_ctx, target_abspath,
- depth,
- TRUE /* resolve_text */,
- "" /* resolve_prop (ALL props) */,
- TRUE /* resolve_tree */,
- svn_wc_conflict_choose_unspecified,
- ctx->conflict_func2,
- ctx->conflict_baton2,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- scratch_pool));
- }
-
return svn_error_trace(err);
}
@@ -11674,22 +11677,6 @@ do_symmetric_merge_locked(const svn_clie
SVN_ERR(err);
- if (ctx->conflict_func2)
- {
- /* Resolve conflicts within the merge target. */
- SVN_ERR(svn_wc__resolve_conflicts(ctx->wc_ctx, target_abspath,
- depth,
- TRUE /* resolve_text */,
- "" /* resolve_prop (ALL props) */,
- TRUE /* resolve_tree */,
- svn_wc_conflict_choose_unspecified,
- ctx->conflict_func2,
- ctx->conflict_baton2,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- scratch_pool));
- }
-
return SVN_NO_ERROR;
}
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/mergeinfo.c Fri Jul 13 19:04:32 2012
@@ -2095,9 +2095,9 @@ svn_client_suggest_merge_sources(apr_arr
mergeinfo = NULL;
}
- SVN_ERR(svn_client__get_copy_source(path_or_url, peg_revision,
- ©from_path, ©from_rev,
- ctx, pool));
+ SVN_ERR(svn_client__get_copy_source(©from_path, ©from_rev,
+ path_or_url, peg_revision, ctx,
+ pool, pool));
if (copyfrom_path)
{
APR_ARRAY_PUSH(list, const char *) =
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/switch.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/switch.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/switch.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/switch.c Fri Jul 13 19:04:32 2012
@@ -237,7 +237,7 @@ switch_internal(svn_revnum_t *result_rev
server_supports_depth,
diff3_cmd, preserved_exts,
svn_client__dirent_fetcher, &dfb,
- NULL, NULL, /* postpone conflicts */
+ ctx->conflict_func2, ctx->conflict_baton2,
NULL, NULL,
ctx->cancel_func, ctx->cancel_baton,
ctx->notify_func2, ctx->notify_baton2,
@@ -323,22 +323,6 @@ switch_internal(svn_revnum_t *result_rev
if (result_rev)
*result_rev = revnum;
- if (ctx->conflict_func2)
- {
- /* Resolve conflicts within the switched target. */
- SVN_ERR(svn_wc__resolve_conflicts(ctx->wc_ctx, local_abspath,
- depth,
- TRUE /* resolve_text */,
- "" /* resolve_prop (ALL props) */,
- TRUE /* resolve_tree */,
- svn_wc_conflict_choose_unspecified,
- ctx->conflict_func2,
- ctx->conflict_baton2,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- pool));
- }
-
return SVN_NO_ERROR;
}
Modified: subversion/branches/master-passphrase/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_client/update.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_client/update.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_client/update.c Fri Jul 13 19:04:32 2012
@@ -185,8 +185,6 @@ update_internal(svn_revnum_t *result_rev
svn_boolean_t *timestamp_sleep,
svn_boolean_t notify_summary,
svn_client_ctx_t *ctx,
- svn_wc_conflict_resolver_func2_t conflict_func2,
- void *conflict_baton2,
apr_pool_t *pool)
{
const svn_delta_editor_t *update_editor;
@@ -376,7 +374,7 @@ update_internal(svn_revnum_t *result_rev
clean_checkout,
diff3_cmd, preserved_exts,
svn_client__dirent_fetcher, &dfb,
- conflict_func2, conflict_baton2,
+ ctx->conflict_func2, ctx->conflict_baton2,
NULL, NULL,
ctx->cancel_func, ctx->cancel_baton,
ctx->notify_func2, ctx->notify_baton2,
@@ -467,8 +465,6 @@ svn_client__update_internal(svn_revnum_t
svn_boolean_t innerupdate,
svn_boolean_t *timestamp_sleep,
svn_client_ctx_t *ctx,
- svn_wc_conflict_resolver_func2_t conflict_func2,
- void *conflict_baton2,
apr_pool_t *pool)
{
const char *anchor_abspath, *lockroot_abspath;
@@ -518,8 +514,7 @@ svn_client__update_internal(svn_revnum_t
&peg_revision, svn_depth_empty, FALSE,
ignore_externals, allow_unver_obstructions,
adds_as_modification, timestamp_sleep,
- FALSE, ctx, conflict_func2, conflict_baton2,
- pool);
+ FALSE, ctx, pool);
if (err)
goto cleanup;
anchor_abspath = missing_parent;
@@ -543,7 +538,7 @@ svn_client__update_internal(svn_revnum_t
&peg_revision, depth, depth_is_sticky,
ignore_externals, allow_unver_obstructions,
adds_as_modification, timestamp_sleep,
- TRUE, ctx, conflict_func2, conflict_baton2, pool);
+ TRUE, ctx, pool);
cleanup:
err = svn_error_compose_create(
err,
@@ -604,7 +599,6 @@ svn_client_update4(apr_array_header_t **
make_parents,
FALSE, &sleep,
ctx,
- NULL, NULL, /* postpone conflicts */
iterpool);
if (err)
@@ -629,44 +623,10 @@ svn_client_update4(apr_array_header_t **
if (result_revs)
APR_ARRAY_PUSH(*result_revs, svn_revnum_t) = result_rev;
}
+ svn_pool_destroy(iterpool);
if (sleep)
svn_io_sleep_for_timestamps((paths->nelts == 1) ? path : NULL, pool);
- if (ctx->conflict_func2)
- {
- for (i = 0; i < paths->nelts; ++i)
- {
- svn_error_t *err = SVN_NO_ERROR;
- const char *local_abspath;
-
- svn_pool_clear(iterpool);
- path = APR_ARRAY_IDX(paths, i, const char *);
-
- /* Resolve conflicts within the updated subtree. */
- SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, iterpool));
- err = svn_wc__resolve_conflicts(ctx->wc_ctx, local_abspath, depth,
- TRUE /* resolve_text */,
- "" /* resolve_prop (ALL props) */,
- TRUE /* resolve_tree */,
- svn_wc_conflict_choose_unspecified,
- ctx->conflict_func2,
- ctx->conflict_baton2,
- ctx->cancel_func, ctx->cancel_baton,
- ctx->notify_func2, ctx->notify_baton2,
- iterpool);
- if (err)
- {
- if ((err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
- && (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND))
- return svn_error_trace(err);
-
- svn_error_clear(err);
- }
- }
- }
-
- svn_pool_destroy(iterpool);
-
return SVN_NO_ERROR;
}
Modified: subversion/branches/master-passphrase/subversion/libsvn_delta/svndiff.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_delta/svndiff.c?rev=1361339&r1=1361338&r2=1361339&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_delta/svndiff.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_delta/svndiff.c Fri Jul 13 19:04:32 2012
@@ -32,6 +32,7 @@
#include <zlib.h>
#include "private/svn_error_private.h"
+#include "private/svn_delta_private.h"
/* The zlib compressBound function was not exported until 1.2.0. */
#if ZLIB_VERNUM >= 0x1200
@@ -129,11 +130,12 @@ append_encoded_int(svn_stringbuf_t *head
svn_stringbuf_appendbytes(header, (const char *)buf, p - buf);
}
-/* If IN is a string that is >= MIN_COMPRESS_SIZE, zlib compress it and
- place the result in OUT, with an integer prepended specifying the
- original size. If IN is < MIN_COMPRESS_SIZE, or if the compressed
- version of IN was no smaller than the original IN, OUT will be a copy
- of IN with the size prepended as an integer. */
+/* If IN is a string that is >= MIN_COMPRESS_SIZE and the COMPRESSION_LEVEL
+ is not SVN_DELTA_COMPRESSION_LEVEL_NONE, zlib compress it and places the
+ result in OUT, with an integer prepended specifying the original size.
+ If IN is < MIN_COMPRESS_SIZE, or if the compressed version of IN was no
+ smaller than the original IN, OUT will be a copy of IN with the size
+ prepended as an integer. */
static svn_error_t *
zlib_encode(const char *data,
apr_size_t len,
@@ -143,6 +145,7 @@ zlib_encode(const char *data,
unsigned long endlen;
apr_size_t intlen;
+ svn_stringbuf_setempty(out);
append_encoded_int(out, len);
intlen = out->len;
@@ -441,12 +444,13 @@ decode_size(apr_size_t *val,
the original size, and that if encoded size == original size, that the
remaining data is not compressed.
In that case, we will simply return pointer into IN as data pointer for
- OUT. The caller is expected not to modify the contents of OUT.
+ OUT, COPYLESS_ALLOWED has been set. The, the caller is expected not to
+ modify the contents of OUT.
An error is returned if the decoded length exceeds the given LIMIT.
*/
static svn_error_t *
zlib_decode(const unsigned char *in, apr_size_t inLen, svn_stringbuf_t *out,
- apr_size_t limit)
+ apr_size_t limit, svn_boolean_t copyless_allowed)
{
apr_size_t len;
const unsigned char *oldplace = in;
@@ -465,12 +469,22 @@ zlib_decode(const unsigned char *in, apr
inLen -= (in - oldplace);
if (inLen == len)
{
- /* "in" is no longer used but the memory remains allocated for
- * at least as long as "out" will be used by the caller.
- */
- out->data = (char *)in;
- out->len = len;
- out->blocksize = len; /* sic! */
+ if (copyless_allowed)
+ {
+ /* "in" is no longer used but the memory remains allocated for
+ * at least as long as "out" will be used by the caller.
+ */
+ out->data = (char *)in;
+ out->len = len;
+ out->blocksize = len; /* sic! */
+ }
+ else
+ {
+ svn_stringbuf_ensure(out, len);
+ memcpy(out->data, in, len);
+ out->data[len] = 0;
+ out->len = len;
+ }
return SVN_NO_ERROR;
}
@@ -647,9 +661,9 @@ decode_window(svn_txdelta_window_t *wind
/* these may in fact simply return references to insend */
SVN_ERR(zlib_decode(insend, newlen, ndout,
- SVN_DELTA_WINDOW_SIZE));
+ SVN_DELTA_WINDOW_SIZE, TRUE));
SVN_ERR(zlib_decode(data, insend - data, instout,
- MAX_INSTRUCTION_SECTION_LEN));
+ MAX_INSTRUCTION_SECTION_LEN, TRUE));
newlen = ndout->len;
data = (unsigned char *)instout->data;
@@ -987,3 +1001,22 @@ svn_txdelta_skip_svndiff_window(apr_file
offset = inslen + newlen;
return svn_io_file_seek(file, APR_CUR, &offset, pool);
}
+
+
+svn_error_t *
+svn__compress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ int compression_level)
+{
+ return zlib_encode(in->data, in->len, out,
+ compression_level);
+}
+
+svn_error_t *
+svn__decompress(svn_string_t *in,
+ svn_stringbuf_t *out,
+ apr_size_t limit)
+{
+ return zlib_decode((const unsigned char*)in->data, in->len, out, limit,
+ FALSE);
+}