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, &copyfrom_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,
-                                                  &copyfrom_path,
-                                                  &copyfrom_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,
-                                      &copyfrom_path, &copyfrom_rev,
-                                      ctx, pool));
+  SVN_ERR(svn_client__get_copy_source(&copyfrom_path, &copyfrom_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);
+}