subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dan...@apache.org
Subject svn commit: r933863 [1/5] - in /subversion/branches/svn-patch-improvements: ./ notes/commit-access-templates/ notes/wc-ng/ subversion/bindings/javahl/native/ subversion/bindings/swig/ruby/svn/ subversion/bindings/swig/ruby/test/ subversion/include/ sub...
Date Wed, 14 Apr 2010 06:51:03 GMT
Author: dannas
Date: Wed Apr 14 06:51:00 2010
New Revision: 933863

URL: http://svn.apache.org/viewvc?rev=933863&view=rev
Log:
Sync svn-patch-improvements branch with trunk.

Added:
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/conflicts.h
      - copied unchanged from r933862, subversion/trunk/subversion/libsvn_wc/conflicts.h
Modified:
    subversion/branches/svn-patch-improvements/   (props changed)
    subversion/branches/svn-patch-improvements/build.conf
    subversion/branches/svn-patch-improvements/notes/commit-access-templates/contrib-committer.tmpl
    subversion/branches/svn-patch-improvements/notes/commit-access-templates/full-committer.tmpl
    subversion/branches/svn-patch-improvements/notes/commit-access-templates/partial-committer.tmpl
    subversion/branches/svn-patch-improvements/notes/wc-ng/conflict-storage
    subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.cpp
    subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.h
    subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/SVNClient.cpp
    subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.cpp
    subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.h
    subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/svn/delta.rb
    subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/test/test_delta.rb
    subversion/branches/svn-patch-improvements/subversion/include/private/svn_wc_private.h
    subversion/branches/svn-patch-improvements/subversion/include/svn_editor.h
    subversion/branches/svn-patch-improvements/subversion/include/svn_props.h
    subversion/branches/svn-patch-improvements/subversion/include/svn_repos.h
    subversion/branches/svn-patch-improvements/subversion/include/svn_wc.h
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/blame.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/cat.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/commit.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/delete.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/deprecated.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/export.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/externals.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/merge.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/mergeinfo.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/patch.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/prop_commands.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/status.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/switch.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_client/update.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_ra_neon/lock.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_repos/deprecated.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_repos/dump.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_repos/reporter.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_subr/skel.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_crawler.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_ops.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/crop.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/deprecated.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/entries.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/entries.h
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/lock.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/log.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/log.h
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/merge.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/node.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/props.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/questions.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/revision_status.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/status.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/update_editor.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/util.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/wc-queries.sql
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/wc.h
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/wc_db.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/wc_db.h
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/workqueue.c
    subversion/branches/svn-patch-improvements/subversion/libsvn_wc/workqueue.h
    subversion/branches/svn-patch-improvements/subversion/mod_authz_svn/mod_authz_svn.c
    subversion/branches/svn-patch-improvements/subversion/po/zh_CN.po
    subversion/branches/svn-patch-improvements/subversion/svn/cl.h
    subversion/branches/svn-patch-improvements/subversion/svn/status-cmd.c
    subversion/branches/svn-patch-improvements/subversion/svn/status.c
    subversion/branches/svn-patch-improvements/subversion/svnsync/main.c
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/authz_tests.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/depth_tests.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/merge_tests.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/patch_tests.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/schedule_tests.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/svnsync_tests.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/svntest/main.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/svntest/sandbox.py
    subversion/branches/svn-patch-improvements/subversion/tests/cmdline/trans_tests.py
    subversion/branches/svn-patch-improvements/subversion/tests/libsvn_wc/db-test.c
    subversion/branches/svn-patch-improvements/tools/dev/wc-ng/count-progress.py

Propchange: subversion/branches/svn-patch-improvements/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 14 06:51:00 2010
@@ -33,4 +33,4 @@
 /subversion/branches/tc_url_rev:874351-874483
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
-/subversion/trunk:918519-931975
+/subversion/trunk:918519-933862

Modified: subversion/branches/svn-patch-improvements/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/build.conf?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/build.conf (original)
+++ subversion/branches/svn-patch-improvements/build.conf Wed Apr 14 06:51:00 2010
@@ -1100,6 +1100,11 @@ type = project
 path = build/win32
 libs = javahl-java javahl-javah libsvnjavahl
 
+[__JAVAHL_TESTS__]
+type = project
+path = build/win32
+libs = __JAVAHL__ javahl-tests javahl-compat-tests
+
 # ----------------------------------------------------------------------------
 # Contrib and tools
 

Modified: subversion/branches/svn-patch-improvements/notes/commit-access-templates/contrib-committer.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/notes/commit-access-templates/contrib-committer.tmpl?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/notes/commit-access-templates/contrib-committer.tmpl (original)
+++ subversion/branches/svn-patch-improvements/notes/commit-access-templates/contrib-committer.tmpl Wed Apr 14 06:51:00 2010
@@ -7,7 +7,7 @@ this template is based.
 --------------------8-<-------cut-here---------8-<-----------------------
 
 To: J. Random <jrandom@remember_to_fix_the_recipient_please.com>
-CC: svn-full-committers@red-bean.com
+CC: private{AT}subversion.apache.org
 Subject: Subversion commit access for XXXXX
 
 J. Random,

Modified: subversion/branches/svn-patch-improvements/notes/commit-access-templates/full-committer.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/notes/commit-access-templates/full-committer.tmpl?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/notes/commit-access-templates/full-committer.tmpl (original)
+++ subversion/branches/svn-patch-improvements/notes/commit-access-templates/full-committer.tmpl Wed Apr 14 06:51:00 2010
@@ -9,13 +9,13 @@ fool the spam address harvesters.
 
 From: "Some Committer" <a.committer@wherever.example.com>
 To: New Full Committer <new.committer@wherever.new.committers.live>
-Cc: svn-full-committers{AT}red-bean.com
+Cc: private{AT}subversion.apache.org
 Subject: Full commit access to Subversion
 
 Hi New Full Committer,
 
 The other committers and I would like to offer you full commit access
-to Subversion.  
+to Subversion.
 
 If you already have partial commit access, you can accept this offer
 by simply replying to this mail.  We'll update the COMMITTERS file (or
@@ -30,7 +30,7 @@ modify the COMMITTERS file appropriately
 of your new username and password.
 
 Please remember to subscribe to the private (PMC) mailing list by
-emailing <private-subscribe@subversion.apache.org>.
+emailing <private-subscribe{AT}subversion.apache.org>.
 
 Remember that you can still post patches for review before committing,
 when you want to.  Commit access just means that you can rely on your

Modified: subversion/branches/svn-patch-improvements/notes/commit-access-templates/partial-committer.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/notes/commit-access-templates/partial-committer.tmpl?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/notes/commit-access-templates/partial-committer.tmpl (original)
+++ subversion/branches/svn-patch-improvements/notes/commit-access-templates/partial-committer.tmpl Wed Apr 14 06:51:00 2010
@@ -7,7 +7,7 @@ template to fool the spam address harves
 
 From: "Some Committer" <a.committer@wherever.example.com>
 To: New Partial Committer <new.committer@wherever.new.committers.live>
-Cc: svn-full-committers{AT}red-bean.com
+Cc: private{AT}subversion.apache.org
 Subject: Commit access for Subversion FROBLINGS area
 
 Hi New Partial Committer,

Modified: subversion/branches/svn-patch-improvements/notes/wc-ng/conflict-storage
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/notes/wc-ng/conflict-storage?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/notes/wc-ng/conflict-storage (original)
+++ subversion/branches/svn-patch-improvements/notes/wc-ng/conflict-storage Wed Apr 14 06:51:00 2010
@@ -10,7 +10,10 @@ are inside), or NULL (meaning no conflic
 
 The conflict skel has the form:
 
-  ((KIND OPERATION KIND-SPECIFIC) (KIND OPERATION KIND-SPECIFIC) ...)
+  (OPERATION (KIND KIND-SPECIFIC) (KIND KIND-SPECIFIC) ...)
+
+OPERATION indicates the operation which caused the conflict(s) and is
+detailed below.
 
 KIND indicates the kind of conflict description that follows and is one
 of:
@@ -21,28 +24,17 @@ of:
   "prop" - meaning a "normal" property conflict, with left/right/mine full
     values saved;
   "tree" - meaning a tree conflict;
-  "reject" - meaning a text conflict for a single hunk of text, with the source
-    being a patch file (rather than left/right full texts), and with a
-    "reject" file being saved (?);
+  "reject" - meaning a text conflict for a single hunk of unidiff text,
+    with the source being a patch file (rather than left/right full texts),
+    and with a "reject" file being saved containing the unidiff text;
   "obstructed" - meaning ### TODO
 
-OPERATION indicates the operation which caused the conflict and is
-detailed below.
-
 KIND-SPECIFIC is specific to each KIND, and is detailed below.
 
 There are restrictions on what mixture of conflicts can meaningfully be
 recorded - e.g. there must not be two "text" nor one "text" and one
-"reject".  These restrictions are implied but not spelled out here.
-
-
-### stsp: need conflict data format version info inside skel, too?
-###   or do we bump the entire wc.db format number if we need to tweak
-###   this?
-###
-### gstein sez: the KIND can become "text-2" or somesuch if we need to
-###   radically alter the kind-specific data. but we can easily append
-###   information to the skel without much problem.
+"reject".  These restrictions are implied by the nature of operations
+creating the conflicts but not spelled out here.
 
 If the 'conflict_data' column is not NULL, then at least one
 KIND of conflict skel must exist, describing the conflict(s).
@@ -62,8 +54,8 @@ Operation skel
 
 Meaning:  The Operation skel indicates what kind of operation was being
 performed that resulted in a conflict, including the format and content
-(or reference to content) of the diff that was being applied to this
-node.
+(or reference to content) of the conflicting change that was being
+applied to this node.
 
 The OPERATION skel has the following form:
 
@@ -74,7 +66,7 @@ NAME is one of:
   "update" - meaning a 3-way merge as in "svn update";
   "switch" - meaning a 3-way merge as in "svn switch";
   "merge" - meaning a 3(4?)-way merge as in "svn merge";
-  "patch" - meaning application of a context-diff, as in "svn patch".
+  "patch" - meaning application of a unidiff patch, as in "svn patch".
 
 OPERATION-SPECIFIC is as follows:
 
@@ -85,6 +77,14 @@ To record an "update" operation, the ske
   BASE_REV is the base revision prior to the update.
   TARGET_REV is the revision being updated to.
 
+### sbutler: What about mixed-revision working copies?  Let's record
+### the equivalent of svn_wc_revision_status_t, plus the target rev: 
+###
+###   ("update" MIN_REV MAX_REV SWITCHED MODIFIED TARGET_REV)
+###
+### Otherwise, the user may get the mistaken impression that the local
+### tree is entirely at the URL and revision of the victim dir.
+
 For "switch", the skel has the form:
 
   ("switch" BASE_REV TARGET_REV REPOS_RELPATH)
@@ -94,47 +94,28 @@ For "switch", the skel has the form:
 
 For "merge", the skel has the form:
 
-  ("merge" LEFT_REV RIGHT_REV
-   (LEFT_REPOS_UUID LEFT_REPOS_ROOT_URL LEFT_REPOS_RELPATH LEFT_PEG_REV)
-   (RIGHT_REPOS_UUID RIGHT_REPOS_ROOT_URL RIGHT_REPOS_RELPATH RIGHT_PEG_REV) )
+  ("merge" LEFT_REV RIGHT_REV REPOS_UUID REPOS_ROOT_URL
+   (LEFT_REPOS_RELPATH LEFT_PEG_REV)
+   (RIGHT_REPOS_RELPATH RIGHT_PEG_REV) )
 
   LEFT_REV is the merge-left revision, and RIGHT_REV is the merge-right
     revision of a continuous revision range which was merged (merge tracking
     might split a merge up into multiple merges of continuous revision ranges).
 
-  {LEFT,RIGHT}_REPOS_UUID is the UUID of the repository the {left,right}
-    version of the item comes from, in order to recognize merges from foreign
-    repositories.
+  REPOS_UUID is the UUID of the repository being merged from, in order to
+    recognize merges from foreign repositories.
 
-  {LEFT,RIGHT}_REPOS_ROOT_URL is the repository root URL the {left,right}
-    version of the item comes from.
+  REPOS_ROOT_URL is the repository root URL the repository being merged from.
 
   {LEFT,RIGHT}_REPOS_RELPATH is the path in the repository of the {left,right}
     version of the item.
 
-  {LEFT,RIGHT}_PEG_REV is the peg revision of the {left,right} version
-    of the item.
-
-### JAF: Don't want both "rev" and "peg-rev" separately: that's recording too
-###   much UI.  Just have the revision in which to find the repos-relpath.
-### stsp: Peg revs aren't just UI. You need them to uniquely identify an item
-###   in the repository history. Here's an example for why we need them:
-###   Say I'm doing a merge of range rA-rB, and within this range,
-###   file foo.c is replaced in rN, and later renamed to bar.c in rM.
-###   Of course, A < N < M < B.
-###   (Note: The following highly depends on how editorv2 drivers will be
-###    implemented, so I may be off-track here.)
-###   During the merge with editorv2, the replace and rename result in the
-###   addition of foo.c@N (replacing foo.c@A), and the move of foo.c@N
-###   to bar.c. Let's say foo.c@A has edits local to the merge target.
-###   I'd like flag a edit/replaced tree conflict, and record foo.c@rA as
-###   the 'left' version of the conflicting item, and foo.c@rN as the 'right'
-###   version. Recording foo.c@B is wrong because foo.c does not exist at
-###   that revision, so being able to record just two revisions won't work.
-###   We could also record bar.c@B as the 'right' version, but this doesn't
-###   feel right since the rename does not really conflict with the edits.
-###   The item which is being renamed is not the one which was edited -- it
-###   just happened to live at the same path at a different time.
+  {LEFT,RIGHT}_CONFLICT_REV is the revision in which to find the
+    {left,right} version of the item which caused the conflict.
+    These are usually LEFT_REV or RIGHT_REV, but in some cases they
+    may differ (a simple example is if a file was replaced in revision rX
+    somewhere between LEFT_REV and RIGHT_REV, and the conflict is due to
+    events which happened between LEFT_REV and rX).
 
 For "patch", the skel has the form:
 
@@ -151,11 +132,15 @@ Text conflicts
 Text conflicts only exist on files. The following skel represents the
 "text" KIND of conflict:
 
-  ("text" OPERATION LEFT_SHA1 RIGHT_SHA1 MINE_SHA1)
+  ("text" ORIGINAL_SHA1 MINE_SHA1 INCOMING_SHA1)
 
-{LEFT,RIGHT,MINE}_SHA1 are sha1 checksums of the full texts of
-the {left,right,mine} version of the file. File version's content
-can be obtained from the pristine store.
+{ORIGINAL,MINE}_SHA1 are SHA1 checksums of the full texts of
+the {original (BASE), mine (WORKING)} version of the file.
+
+INCOMING_SHA1 is the SHA1 checksum of the incoming version of the file.
+### Need INCOMING_{LEFT,RIGHT}_SHA1 for 4-way merge?
+
+File version's content can be obtained from the pristine store.
 
 ### BH: We need some marker here, but these values must also be stored
 ###     in the older_checksum, left_checksum, right_checksum colums of ACTUAL
@@ -175,15 +160,19 @@ There can be one or more property confli
 by one or more "prop" KIND conflicts. Each "prop" conflict has the
 following form:
 
-  ("prop" OPERATION
-   PROPERTY_NAME ([LEFT_VALUE]) ([RIGHT_VALUE]) ([MINE_VALUE]))
+  ("prop" PROPERTY_NAME ([ORIGINAL_VALUE]) ([MINE_VALUE]) ([INCOMING_VALUE]))
 
 PROPERTY_NAME is the name of the property, such as "svn:eol-style".
 
-Each property value ({LEFT,RIGHT,MINE}_VALUE) is represented as an
+Each property value ({ORIGINAL,MINE,INCOMING}_VALUE) is represented as an
 empty list indicating the property did not exist in that version, or a
 1-item list containing the particular value.
 
+### stsp: What's the size limit of a prop value?
+### HKW: In theory, there isn't one.  In practice, we used to caution people
+###   against having too large of props, but I don't know if that is
+###   true anymore.
+
 
 Tree conflicts
 --------------
@@ -191,26 +180,40 @@ Tree conflicts
 Tree conflicts exist on files or directories.
 
 ### JAF: And symlinks, I presume - or, if not, why not?
+### stsp: Symlinks are resolved before retreiving conflict information.,
 
 The following information is stored if there is a tree conflict on the node:
 
-  ("tree" OPERATION
-    INCOMING_CHANGE LOCAL_CHANGE
-    LEFT_NODE_KIND RIGHT_NODE_KIND
-    LEFT_SHA1 RIGHT_SHA1 MINE_SHA1)
+  ("tree" LOCAL_STATE INCOMING_STATE)
+
+  LOCAL_STATE := (LOCAL_CHANGE ORIGINAL_NODE_KIND MINE_NODE_KIND
+                  [ORIGINAL_SHA1 MINE_SHA1])
+  INCOMING_STATE := (INCOMING_CHANGE INCOMING_NODE_KIND [INCOMING_SHA1])
+
+LOCAL_CHANGE is the local change which conflicted with the
+incoming change during the operation. Possible values are "edit", "add",
+"delete", "rename", "replace", "obstructed", "missing", and "unversioned"
+(### possibly collapse "unversioned" with "obstructed"?).
+
+ORIGINAL_NODE_KIND is the kind of the node in the BASE tree.
+MINE_NODE_KIND is the kind of the node from the WORKING tree at the
+time the conflict was flagged.
 
 INCOMING_CHANGE is the incoming change which conflicted with the
 local change during the operation. Possible values are "edit", "add",
 "delete", "rename", and "replace".
 
-LOCAL_CHANGE is the local change which conflicted with the
-incoming change during the operation. Possible values are "edit", "add",
-"delete", "rename", "replace", "obstructed", and "missing".
+The *_SHA1 sum fields are only present if {ORIGINAL,MINE,INCOMING}_NODE_KIND
+is "file".
 
-If the {left,right,mine} version of the item is a file and the content
-of that file is known, {LEFT,RIGHT,MINE}_SHA1 is the sha1 checksum of the
-full text of the {left,right,mine} version of the file. The file version's
-content can be obtained from the pristine store.
+ORIGINAL_SHA1 is the SHA1 of the BASE version of the tree conflict victim
+file in the working copy. MINE_SHA1 is the SHA1 of the WORKING version
+of the tree conflict victim file as of the time the conflict was flagged.
+
+If INCOMING_KIND is "file", INCOMING_SHA1 is the SHA1 of the file
+which the operation was attempting to install in the working copy.
+
+The file version's content can be obtained from the pristine store.
 
 ### BH: We need to duplicate the sha1 values in the older_checksum,
 ###     left_checksum, right_checksum columns of ACTUAL
@@ -221,16 +224,6 @@ content can be obtained from the pristin
 ###     (We should keep the history of the node valid via replace vs update)
 ### stsp: I don't really understand your question. Can you be more specific?
 
-### gstein suggests:
-###
-###   ("tree" OPERATION LOCAL_STATE INCOMING_STATE)
-###
-###   LOCAL_STATE := (LOCAL_CHANGE NODE_KIND [ORIGINAL_SHA1 MINE_SHA1])
-###   INCOMING_STATE := (INCOMING_CHANGE NODE_KIND [INCOMING_SHA1])
-###
-### this groups the data better, and has nice (optional) placeholders
-### for the SHA1 values when NODE_KIND is "file"
-
 
 (Unversioned) Obstructions
 --------------------------
@@ -242,7 +235,7 @@ the BASE_NODE table.
 There is no particular data which needs to be recorded for an
 obstruction. Thus, the "obstructed" conflict skel has the form:
 
-  ("obstructed" OPERATION)
+  ("obstructed")
 
 
 Reject conflicts
@@ -253,8 +246,7 @@ is the failure to find a match for a hun
 There can be one or more reject conflicts on a node. Each "reject" conflict
 has the following form:
 
-  ("reject" OPERATION
-    HUNK_ORIGINAL_OFFSET HUNK_ORIGINAL_LEN
+  ("reject" HUNK_ORIGINAL_OFFSET HUNK_ORIGINAL_LEN
     HUNK_MODIFIED_OFFSET HUNK_MODIFIED_LENGTH
     REJECT_DIFF_SHA1)
 

Modified: subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.cpp?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.cpp Wed Apr 14 06:51:00 2010
@@ -431,7 +431,7 @@ CreateJ::Lock(const svn_lock_t *lock)
 }
 
 jobject
-CreateJ::Status(const char *local_abspath, const svn_wc_status2_t *status)
+CreateJ::Status(const char *local_abspath, const svn_wc_status3_t *status)
 {
   JNIEnv *env = JNIUtil::getEnv();
 

Modified: subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.h?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/CreateJ.h Wed Apr 14 06:51:00 2010
@@ -54,7 +54,7 @@ class CreateJ
   Lock(const svn_lock_t *lock);
 
   static jobject
-  Status(const char *local_abspath, const svn_wc_status2_t *status);
+  Status(const char *local_abspath, const svn_wc_status3_t *status);
 
   static jobject
   NotifyInformation(const svn_wc_notify_t *notify);

Modified: subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/SVNClient.cpp?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/SVNClient.cpp Wed Apr 14 06:51:00 2010
@@ -1693,7 +1693,7 @@ cancel(void *baton)
 static svn_error_t *
 analyze_status(void *baton,
                const char *local_abspath,
-               const svn_wc_status2_t *status,
+               const svn_wc_status3_t *status,
                apr_pool_t *pool)
 {
     struct version_status_baton *sb = (version_status_baton *)baton;

Modified: subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.cpp?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.cpp (original)
+++ subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.cpp Wed Apr 14 06:51:00 2010
@@ -51,7 +51,7 @@ StatusCallback::~StatusCallback()
 svn_error_t *
 StatusCallback::callback(void *baton,
                          const char *local_abspath,
-                         const svn_wc_status2_t *status,
+                         const svn_wc_status3_t *status,
                          apr_pool_t *pool)
 {
   if (baton)
@@ -65,7 +65,7 @@ StatusCallback::callback(void *baton,
  */
 svn_error_t *
 StatusCallback::doStatus(const char *local_abspath,
-                         const svn_wc_status2_t *status)
+                         const svn_wc_status3_t *status)
 {
   JNIEnv *env = JNIUtil::getEnv();
 

Modified: subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.h?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.h (original)
+++ subversion/branches/svn-patch-improvements/subversion/bindings/javahl/native/StatusCallback.h Wed Apr 14 06:51:00 2010
@@ -42,12 +42,12 @@ class StatusCallback
 
   static svn_error_t* callback(void *baton,
                                const char *local_abspath,
-                               const svn_wc_status2_t *status,
+                               const svn_wc_status3_t *status,
                                apr_pool_t *pool);
 
  protected:
   svn_error_t *doStatus(const char *local_abspath,
-                        const svn_wc_status2_t *status);
+                        const svn_wc_status3_t *status);
 
  private:
   /**

Modified: subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/svn/delta.rb
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/svn/delta.rb?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/svn/delta.rb (original)
+++ subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/svn/delta.rb Wed Apr 14 06:51:00 2010
@@ -73,7 +73,7 @@ module Svn
       result = Delta.txdelta_apply_wrapper(source, target, error_info)
       handler, handler_baton = result
       handler.baton = handler_baton
-      handler
+      [handler,nil]
     end
 
     def parse_svndiff(error_on_early_close=true, &handler)

Modified: subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/test/test_delta.rb
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/test/test_delta.rb?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/test/test_delta.rb (original)
+++ subversion/branches/svn-patch-improvements/subversion/bindings/swig/ruby/test/test_delta.rb Wed Apr 14 06:51:00 2010
@@ -144,17 +144,18 @@ class SvnDeltaTest < Test::Unit::TestCas
     apply_source = StringIO.new(source_text)
     apply_result = StringIO.new("")
 
-    handler = Svn::Delta.apply(apply_source, apply_result)
+    handler, digest = Svn::Delta.apply(apply_source, apply_result)
+    assert_nil(digest)
     handler.send(stream)
     apply_result.rewind
     assert_equal(target_text, apply_result.read)
 
-    handler = Svn::Delta.apply(apply_source, apply_result)
+    handler, digest = Svn::Delta.apply(apply_source, apply_result)
     handler.send(target_text)
     apply_result.rewind
     assert_equal(target_text * 2, apply_result.read)
 
-    handler = Svn::Delta.apply(apply_source, apply_result)
+    handler, digest = Svn::Delta.apply(apply_source, apply_result)
     handler.send(StringIO.new(target_text))
     apply_result.rewind
     assert_equal(target_text * 3, apply_result.read)

Modified: subversion/branches/svn-patch-improvements/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/include/private/svn_wc_private.h?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/svn-patch-improvements/subversion/include/private/svn_wc_private.h Wed Apr 14 06:51:00 2010
@@ -130,7 +130,7 @@ svn_wc__versioned_file_modcheck(svn_bool
  * svn_wc_get_status_editor4().
  */
 svn_boolean_t
-svn_wc__is_sendable_status(const svn_wc_status2_t *status,
+svn_wc__is_sendable_status(const svn_wc_status3_t *status,
                            svn_boolean_t no_ignore,
                            svn_boolean_t get_all);
 
@@ -289,6 +289,14 @@ svn_wc_conflict_description2_t *
 svn_wc__cd_to_cd2(const svn_wc_conflict_description_t *conflict,
                   apr_pool_t *result_pool);
 
+/*
+ * Convert from svn_wc_status3_t to svn_wc_status2_t.
+ * Allocate the result in RESULT_POOL.
+ */
+svn_wc_status2_t *
+svn_wc__status2_from_3(const svn_wc_status3_t *status, 
+                       apr_pool_t *result_pool);
+
 
 /**
  * Fetch the absolute paths of all the working children of @a dir_abspath
@@ -476,6 +484,12 @@ svn_wc__node_is_status_added(svn_boolean
  * Get the base revision of @a local_abspath using @a wc_ctx.  If
  * @a local_abspath is not in the working copy, return
  * @c SVN_ERR_WC_PATH_NOT_FOUND.
+ *
+ * In @a *base_revision, return the revision of the revert-base, i.e. the
+ * revision that this node was checked out at or last updated/switched to,
+ * regardless of any uncommitted changes (delete, replace and/or
+ * copy-here/move-here).  For a locally added/copied/moved-here node that is
+ * not part of a replace, return @c SVN_INVALID_REVNUM.
  */
 svn_error_t *
 svn_wc__node_get_base_rev(svn_revnum_t *base_revision,
@@ -496,6 +510,18 @@ svn_wc__node_get_lock_token(const char *
                             apr_pool_t *scratch_pool);
 
 
+/* Return TRUE in *FILE_EXTERNAL if the node LOCAL_ABSPATH is a file
+   external.
+
+   If the node does not exist in BASE, then SVN_ERR_WC_PATH_NOT_FOUND
+   will be returned.  */
+svn_error_t *
+svn_wc__node_is_file_external(svn_boolean_t *file_external,
+                              svn_wc_context_t *wc_ctx,
+                              const char *local_abspath,
+                              apr_pool_t *scratch_pool);
+
+
 /**
  * Recursively acquire write locks for @a local_abspath if
  * @a anchor_abspath is NULL.  If @a anchor_abspath is not NULL then

Modified: subversion/branches/svn-patch-improvements/subversion/include/svn_editor.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/include/svn_editor.h?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/include/svn_editor.h (original)
+++ subversion/branches/svn-patch-improvements/subversion/include/svn_editor.h Wed Apr 14 06:51:00 2010
@@ -774,6 +774,8 @@ svn_editor_add_absent(svn_editor_t *edit
  * Set or change properties on the existing node at @a relpath.
  * ### TODO @todo Does this send *all* properties, always?
  * ### TODO @todo What is REVISION for?
+ * ### what about "entry props"? will these still be handled via
+ * ### the general prop function?
  *
  * @a complete must be FALSE if and only if
  * - @a relpath is a file and an svn_editor_set_text() call will follow on

Modified: subversion/branches/svn-patch-improvements/subversion/include/svn_props.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/include/svn_props.h?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/include/svn_props.h (original)
+++ subversion/branches/svn-patch-improvements/subversion/include/svn_props.h Wed Apr 14 06:51:00 2010
@@ -189,11 +189,6 @@ svn_prop_needs_translation(const char *p
  * are uninterested.  If no props exist in a certain category, and the
  * property list argument for that category is non-NULL, then that
  * array will come back with <tt>->nelts == 0</tt>.
- *
- * ### Hmmm, maybe a better future interface is to return an array of
- *     arrays, where the index into the array represents the index
- *     into @c svn_prop_kind_t.  That way we can add more prop kinds
- *     in the future without changing this interface...
  */
 svn_error_t *
 svn_categorize_props(const apr_array_header_t *proplist,
@@ -349,25 +344,6 @@ svn_prop_name_is_valid(const char *prop_
 
 /** Meta-data properties.
  *
- * ====================================================================
- *    Licensed to the Apache Software Foundation (ASF) under one
- *    or more contributor license agreements.  See the NOTICE file
- *    distributed with this work for additional information
- *    regarding copyright ownership.  The ASF licenses this file
- *    to you under the Apache License, Version 2.0 (the
- *    "License"); you may not use this file except in compliance
- *    with the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing,
- *    software distributed under the License is distributed on an
- *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *    KIND, either express or implied.  See the License for the
- *    specific language governing permissions and limitations
- *    under the License.
- * ====================================================================
- *
  * The following properties are used for storing meta-data about
  * individual entries in the meta-data branches of subversion,
  * see issue #1256 or browseable at
@@ -417,12 +393,12 @@ svn_prop_name_is_valid(const char *prop_
 
 /** The property name *prefix* that makes a property a "WC property".
  *
- * For example, WebDAV RA implementations might store a versioned-resource url as a WC
- * prop like this:
+ * For example, WebDAV RA implementations might store a versioned-resource
+ * url as a WC prop like this:
  *
  * @verbatim
       name = svn:wc:dav_url
-      val  = http://www.lyra.org/repos/452348/e.289 @endverbatim
+      val  = http://www.example.com/repos/452348/e.289 @endverbatim
  *
  * The client will try to protect WC props by warning users against
  * changing them.  The client will also send them back to the RA layer

Modified: subversion/branches/svn-patch-improvements/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/include/svn_repos.h?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/include/svn_repos.h (original)
+++ subversion/branches/svn-patch-improvements/subversion/include/svn_repos.h Wed Apr 14 06:51:00 2010
@@ -2115,6 +2115,15 @@ enum svn_repos_load_uuid
   svn_repos_load_uuid_force
 };
 
+/** Callback for providing per revision progress while dumping or verifying
+ *  the repository.
+ *
+ * @since New in 1.7. */
+typedef svn_error_t *(*svn_repos_progress_func_t)(void *baton,
+                                                  svn_revnum_t rev,
+                                                  const char *warning_text,
+                                                  apr_pool_t *scratch_pool);
+
 
 /**
  * Verify the contents of the file system in @a repos.
@@ -2126,12 +2135,34 @@ enum svn_repos_load_uuid
  * revision 0.  If @a end_rev is #SVN_INVALID_REVNUM, then verify
  * through the @c HEAD revision.
  *
+ * For every verified revision call @a progress_func with @a rev set to
+ * the verified revision and @a warning_text @c NULL. For warnings call @a
+ * progress_func with @a warning_text set.
+ *
  * If @a cancel_func is not @c NULL, call it periodically with @a
  * cancel_baton as argument to see if the caller wishes to cancel the
  * verification.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_verify_fs2(svn_repos_t *repos,
+                     svn_revnum_t start_rev,
+                     svn_revnum_t end_rev,
+                     svn_repos_progress_func_t progress,
+                     void *progress_baton,
+                     svn_cancel_func_t cancel,
+                     void *cancel_baton,
+                     apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_repos_verify_fs2(), but with a feedback_stream instead of
+ * handling feedback via the progress_func handler
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_verify_fs(svn_repos_t *repos,
                     svn_stream_t *feedback_stream,
@@ -2141,7 +2172,6 @@ svn_repos_verify_fs(svn_repos_t *repos,
                     void *cancel_baton,
                     apr_pool_t *pool);
 
-
 /**
  * Dump the contents of the filesystem within already-open @a repos into
  * writable @a dumpstream.  Begin at revision @a start_rev, and dump every
@@ -2165,12 +2195,37 @@ svn_repos_verify_fs(svn_repos_t *repos,
  * be done with full plain text.  A dump with @a use_deltas set cannot
  * be loaded by Subversion 1.0.x.
  *
+ * For every dumped revision call @a progress_func with @a rev set to the
+ * dumped revision and @a warning_text @c NULL. For warnings call @a
+ * progress_func with @a warning_text.
+ *
  * If @a cancel_func is not @c NULL, it is called periodically with
  * @a cancel_baton as argument to see if the client wishes to cancel
  * the dump.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_dump_fs3(svn_repos_t *repos,
+                   svn_stream_t *dumpstream,
+                   svn_revnum_t start_rev,
+                   svn_revnum_t end_rev,
+                   svn_boolean_t incremental,
+                   svn_boolean_t use_deltas,
+                   svn_repos_progress_func_t progress_func,
+                   void *progress_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_repos_dump_fs3(), but with a feedback_stream instead of
+ * handling feedback via the progress_func handler
+ *
  * @since New in 1.1.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_dump_fs2(svn_repos_t *repos,
                    svn_stream_t *dumpstream,
@@ -2183,7 +2238,6 @@ svn_repos_dump_fs2(svn_repos_t *repos,
                    void *cancel_baton,
                    apr_pool_t *pool);
 
-
 /**
  * Similar to svn_repos_dump_fs2(), but with the @a use_deltas
  * parameter always set to @c FALSE.

Modified: subversion/branches/svn-patch-improvements/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/include/svn_wc.h?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/include/svn_wc.h (original)
+++ subversion/branches/svn-patch-improvements/subversion/include/svn_wc.h Wed Apr 14 06:51:00 2010
@@ -415,6 +415,7 @@ svn_wc_adm_open_anchor(svn_wc_adm_access
  *
  * @a pool is used only for local processing, it is not used for the batons.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_retrieve(svn_wc_adm_access_t **adm_access,
                     svn_wc_adm_access_t *associated,
@@ -428,6 +429,7 @@ svn_wc_adm_retrieve(svn_wc_adm_access_t 
  * svn_wc_adm_retrieve() with @a path replaced by the parent directory of
  * @a path.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_probe_retrieve(svn_wc_adm_access_t **adm_access,
                           svn_wc_adm_access_t *associated,
@@ -512,6 +514,7 @@ svn_wc_adm_probe_try(svn_wc_adm_access_t
  *
  * @since New in 1.6
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_close2(svn_wc_adm_access_t *adm_access,
                   apr_pool_t *scratch_pool);
@@ -527,10 +530,12 @@ svn_error_t *
 svn_wc_adm_close(svn_wc_adm_access_t *adm_access);
 
 /** Return the path used to open the access baton @a adm_access */
+SVN_DEPRECATED
 const char *
 svn_wc_adm_access_path(const svn_wc_adm_access_t *adm_access);
 
 /** Return the pool used by access baton @a adm_access */
+SVN_DEPRECATED
 apr_pool_t *
 svn_wc_adm_access_pool(const svn_wc_adm_access_t *adm_access);
 
@@ -3526,7 +3531,114 @@ enum svn_wc_status_kind
  * versions.  Therefore, to preserve binary compatibility, users
  * should not directly allocate structures of this type.
  *
+ * @since New in 1.7.
+ */
+typedef struct svn_wc_status3_t
+{
+  /** Can be @c NULL if not under version control. */
+  const svn_wc_entry_t *entry;
+
+  /** The status of the entry itself, including its text if it is a file. */
+  enum svn_wc_status_kind text_status;
+
+  /** The status of the entry's properties. */
+  enum svn_wc_status_kind prop_status;
+
+  /** a directory can be 'locked' if a working copy update was interrupted. */
+  svn_boolean_t locked;
+
+  /** a file or directory can be 'copied' if it's scheduled for
+   * addition-with-history (or part of a subtree that is scheduled as such.).
+   */
+  svn_boolean_t copied;
+
+  /** a file or directory can be 'switched' if the switch command has been
+   * used.  If this is TRUE, then file_external will be FALSE.
+   */
+  svn_boolean_t switched;
+
+  /** The entry's text status in the repository. */
+  enum svn_wc_status_kind repos_text_status;
+
+  /** The entry's property status in the repository. */
+  enum svn_wc_status_kind repos_prop_status;
+
+  /** The entry's lock in the repository, if any. */
+  svn_lock_t *repos_lock;
+
+  /** Set to the URI (actual or expected) of the item.
+   * @since New in 1.3
+   */
+  const char *url;
+
+  /**
+   * @defgroup svn_wc_status_ood WC out-of-date info from the repository
+   * @{
+   *
+   * When the working copy item is out-of-date compared to the
+   * repository, the following fields represent the state of the
+   * youngest revision of the item in the repository.  If the working
+   * copy is not out of date, the fields are initialized as described
+   * below.
+   */
+
+  /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM
+   * if not out of date.
+   */
+  svn_revnum_t ood_last_cmt_rev;
+
+  /** Set to the most recent commit date, or @c 0 if not out of date.
+   */
+  apr_time_t ood_last_cmt_date;
+
+  /** Set to the node kind of the youngest commit, or #svn_node_none
+   * if not out of date.
+   */
+  svn_node_kind_t ood_kind;
+
+  /** Set to the user name of the youngest commit, or @c NULL if not
+   * out of date or non-existent.  Because a non-existent @c
+   * svn:author property has the same behavior as an out-of-date
+   * working copy, examine @c ood_last_cmt_rev to determine whether
+   * the working copy is out of date.
+   */
+  const char *ood_last_cmt_author;
+
+  /** @} */
+
+  /** Non-NULL if the entry is the victim of a tree conflict.
+   */
+  svn_wc_conflict_description_t *tree_conflict;
+
+  /** If the item is a file that was added to the working copy with an
+   * svn:externals; if file_external is TRUE, then switched is always
+   * FALSE.
+   */
+  svn_boolean_t file_external;
+
+  /** The actual status of the text compared to the pristine base of the
+   * file. This value isn't masked by other working copy statuses.
+   * @c pristine_text_status is #svn_wc_status_none if this value was
+   * not calculated during the status walk.
+   */
+  enum svn_wc_status_kind pristine_text_status;
+
+  /** The actual status of the properties compared to the pristine base of
+   * the node. This value isn't masked by other working copy statuses.
+   * @c pristine_prop_status is #svn_wc_status_none if this value was
+   * not calculated during the status walk.
+   */
+  enum svn_wc_status_kind pristine_prop_status;
+
+  /* NOTE! Please update svn_wc_dup_status3() when adding new fields here. */
+} svn_wc_status3_t;
+
+/**
+ * ### The diffs are not yet known.
+ * Same as svn_wc_status3_t, but without ...
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 typedef struct svn_wc_status2_t
 {
@@ -3676,13 +3788,23 @@ typedef struct svn_wc_status_t
 } svn_wc_status_t;
 
 
-
 /**
  * Return a deep copy of the @a orig_stat status structure, allocated
  * in @a pool.
  *
- * @since New in 1.2.
+ * @since New in 1.7.
+ */
+svn_wc_status3_t *
+svn_wc_dup_status3(const svn_wc_status3_t *orig_stat,
+                   apr_pool_t *pool);
+
+/**
+ * Same as svn_wc_dup_status3(), but for older svn_wc_status_t structures.
+ *
+ * @since New in 1.2
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_wc_status2_t *
 svn_wc_dup_status2(const svn_wc_status2_t *orig_stat,
                    apr_pool_t *pool);
@@ -3727,7 +3849,7 @@ svn_wc_dup_status(const svn_wc_status_t 
  * @since New in 1.7.
  */
 svn_error_t *
-svn_wc_status3(svn_wc_status2_t **status,
+svn_wc_status3(svn_wc_status3_t **status,
                svn_wc_context_t *wc_ctx,
                const char *local_abspath,
                apr_pool_t *result_pool,
@@ -3779,7 +3901,7 @@ svn_wc_status(svn_wc_status_t **status,
  */
 typedef svn_error_t *(*svn_wc_status_func4_t)(void *baton,
                                               const char *local_abspath,
-                                              const svn_wc_status2_t *status,
+                                              const svn_wc_status3_t *status,
                                               apr_pool_t *scratch_pool);
 
 /**
@@ -3816,7 +3938,7 @@ typedef void (*svn_wc_status_func_t)(voi
 
 /**
  * Walk the working copy status of @a local_abspath using @a wc_ctx, by
- * creating #svn_wc_status2_t structures and sending these through
+ * creating #svn_wc_status3_t structures and sending these through
  * @a status_func / @a status_baton.
  *
  *  * Assuming the target is a directory, then:
@@ -3876,7 +3998,7 @@ svn_wc_walk_status(svn_wc_context_t *wc_
 
 /**
  * Set @a *editor and @a *edit_baton to an editor that generates
- * #svn_wc_status2_t structures and sends them through @a status_func /
+ * #svn_wc_status3_t structures and sends them through @a status_func /
  * @a status_baton.  @a anchor_abspath is a working copy directory
  * directory which will be used as the root of our editor.  If @a
  * target_basename is not "", it represents a node in the @a anchor_abspath
@@ -4260,6 +4382,22 @@ svn_wc_delete(const char *path,
               void *notify_baton,
               apr_pool_t *pool);
 
+/**
+ * Register @a local_abspath as a new file external aimed at
+ * @a external_url, @a external_peg_rev, and @a external_rev.
+ *
+ * If not @c NULL, @a external_peg_rev and @a external_rev must each
+ * be of kind @c svn_opt_revision_number or @c svn_opt_revision_head.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_register_file_external(svn_wc_context_t *wc_ctx,
+                              const char *local_abspath,
+                              const char *external_url,
+                              const svn_opt_revision_t *external_peg_rev,
+                              const svn_opt_revision_t *external_rev,
+                              apr_pool_t *scratch_pool);
 
 /**
  * Put @a local_abspath under version control by adding an entry in its
@@ -5036,7 +5174,8 @@ svn_wc_crawl_revisions5(svn_wc_context_t
  * @since New in 1.6.
  * @deprecated Provided for compatibility with the 1.6 API.
  */
-SVN_DEPRECATED svn_error_t *
+SVN_DEPRECATED
+svn_error_t *
 svn_wc_crawl_revisions4(const char *path,
                         svn_wc_adm_access_t *adm_access,
                         const svn_ra_reporter3_t *reporter,
@@ -5058,6 +5197,7 @@ svn_wc_crawl_revisions4(const char *path
  *
  * @deprecated Provided for compatibility with the 1.5 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_crawl_revisions3(const char *path,
                         svn_wc_adm_access_t *adm_access,
@@ -6966,6 +7106,7 @@ svn_wc_transmit_text_deltas3(const char 
  * @since New in 1.4.
  * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_transmit_text_deltas2(const char **tempfile,
                              unsigned char digest[],

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/blame.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/blame.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/blame.c Wed Apr 14 06:51:00 2010
@@ -680,7 +680,7 @@ svn_client_blame5(const char *target,
     {
       /* If the local file is modified we have to call the handler on the
          working copy file with keywords unexpanded */
-      svn_wc_status2_t *status;
+      svn_wc_status3_t *status;
 
       SVN_ERR(svn_wc_status3(&status, ctx->wc_ctx, target_abspath_or_url, pool,
                              pool));

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/cat.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/cat.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/cat.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/cat.c Wed Apr 14 06:51:00 2010
@@ -97,7 +97,7 @@ cat_local_file(svn_wc_context_t *wc_ctx,
     }
   else
     {
-      svn_wc_status2_t *status;
+      svn_wc_status3_t *status;
 
       SVN_ERR(svn_stream_open_readonly(&input, local_abspath, scratch_pool,
                                        scratch_pool));

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/commit.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/commit.c Wed Apr 14 06:51:00 2010
@@ -1051,7 +1051,7 @@ check_nonrecursive_dir_delete(void *bato
     {
       if (kind == svn_node_dir)
         {
-          svn_wc_status2_t *status;
+          svn_wc_status3_t *status;
 
           /* ### Looking at schedule is probably enough, no need for
                  pristine compare etc. */

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/delete.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/delete.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/delete.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/delete.c Wed Apr 14 06:51:00 2010
@@ -50,7 +50,7 @@
 static svn_error_t *
 find_undeletables(void *baton,
                   const char *path,
-                  const svn_wc_status2_t *status,
+                  const svn_wc_status3_t *status,
                   apr_pool_t *pool)
 {
   /* Check for error-ful states. */

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/deprecated.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/deprecated.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/deprecated.c Wed Apr 14 06:51:00 2010
@@ -42,6 +42,7 @@
 #include "client.h"
 #include "mergeinfo.h"
 
+#include "private/svn_wc_private.h"
 #include "svn_private_config.h"
 
 
@@ -1433,11 +1434,13 @@ struct status4_wrapper_baton
 static svn_error_t *
 status4_wrapper_func(void *baton,
                      const char *path,
-                     const svn_wc_status2_t *status,
+                     const svn_wc_status3_t *status,
                      apr_pool_t *scratch_pool)
 {
   struct status4_wrapper_baton *swb = baton;
-  svn_wc_status2_t *dup = svn_wc_dup_status2(status, scratch_pool);
+  svn_wc_status2_t *dup;
+
+  dup = svn_wc__status2_from_3(status, scratch_pool);
 
   return (*swb->old_func)(swb->old_baton, path, dup, scratch_pool);
 }

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/export.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/export.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/export.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/export.c Wed Apr 14 06:51:00 2010
@@ -170,7 +170,7 @@ copy_one_versioned_file(const char *from
     }
   else
     {
-      svn_wc_status2_t *status;
+      svn_wc_status3_t *status;
 
       /* ### hmm. this isn't always a specialfile. this will simply open
          ### the file readonly if it is a regular file. */

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/externals.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/externals.c Wed Apr 14 06:51:00 2010
@@ -423,20 +423,8 @@ switch_file_external(const char *path,
       if (err)
         goto cleanup;
 
-      err = svn_wc_add4(ctx->wc_ctx, local_abspath, svn_depth_infinity,
-                        NULL, /* const char *copyfrom_url */
-                        SVN_INVALID_REVNUM, /* svn_revnum_t copyfrom_rev */
-                        ctx->cancel_func, ctx->cancel_baton,
-                        NULL, /* svn_wc_notify_func2_t notify_func */
-                        NULL, /* void *notify_baton */
-                        subpool);
-      if (err)
-        goto cleanup;
-      revert_file = TRUE;
-
-      err = svn_wc__set_file_external_location(ctx->wc_ctx, local_abspath,
-                                               url, peg_revision, revision,
-                                               repos_root_url, subpool);
+      err = svn_wc_register_file_external(ctx->wc_ctx, local_abspath, url,
+                                          peg_revision, revision, subpool);
       if (err)
         goto cleanup;
     }

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/merge.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/merge.c Wed Apr 14 06:51:00 2010
@@ -4429,7 +4429,7 @@ record_skips(const char *mergeinfo_path,
        hi = apr_hash_next(hi))
     {
       const char *skipped_abspath = svn__apr_hash_index_key(hi);
-      svn_wc_status2_t *status;
+      svn_wc_status3_t *status;
 
       /* Before we override, make sure this is a versioned path, it
          might be an unversioned obstruction. */
@@ -8604,8 +8604,11 @@ svn_client_merge3(const char *source1,
   baton.merge_options = merge_options;
   baton.ctx = ctx;
 
-  SVN_ERR(svn_wc__call_with_write_lock(merge_cb, &baton, ctx->wc_ctx,
-                                       lock_abspath, pool, pool));
+  if (!dry_run)
+    SVN_ERR(svn_wc__call_with_write_lock(merge_cb, &baton, ctx->wc_ctx,
+                                         lock_abspath, pool, pool));
+  else
+    SVN_ERR(merge_cb(&baton, pool, pool));
 
   return SVN_NO_ERROR;
 }
@@ -9753,8 +9756,13 @@ svn_client_merge_reintegrate(const char 
   baton.merge_options = merge_options;
   baton.ctx = ctx;
 
-  SVN_ERR(svn_wc__call_with_write_lock(merge_reintegrate_cb, &baton,
-                                       ctx->wc_ctx, lock_abspath, pool, pool));
+  if (!dry_run)
+    SVN_ERR(svn_wc__call_with_write_lock(merge_reintegrate_cb, &baton,
+                                         ctx->wc_ctx, lock_abspath,
+                                         pool, pool));
+  else
+    SVN_ERR(merge_reintegrate_cb(&baton, pool, pool));
+
   return SVN_NO_ERROR;
 }
 
@@ -9908,8 +9916,11 @@ svn_client_merge_peg3(const char *source
   baton.merge_options = merge_options;
   baton.ctx = ctx;
 
-  SVN_ERR(svn_wc__call_with_write_lock(merge_peg_cb, &baton, ctx->wc_ctx,
-                                       lock_abspath, pool, pool));
+  if (!dry_run)
+    SVN_ERR(svn_wc__call_with_write_lock(merge_peg_cb, &baton, ctx->wc_ctx,
+                                         lock_abspath, pool, pool));
+  else
+    SVN_ERR(merge_peg_cb(&baton, pool, pool));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/mergeinfo.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/mergeinfo.c Wed Apr 14 06:51:00 2010
@@ -787,10 +787,7 @@ should_elide_mergeinfo(svn_boolean_t *el
       /* Empty mergeinfo elides to empty mergeinfo or to "nothing",
          i.e. it isn't overriding any parent. Otherwise it doesn't
          elide. */
-      if (!parent_mergeinfo || apr_hash_count(parent_mergeinfo) == 0)
-        *elides = TRUE;
-      else
-        *elides = FALSE;
+      *elides = (!parent_mergeinfo || apr_hash_count(parent_mergeinfo) == 0);
     }
   else if (!parent_mergeinfo || apr_hash_count(parent_mergeinfo) == 0)
     {

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/patch.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/patch.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/patch.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/patch.c Wed Apr 14 06:51:00 2010
@@ -224,7 +224,7 @@ resolve_target_path(patch_target_t *targ
                     apr_pool_t *scratch_pool)
 {
   const char *stripped_path;
-  svn_wc_status2_t *status;
+  svn_wc_status3_t *status;
 
   target->canon_path_from_patchfile = svn_dirent_internal_style(
                                         path_from_patchfile, result_pool);

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/prop_commands.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/prop_commands.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/prop_commands.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/prop_commands.c Wed Apr 14 06:51:00 2010
@@ -1195,15 +1195,8 @@ svn_client_proplist3(const char *path_or
       else
         SVN_ERR(err);
 
-      if ((revision->kind == svn_opt_revision_committed)
-          || (revision->kind == svn_opt_revision_base))
-        {
-          pristine = TRUE;
-        }
-      else  /* must be the working revision */
-        {
-          pristine = FALSE;
-        }
+      pristine = ((revision->kind == svn_opt_revision_committed)
+                    || (revision->kind == svn_opt_revision_base));
 
       if (changelists && changelists->nelts)
         SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash,

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/status.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/status.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/status.c Wed Apr 14 06:51:00 2010
@@ -68,7 +68,7 @@ struct status_baton
 static svn_error_t *
 tweak_status(void *baton,
              const char *local_abspath,
-             const svn_wc_status2_t *status,
+             const svn_wc_status3_t *status,
              apr_pool_t *scratch_pool)
 {
   struct status_baton *sb = baton;
@@ -79,7 +79,7 @@ tweak_status(void *baton,
      through here. */
   if (sb->deleted_in_repos)
     {
-      svn_wc_status2_t *new_status = svn_wc_dup_status2(status, scratch_pool);
+      svn_wc_status3_t *new_status = svn_wc_dup_status3(status, scratch_pool);
       new_status->repos_text_status = svn_wc_status_deleted;
       status = new_status;
     }

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/switch.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/switch.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/switch.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/switch.c Wed Apr 14 06:51:00 2010
@@ -301,13 +301,9 @@ svn_client__switch_internal(svn_revnum_t
                                    local_abspath, pool, pool);
   if (err && err->apr_err != SVN_ERR_WC_LOCKED)
     return svn_error_return(err);
-  else if (err)
-    {
-      svn_error_clear(err);
-      acquired_lock = FALSE;
-    }
-  else
-    acquired_lock = TRUE;
+
+  acquired_lock = (err == SVN_NO_ERROR);
+  svn_error_clear(err);
 
   err1 = switch_internal(result_rev, path, local_abspath, anchor_abspath,
                          switch_url, peg_revision, revision,

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_client/update.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_client/update.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_client/update.c Wed Apr 14 06:51:00 2010
@@ -49,7 +49,7 @@
 struct ff_baton
 {
   svn_client_ctx_t *ctx;       /* client context used to open ra session */
-  const char *repos_root;      /* the root of the ra session */
+  const char *repos_root;      /* repository root URL */
   svn_ra_session_t *session;   /* the secondary ra session itself */
   apr_pool_t *pool;            /* the pool where the ra session is allocated */
 };
@@ -68,13 +68,21 @@ file_fetcher(void *baton,
              apr_pool_t *pool)
 {
   struct ff_baton *ffb = (struct ff_baton *)baton;
+  const char *dirpath, *base_name, *session_url, *old_session_url;
 
-  if (! ffb->session)
-    SVN_ERR(svn_client__open_ra_session_internal(&(ffb->session),
-                                                 ffb->repos_root,
+  svn_relpath_split(path, &dirpath, &base_name, pool);
+  session_url = svn_path_url_add_component2(ffb->repos_root, 
+                                            dirpath, pool);
+
+  if (ffb->session)
+    SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url, ffb->session,
+                                              session_url, ffb->pool));
+  else
+    SVN_ERR(svn_client__open_ra_session_internal(&(ffb->session), session_url,
                                                  NULL, NULL, FALSE, TRUE,
                                                  ffb->ctx, ffb->pool));
-  return svn_ra_get_file(ffb->session, path, revision, stream,
+
+  return svn_ra_get_file(ffb->session, base_name, revision, stream,
                          fetched_rev, props, pool);
 }
 

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_ra_neon/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_ra_neon/lock.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_ra_neon/lock.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_ra_neon/lock.c Wed Apr 14 06:51:00 2010
@@ -306,8 +306,6 @@ do_lock(svn_lock_t **lock,
   err = lock_from_baton(lock, req, fs_path.data, lrb, pool);
 
  cleanup:
-  svn_ra_neon__request_destroy(req);
-
   /* 405 == Method Not Allowed (Occurs when trying to lock a working
      copy path which no longer exists at HEAD in the repository. */
   if (code == 405)
@@ -317,6 +315,8 @@ do_lock(svn_lock_t **lock,
                               _("Lock request failed: %d %s"),
                               code, req->code_desc);
     }
+  svn_ra_neon__request_destroy(req);
+
   return err;
 }
 

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_repos/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_repos/deprecated.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_repos/deprecated.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_repos/deprecated.c Wed Apr 14 06:51:00 2010
@@ -428,6 +428,95 @@ svn_repos_dump_fs(svn_repos_t *repos,
                             cancel_baton, pool);
 }
 
+/* Baton for repos_progress_handler */
+struct progress_baton
+{
+  svn_boolean_t dumping;
+  svn_stream_t *feedback_stream;
+};
+
+/* Implementation of svn_repos_progress_func_t to wrap the output to a
+   response stream for svn_repos_dump_fs2() and svn_repos_verify_fs() */
+static svn_error_t *
+repos_progress_handler(void * baton,
+                       svn_revnum_t revision,
+                       const char *warning_text,
+                       apr_pool_t *scratch_pool)
+{
+  struct progress_baton *pb = baton;
+
+  if (warning_text != NULL)
+    {
+      apr_size_t len = strlen(warning_text);
+      SVN_ERR(svn_stream_write(pb->feedback_stream, warning_text, &len));
+    }
+  else
+    SVN_ERR(svn_stream_printf(pb->feedback_stream, scratch_pool,
+                              pb->dumping
+                              ? _("* Dumped revision %ld.\n")
+                              : _("* Verified revision %ld.\n"),
+                              revision));
+
+  return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_repos_dump_fs2(svn_repos_t *repos,
+                   svn_stream_t *stream,
+                   svn_stream_t *feedback_stream,
+                   svn_revnum_t start_rev,
+                   svn_revnum_t end_rev,
+                   svn_boolean_t incremental,
+                   svn_boolean_t use_deltas,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *pool)
+{
+  struct progress_baton pb;
+  pb.dumping = (stream != NULL); /* Show verify messages if stream is NULL */
+  pb.feedback_stream = feedback_stream;
+
+  return svn_error_return(svn_repos_dump_fs3(repos,
+                                             stream,
+                                             start_rev,
+                                             end_rev,
+                                             incremental,
+                                             use_deltas,
+                                             feedback_stream
+                                               ? repos_progress_handler
+                                               : NULL,
+                                             &pb,
+                                             cancel_func,
+                                             cancel_baton,
+                                             pool));
+}
+
+svn_error_t *
+svn_repos_verify_fs(svn_repos_t *repos,
+                    svn_stream_t *feedback_stream,
+                    svn_revnum_t start_rev,
+                    svn_revnum_t end_rev,
+                    svn_cancel_func_t cancel_func,
+                    void *cancel_baton,
+                    apr_pool_t *pool)
+{
+  struct progress_baton pb;
+  pb.dumping = FALSE;
+  pb.feedback_stream = feedback_stream;
+
+  return svn_error_return(svn_repos_verify_fs2(repos,
+                                               start_rev,
+                                               end_rev,
+                                               feedback_stream
+                                                 ? repos_progress_handler
+                                                 : NULL,
+                                               &pb,
+                                               cancel_func,
+                                               cancel_baton,
+                                               pool));
+}
+
 /*** From load.c ***/
 static svn_repos_parser_fns_t *
 fns_from_fns2(const svn_repos_parse_fns2_t *fns2,

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_repos/dump.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_repos/dump.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_repos/dump.c Wed Apr 14 06:51:00 2010
@@ -180,7 +180,8 @@ struct edit_baton
   svn_stream_t *stream;
 
   /* Send feedback here, if non-NULL */
-  svn_stream_t *feedback_stream;
+  svn_repos_progress_func_t progress_func;
+  void *progress_baton;
 
   /* The fs revision root, so we can read the contents of paths. */
   svn_fs_root_t *fs_root;
@@ -416,15 +417,21 @@ dump_node(struct edit_baton *eb,
         }
       else
         {
-          if (!eb->verify && cmp_rev < eb->oldest_dumped_rev)
-            SVN_ERR(svn_stream_printf
-                    (eb->feedback_stream, pool,
+          if (!eb->verify && cmp_rev < eb->oldest_dumped_rev
+              && eb->progress_func)
+            {
+              const char *warning = apr_psprintf(
+                     pool,
                      _("WARNING: Referencing data in revision %ld,"
                        " which is older than the oldest\n"
                        "WARNING: dumped revision (%ld).  Loading this dump"
                        " into an empty repository\n"
                        "WARNING: will fail.\n"),
-                     cmp_rev, eb->oldest_dumped_rev));
+                     cmp_rev, eb->oldest_dumped_rev);
+
+              SVN_ERR(eb->progress_func(eb->progress_baton,
+                                        eb->oldest_dumped_rev, warning, pool));
+            }
 
           SVN_ERR(svn_stream_printf(eb->stream, pool,
                                     SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV
@@ -845,7 +852,8 @@ get_dump_editor(const svn_delta_editor_t
                 svn_revnum_t to_rev,
                 const char *root_path,
                 svn_stream_t *stream,
-                svn_stream_t *feedback_stream,
+                svn_repos_progress_func_t progress_func,
+                void *progress_baton,
                 svn_revnum_t oldest_dumped_rev,
                 svn_boolean_t use_deltas,
                 svn_boolean_t verify,
@@ -859,7 +867,8 @@ get_dump_editor(const svn_delta_editor_t
 
   /* Set up the edit baton. */
   eb->stream = stream;
-  eb->feedback_stream = feedback_stream;
+  eb->progress_func = progress_func;
+  eb->progress_baton = progress_baton;
   eb->oldest_dumped_rev = oldest_dumped_rev;
   eb->bufsize = sizeof(eb->buffer);
   eb->path = apr_pstrdup(pool, root_path);
@@ -953,13 +962,14 @@ write_revision_record(svn_stream_t *stre
 
 /* The main dumper. */
 svn_error_t *
-svn_repos_dump_fs2(svn_repos_t *repos,
+svn_repos_dump_fs3(svn_repos_t *repos,
                    svn_stream_t *stream,
-                   svn_stream_t *feedback_stream,
                    svn_revnum_t start_rev,
                    svn_revnum_t end_rev,
                    svn_boolean_t incremental,
                    svn_boolean_t use_deltas,
+                   svn_repos_progress_func_t progress_func,
+                   void *progress_baton,
                    svn_cancel_func_t cancel_func,
                    void *cancel_baton,
                    apr_pool_t *pool)
@@ -972,7 +982,6 @@ svn_repos_dump_fs2(svn_repos_t *repos,
   svn_revnum_t youngest;
   const char *uuid;
   int version;
-  svn_boolean_t dumping = (stream != NULL);
 
   /* Determine the current youngest revision of the filesystem. */
   SVN_ERR(svn_fs_youngest_rev(&youngest, fs, pool));
@@ -984,8 +993,6 @@ svn_repos_dump_fs2(svn_repos_t *repos,
     end_rev = youngest;
   if (! stream)
     stream = svn_stream_empty(pool);
-  if (! feedback_stream)
-    feedback_stream = svn_stream_empty(pool);
 
   /* Validate the revisions. */
   if (start_rev > end_rev)
@@ -1068,8 +1075,8 @@ svn_repos_dump_fs2(svn_repos_t *repos,
          non-incremental dump. */
       use_deltas_for_rev = use_deltas && (incremental || i != start_rev);
       SVN_ERR(get_dump_editor(&dump_editor, &dump_edit_baton, fs, to_rev,
-                              "/", stream, feedback_stream, start_rev,
-                              use_deltas_for_rev, FALSE, subpool));
+                              "/", stream, progress_func, progress_baton,
+                              start_rev, use_deltas_for_rev, FALSE, subpool));
 
       /* Drive the editor in one way or another. */
       SVN_ERR(svn_fs_revision_root(&to_root, fs, to_rev, subpool));
@@ -1100,11 +1107,8 @@ svn_repos_dump_fs2(svn_repos_t *repos,
         }
 
     loop_end:
-      SVN_ERR(svn_stream_printf(feedback_stream, pool,
-                                dumping
-                                ? _("* Dumped revision %ld.\n")
-                                : _("* Verified revision %ld.\n"),
-                                to_rev));
+      if (progress_func)
+        SVN_ERR(progress_func(progress_baton, to_rev, NULL, subpool));
     }
 
   svn_pool_destroy(subpool);
@@ -1176,13 +1180,14 @@ verify_close_directory(void *dir_baton,
 }
 
 svn_error_t *
-svn_repos_verify_fs(svn_repos_t *repos,
-                    svn_stream_t *feedback_stream,
-                    svn_revnum_t start_rev,
-                    svn_revnum_t end_rev,
-                    svn_cancel_func_t cancel_func,
-                    void *cancel_baton,
-                    apr_pool_t *pool)
+svn_repos_verify_fs2(svn_repos_t *repos,
+                     svn_revnum_t start_rev,
+                     svn_revnum_t end_rev,
+                     svn_repos_progress_func_t progress_func,
+                     void *progress_baton,
+                     svn_cancel_func_t cancel_func,
+                     void *cancel_baton,
+                     apr_pool_t *pool)
 {
   svn_fs_t *fs = svn_repos_fs(repos);
   svn_revnum_t youngest;
@@ -1197,8 +1202,6 @@ svn_repos_verify_fs(svn_repos_t *repos,
     start_rev = 0;
   if (! SVN_IS_VALID_REVNUM(end_rev))
     end_rev = youngest;
-  if (! feedback_stream)
-    feedback_stream = svn_stream_empty(pool);
 
   /* Validate the revisions. */
   if (start_rev > end_rev)
@@ -1226,7 +1229,8 @@ svn_repos_verify_fs(svn_repos_t *repos,
       /* Get cancellable dump editor, but with our close_directory handler. */
       SVN_ERR(get_dump_editor((const svn_delta_editor_t **)&dump_editor,
                               &dump_edit_baton, fs, rev, "",
-                              svn_stream_empty(pool), feedback_stream,
+                              svn_stream_empty(pool), 
+                              progress_func, progress_baton,
                               start_rev,
                               FALSE, TRUE, /* use_deltas, verify */
                               iterpool));
@@ -1242,9 +1246,9 @@ svn_repos_verify_fs(svn_repos_t *repos,
                                 cancel_editor, cancel_edit_baton,
                                 NULL, NULL, iterpool));
       SVN_ERR(svn_fs_revision_proplist(&props, fs, rev, iterpool));
-      SVN_ERR(svn_stream_printf(feedback_stream, iterpool,
-                                _("* Verified revision %ld.\n"),
-                                rev));
+
+      if (progress_func)
+        SVN_ERR(progress_func(progress_baton, rev, NULL, iterpool));
     }
 
   svn_pool_destroy(iterpool);

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_repos/reporter.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_repos/reporter.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_repos/reporter.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_repos/reporter.c Wed Apr 14 06:51:00 2010
@@ -807,8 +807,8 @@ update_entry(report_baton_t *b, svn_revn
           && (!info || (!info->start_empty && !info->lock_token))
           && (requested_depth <= wc_depth || t_entry->kind == svn_node_file))
         return SVN_NO_ERROR;
-      else if (distance != -1 || b->ignore_ancestry)
-        related = TRUE;
+
+      related = (distance != -1 || b->ignore_ancestry);
     }
 
   /* If there's a source and it's not related to the target, nuke it. */

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_subr/skel.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_subr/skel.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_subr/skel.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_subr/skel.c Wed Apr 14 06:51:00 2010
@@ -69,6 +69,8 @@ static const enum char_type skel_char_ty
 
 
 /* ### WTF? since when is number conversion LOCALE DEPENDENT? */
+/* stsp: In C99, various numerical string properties such as decimal point,
+ * thousands separator, and the plus/minus sign are locale dependent. */
 
 /* Converting text to numbers.  */
 

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_crawler.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_crawler.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_crawler.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_crawler.c Wed Apr 14 06:51:00 2010
@@ -1119,6 +1119,10 @@ svn_wc__internal_transmit_text_deltas(co
                                    db, local_abspath,
                                    scratch_pool, scratch_pool));
 
+#ifdef SVN_EXPERIMENTAL
+      /* ### expected_checksum is originally MD-5 but will later be SHA-1... */
+#endif
+
       /* ### We want expected_checksum to ALWAYS be present, but on old
          ### working copies maybe it won't be (unclear?). If it is there,
          ### then we can use it as an expected value. If it is NOT there,

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_ops.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_ops.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_wc/adm_ops.c Wed Apr 14 06:51:00 2010
@@ -377,6 +377,10 @@ process_committed_leaf(svn_wc__db_t *db,
                                db, local_abspath,
                                scratch_pool, scratch_pool));
 
+#ifdef SVN_EXPERIMENTAL
+  /* ### copied_checksum is originally MD-5 but will later be SHA-1... */
+#endif
+
   if (kind == svn_wc__db_kind_dir)
     adm_abspath = local_abspath;
   else
@@ -1673,6 +1677,32 @@ svn_wc_add4(svn_wc_context_t *wc_ctx,
   return SVN_NO_ERROR;
 }
 
+svn_error_t *
+svn_wc_register_file_external(svn_wc_context_t *wc_ctx,
+                              const char *local_abspath,
+                              const char *external_url,
+                              const svn_opt_revision_t *external_peg_rev,
+                              const svn_opt_revision_t *external_rev,
+                              apr_pool_t *scratch_pool)
+{
+  svn_wc__db_t *db = wc_ctx->db;
+  const char *parent_abspath, *base_name, *repos_root_url;
+
+  svn_dirent_split(local_abspath, &parent_abspath, &base_name, scratch_pool);
+
+  SVN_ERR(svn_wc_add4(wc_ctx, local_abspath, svn_depth_infinity,
+                      NULL, SVN_INVALID_REVNUM, NULL, NULL, NULL, NULL,
+                      scratch_pool));
+  SVN_ERR(svn_wc__db_scan_base_repos(NULL, &repos_root_url, NULL, db,
+                                     parent_abspath, scratch_pool,
+                                     scratch_pool));
+  SVN_ERR(svn_wc__set_file_external_location(wc_ctx, local_abspath,
+                                             external_url, external_peg_rev,
+                                             external_rev, repos_root_url,
+                                             scratch_pool));
+  return SVN_NO_ERROR;
+}
+
 
 /* Thoughts on Reversion.
 
@@ -1917,6 +1947,7 @@ revert_entry(svn_depth_t *depth,
                     base_revision,
                     kind,
                     svn_wc__db_status_not_present,
+                    NULL, NULL,
                     pool));
         }
     }
@@ -2304,14 +2335,44 @@ svn_wc__get_pristine_contents(svn_stream
   /* ### TODO 1.7: use pristine store instead of this block: */
   {
     const char *text_base;
+    svn_error_t *err;
 
     SVN_ERR(svn_wc__text_base_path(&text_base, db, local_abspath, FALSE,
                                    scratch_pool));
     SVN_ERR_ASSERT(text_base != NULL);
 
-    return svn_error_return(svn_stream_open_readonly(contents, text_base,
-                                                     result_pool,
-                                                     scratch_pool));
+    /* ### now for some ugly hackiness. right now, file externals will
+       ### sometimes put their pristine contents into the revert base,
+       ### because they think they're *replaced* nodes, rather than
+       ### simple BASE nodes. watch out for this scenario, and
+       ### compensate appropriately.  */
+    err = svn_stream_open_readonly(contents, text_base,
+                                   result_pool, scratch_pool);
+    if (err)
+      {
+        svn_boolean_t file_external;
+
+        if (!APR_STATUS_IS_ENOENT(err->apr_err))
+          return svn_error_return(err);
+
+        SVN_ERR(svn_wc__internal_is_file_external(&file_external,
+                                                  db, local_abspath,
+                                                  scratch_pool));
+        if (!file_external)
+          return svn_error_return(err);
+
+        svn_error_clear(err);
+
+        SVN_ERR(svn_wc__text_revert_path(&text_base, db, local_abspath,
+                                         scratch_pool));
+        SVN_ERR_ASSERT(text_base != NULL);
+
+        return svn_error_return(svn_stream_open_readonly(contents,
+                                                         text_base,
+                                                         result_pool,
+                                                         scratch_pool));
+      }
+    return SVN_NO_ERROR;
   }
 }
 

Modified: subversion/branches/svn-patch-improvements/subversion/libsvn_wc/crop.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-patch-improvements/subversion/libsvn_wc/crop.c?rev=933863&r1=933862&r2=933863&view=diff
==============================================================================
--- subversion/branches/svn-patch-improvements/subversion/libsvn_wc/crop.c (original)
+++ subversion/branches/svn-patch-improvements/subversion/libsvn_wc/crop.c Wed Apr 14 06:51:00 2010
@@ -91,7 +91,8 @@ crop_children(svn_wc__db_t *db,
   /* Update the depth of target first, if needed. */
   if (dir_depth > depth)
     {
-      SVN_ERR(svn_wc__set_depth(db, local_abspath, depth, iterpool));
+      SVN_ERR(svn_wc__db_temp_op_set_dir_depth(db, local_abspath, depth,
+                                               iterpool));
     }
 
   /* Looping over current directory's SVN entries: */
@@ -301,6 +302,7 @@ svn_wc_exclude(svn_wc_context_t *wc_ctx,
                                           revision,
                                           kind,
                                           svn_wc__db_status_excluded,
+                                          NULL, NULL,
                                           scratch_pool));
 
   if (notify_func)



Mime
View raw message