You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/08/11 00:07:31 UTC

svn commit: r984234 [3/20] - in /subversion/branches/ignore-mergeinfo: ./ build/ build/ac-macros/ build/generator/ notes/ notes/api-errata/ notes/obliterate/ notes/obliterate/fspec-cc1/ notes/rename-tracking/ notes/svnpatch/ notes/tree-conflicts/ notes...

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java Tue Aug 10 22:07:24 2010
@@ -26,6 +26,7 @@ package org.tigris.subversion.javahl;
 import java.util.Set;
 import java.io.OutputStream;
 import java.io.InputStream;
+import java.io.File;
 import java.io.IOException;
 
 /**
@@ -101,7 +102,8 @@ public class SVNAdmin
             throws ClientException
     {
         try {
-            aSVNAdmin.create(path, disableFsyncCommit, keepLog, configPath,
+            aSVNAdmin.create(new File(path), disableFsyncCommit, keepLog,
+                             configPath == null ? null : new File(configPath),
                              fstype);
         } catch (org.apache.subversion.javahl.ClientException ex) {
             throw new ClientException(ex);
@@ -120,7 +122,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.deltify(path,
+            aSVNAdmin.deltify(new File(path),
                               start == null ? null : start.toApache(),
                               end == null ? null : end.toApache());
         }
@@ -167,11 +169,11 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.dump(path, new OutputWrapper(dataOut),
-                           new OutputWrapper(errorOut),
+            aSVNAdmin.dump(new File(path), new OutputWrapper(dataOut),
                            start == null ? null : start.toApache(),
                            end == null ? null : end.toApache(),
-                           incremental, useDeltas);
+                           incremental, useDeltas,
+                           new ReposNotifyHandler(errorOut));
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -192,7 +194,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.hotcopy(path, targetPath, cleanLogs);
+            aSVNAdmin.hotcopy(new File(path), new File(targetPath), cleanLogs);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -211,7 +213,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.listDBLogs(path, receiver);
+            aSVNAdmin.listDBLogs(new File(path), receiver);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -230,7 +232,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.listUnusedDBLogs(path, receiver);
+            aSVNAdmin.listUnusedDBLogs(new File(path), receiver);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -290,10 +292,10 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.load(path, new InputWrapper(dataInput),
-                           new OutputWrapper(messageOutput),
+            aSVNAdmin.load(new File(path), new InputWrapper(dataInput),
                            ignoreUUID, forceUUID, usePreCommitHook,
-                           usePostCommitHook, relativePath);
+                           usePostCommitHook, relativePath,
+                           new ReposNotifyHandler(messageOutput));
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -312,7 +314,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.lstxns(path, receiver);
+            aSVNAdmin.lstxns(new File(path), receiver);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -330,7 +332,7 @@ public class SVNAdmin
     {
         try
         {
-            return aSVNAdmin.recover(path);
+            return aSVNAdmin.recover(new File(path), null);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -349,7 +351,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.rmtxns(path, transactions);
+            aSVNAdmin.rmtxns(new File(path), transactions);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -372,7 +374,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.setRevProp(path,
+            aSVNAdmin.setRevProp(new File(path),
                                  rev == null ? null : rev.toApache(),
                                  "svn:log", message,
                                  !bypassHooks, !bypassHooks);
@@ -406,7 +408,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.setRevProp(path,
+            aSVNAdmin.setRevProp(new File(path),
                                  rev == null ? null : rev.toApache(),
                                  propName, propValue,
                                  usePreRevPropChangeHook,
@@ -434,9 +436,10 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.verify(path, new OutputWrapper(messageOut),
+            aSVNAdmin.verify(new File(path),
                              start == null ? null : start.toApache(),
-                             end == null ? null : end.toApache());
+                             end == null ? null : end.toApache(),
+                             new ReposNotifyHandler(messageOut));
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -456,7 +459,8 @@ public class SVNAdmin
         try
         {
             Set<org.apache.subversion.javahl.Lock> aLocks =
-                                                    aSVNAdmin.lslocks(path);
+                                                    aSVNAdmin.lslocks(
+                                                        new File(path));
             Lock[] locks = new Lock[aLocks.size()];
 
             int i = 0;
@@ -486,7 +490,7 @@ public class SVNAdmin
     {
         try
         {
-            aSVNAdmin.rmlocks(path, locks);
+            aSVNAdmin.rmlocks(new File(path), locks);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -547,4 +551,106 @@ public class SVNAdmin
             inputer.close();
         }
     }
+
+    private class ReposNotifyHandler
+        implements org.apache.subversion.javahl.callback.ReposNotifyCallback
+    {
+        private OutputInterface outputer;
+
+        public ReposNotifyHandler(OutputInterface outputer)
+        {
+            this.outputer = outputer;
+        }
+
+        public void onNotify(org.apache.subversion.javahl.ReposNotifyInformation
+                                                                           info)
+        {
+            String val;
+
+            switch (info.getAction())
+            {
+                case warning:
+                    val = info.getWarning();
+                    break;
+
+                case dump_rev_end:
+                    val = "* Dumped revision " + info.getRevision() + ".\n";
+                    break;
+
+                case verify_rev_end:
+                    val = "* Verified revision " + info.getRevision() + ".\n";
+                    break;
+
+                case load_txn_committed:
+                    if (info.getOldRevision() == Revision.SVN_INVALID_REVNUM)
+                        val = "\n------- Committed revision " +
+                              info.getNewRevision() + " >>>\n\n";
+                    else
+                        val = "\n------- Committed new rev " +
+                               info.getNewRevision() +
+                              " (loaded from original rev " +
+                              info.getOldRevision() +
+                              ") >>>\n\n";
+                    break;
+
+                case load_node_start:
+                    switch (info.getNodeAction())
+                    {
+                        case change:
+                            val = "     * editing path : " + info.getPath() +
+                                  " ...";
+                            break;
+
+                        case deleted:
+                            val = "     * deleting path : " + info.getPath() +
+                                  " ...";
+                            break;
+
+                        case add:
+                            val = "     * adding path : " + info.getPath() +
+                                  " ...";
+                            break;
+
+                        case replace:
+                            val = "     * replacing path : " + info.getPath() +
+                                  " ...";
+                            break;
+
+                        default:
+                            val = null;
+                    }
+                    break;
+
+                case load_node_done:
+                    val = " done.\n";
+                    break;
+
+                case load_copied_node:
+                    val = "COPIED...";
+                    break;
+
+                case load_txn_start:
+                    val = "<<< Started new transaction, based on " +
+                          "original revision " + info.getOldRevision() + "\n";
+                    break;
+
+                case load_normalized_mergeinfo:
+                    val = " removing '\\r' from svn:mergeinfo ...";
+                    break;
+
+                default:
+                    val = null;
+            }
+
+            if (val != null)
+                try 
+                {
+                    outputer.write(val.getBytes());
+                }
+                catch (IOException ex)
+                {
+                    ; // ignore
+                }
+        }
+    }
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java Tue Aug 10 22:07:24 2010
@@ -603,9 +603,9 @@ public class SVNClient implements SVNCli
     public void notification2(final Notify2 notify)
     {
         aSVNClient.notification2(
-          new org.apache.subversion.javahl.callback.NotifyCallback () {
+          new org.apache.subversion.javahl.callback.ClientNotifyCallback () {
             public void onNotify(
-                        org.apache.subversion.javahl.NotifyInformation aInfo)
+                        org.apache.subversion.javahl.ClientNotifyInformation aInfo)
             {
                 notify.onNotify(new NotifyInformation(aInfo));
             }
@@ -2248,7 +2248,19 @@ public class SVNClient implements SVNCli
     {
         try
         {
-            return new Info(aSVNClient.info(path));
+        	final List<org.apache.subversion.javahl.Info2> infos =
+        		new ArrayList<org.apache.subversion.javahl.Info2>();
+        	aSVNClient.info2(path,
+        					org.apache.subversion.javahl.Revision.HEAD,
+        					org.apache.subversion.javahl.Revision.HEAD,
+        					org.apache.subversion.javahl.Depth.empty,
+        				    null, new org.apache.subversion.javahl.callback.InfoCallback()
+        	{
+				public void singleInfo(org.apache.subversion.javahl.Info2 info) {
+					infos.add(info);
+				}
+        	});
+            return new Info(infos.get(0));
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Tue Aug 10 22:07:24 2010
@@ -129,58 +129,6 @@ public class BasicTests extends SVNTests
     }
 
     /**
-     * Tests Subversion path validation.
-     */
-    public void testPathValidation() throws Throwable
-    {
-        // Rather than segfaulting, JavaHL considers null an invalid path.
-        assertFalse("Path validation produced false-positive for null path",
-                    Path.isValid(null));
-
-        String path = "valid-path";
-        assertTrue("Validation check of valid path '" + path +
-                   "' should succeed", Path.isValid(path));
-
-        // File names cannot contain control characters.
-        path = "invalid-\u0001-path";
-        assertFalse("Validation check of invalid path '" + path +
-                    "' (which contains control characters) should fail",
-                    Path.isValid(path));
-    }
-
-    /**
-     * Tests Subversion path as URL predicate.
-     */
-    public void testPathIsURL() throws Throwable
-    {
-        try
-        {
-            Path.isURL(null);
-            fail("A null path should raise an exception");
-        }
-        catch (IllegalArgumentException expected)
-        {
-        }
-
-        // Subversion "paths" which aren't URLs.
-        String[] paths = { "/path", "c:\\path" };
-        for (String path : paths)
-        {
-            assertFalse("'" + path + "' should not be considered a URL",
-                        Path.isURL(path));
-        }
-
-        // Subversion "paths" which are URLs.
-        paths = new String[] { "http://example.com", "svn://example.com",
-                               "svn+ssh://example.com", "file:///src/svn/" };
-        for (String path : paths)
-        {
-            assertTrue("'" + path + "' should be considered a URL",
-                       Path.isURL(path));
-        }
-    }
-
-    /**
      * Tests Mergeinfo and RevisionRange classes.
      * @since 1.5
      */
@@ -2447,11 +2395,11 @@ public class BasicTests extends SVNTests
 
         // Add a "begin merge" notification handler.
         final Revision[] actualRange = new Revision[2];
-        NotifyCallback notify = new NotifyCallback()
+        ClientNotifyCallback notify = new ClientNotifyCallback()
         {
-            public void onNotify(NotifyInformation info)
+            public void onNotify(ClientNotifyInformation info)
             {
-                if (info.getAction() == NotifyInformation.Action.merge_begin)
+                if (info.getAction() == ClientNotifyInformation.Action.merge_begin)
                 {
                     RevisionRange r = info.getMergeRange();
                     actualRange[0] = r.getFromRevision();
@@ -2785,6 +2733,42 @@ public class BasicTests extends SVNTests
 
         return thisTest;
     }
+    
+    /**
+     * Test the patch API.  This doesn't yet test the results, it only ensures
+     * that execution goes down to the C layer and back.
+     * @throws Throwable
+     */
+    public void testPatch() throws SubversionException, IOException
+    {
+    	OneTest thisTest = new OneTest(true);
+    	File patchInput = new File(super.localTmp, thisTest.testName);
+    	final String iotaPath = thisTest.getWCPath().replace('\\', '/') + "/iota";
+        final String NL = System.getProperty("line.separator");
+    	
+    	final String patchText = "Index: iota" + NL +
+            "===================================================================" + NL +
+            "--- iota\t(revision 1)" + NL +
+            "+++ iota\t(working copy)" + NL +
+            "@@ -1 +1,2 @@" + NL +
+            " This is the file 'iota'." + NL +
+            "+No, this is *really* the file 'iota'." + NL;
+    	
+        PrintWriter writer = new PrintWriter(new FileOutputStream(patchInput));
+        writer.print(patchText);
+        writer.flush();
+        writer.close();
+    	
+    	client.patch(patchInput.getAbsolutePath(), iotaPath, false, 0,
+    			false, true, true,
+    			new PatchCallback() {
+					public boolean singlePatch(String pathFromPatchfile,
+                            String patchPath, String rejectPath) {
+						// Do nothing, right now.
+                        return false;
+					}
+    	});
+    }
 
     /**
      * Test the {@link SVNClientInterface.diff()} APIs.
@@ -3084,9 +3068,9 @@ public class BasicTests extends SVNTests
     {
         // build the test setup
         OneTest thisTest = new OneTest();
-        NotifyCallback notify = new NotifyCallback()
+        ClientNotifyCallback notify = new ClientNotifyCallback()
         {
-            public void onNotify(NotifyInformation info)
+            public void onNotify(ClientNotifyInformation info)
             {
                 client.isAdminDirectory(".svn");
             }
@@ -3102,9 +3086,9 @@ public class BasicTests extends SVNTests
     {
         // build the test setup
         OneTest thisTest = new OneTest();
-        NotifyCallback notify = new NotifyCallback()
+        ClientNotifyCallback notify = new ClientNotifyCallback()
         {
-            public void onNotify(NotifyInformation info)
+            public void onNotify(ClientNotifyInformation info)
             {
                 try
                 {

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNAdminTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNAdminTests.java?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNAdminTests.java (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNAdminTests.java Tue Aug 10 22:07:24 2010
@@ -63,7 +63,7 @@ public class SVNAdminTests extends SVNTe
     {
         OneTest thisTest = new OneTest(false);
         final String MSG = "Initial repository creation";
-        admin.setRevProp(thisTest.getRepositoryPath(), Revision.getInstance(0),
+        admin.setRevProp(thisTest.getRepository(), Revision.getInstance(0),
                          "svn:log", MSG, false, false);
         Map<String, byte[]> pdata = client.revProperties(
                                       makeReposUrl(thisTest.getRepository()),
@@ -72,6 +72,32 @@ public class SVNAdminTests extends SVNTe
         String logMessage = new String(pdata.get("svn:log"));
         assertEquals("expect rev prop change to take effect", MSG, logMessage);
     }
+
+    /* This test only tests the call down to the C++ layer. */
+    public void testVerify()
+        throws SubversionException, IOException
+    {
+        OneTest thisTest = new OneTest(false);
+        admin.verify(thisTest.getRepository(), Revision.getInstance(0),
+                     Revision.HEAD, null);
+    }
+
+    /* This test only tests the call down to the C++ layer. */
+    public void testUpgrade()
+        throws SubversionException, IOException
+    {
+        OneTest thisTest = new OneTest(false);
+        admin.upgrade(thisTest.getRepository(), null);
+    }
+
+    /* This test only tests the call down to the C++ layer. */
+    public void testPack()
+        throws SubversionException, IOException
+    {
+        OneTest thisTest = new OneTest(false);
+        admin.pack(thisTest.getRepository(), null);
+    }
+
     public void testLoadRepo()
         throws SubversionException, IOException
     {
@@ -101,9 +127,8 @@ public class SVNAdminTests extends SVNTe
                 "subversion/bindings/javahl");
         File dump = new File(testSrcdir, "tests/data/issue2979.dump");
         InputStream input = new FileInputStream(dump);
-        OutputStream loadLog = new IgnoreOutputer();
-        admin.load(thisTest.getRepositoryPath(),
-                   input, loadLog, true, true, false, false, null);
+        admin.load(thisTest.getRepository(),
+                   input, true, true, false, false, null, null);
         // should have two revs after the load
         infoHolder[0] = null;
         client.info2(repoUrl, Revision.HEAD, Revision.HEAD,

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java Tue Aug 10 22:07:24 2010
@@ -233,15 +233,13 @@ class SVNTests extends TestCase
         File greekFiles = buildGreekFiles();
         greekRepos = new File(localTmp, "repos");
         greekDump = new File(localTmp, "greek_dump");
-        admin.create(greekRepos.getAbsolutePath(), true,false, null,
-                     this.fsType);
+        admin.create(greekRepos, true,false, null, this.fsType);
         addExpectedCommitItem(greekFiles.getAbsolutePath(), null, null,
                               NodeKind.none, CommitItemStateFlags.Add);
         client.doImport(greekFiles.getAbsolutePath(), makeReposUrl(greekRepos),
                         null, Depth.infinity, false, false, null);
-        admin.dump(greekRepos.getAbsolutePath(),
-                   new FileOutputStream(greekDump), new IgnoreOutputer(),
-                   null, null, false, false);
+        admin.dump(greekRepos, new FileOutputStream(greekDump),
+                   null, null, false, false, null);
     }
 
     /**
@@ -429,18 +427,6 @@ class SVNTests extends TestCase
     }
 
     /**
-     * internal class extends OutputStream, but ignores the data
-     */
-    public class IgnoreOutputer extends OutputStream
-    {
-        public void write(int b) throws IOException
-        {
-            /* Just do nothing. */
-            return;
-        }
-    }
-
-    /**
      * Represents the repository and (possibly) the working copy for
      * one test.
      */
@@ -569,15 +555,6 @@ class SVNTests extends TestCase
         }
 
         /**
-         * Return the name of the directory of the repository
-         * @return the name of repository directory
-         */
-        public String getRepositoryPath()
-        {
-            return repository.getAbsolutePath();
-        }
-
-        /**
          * Return the working copy directory
          * @return the working copy directory
          */
@@ -659,14 +636,11 @@ class SVNTests extends TestCase
             File repos = new File(repositories, this.testName);
             removeDirOrFile(repos);
             // create and load the repository from the default repository dump
-            admin.create(repos.getAbsolutePath(), true, false,
-                         conf.getAbsolutePath(), fsType);
+            admin.create(repos, true, false, conf, fsType);
             if (loadGreek)
             {
-                admin.load(repos.getAbsolutePath(),
-                           new FileInputStream(greekDump),
-                           new IgnoreOutputer(), false, false, false, false,
-                           null);
+                admin.load(repos, new FileInputStream(greekDump), false, false,
+                           false, false, null, null);
             }
             return repos;
         }
@@ -832,7 +806,7 @@ class SVNTests extends TestCase
         }
     }
 
-    class MyNotifier implements NotifyCallback
+    class MyNotifier implements ClientNotifyCallback
     {
 
         /**
@@ -842,7 +816,7 @@ class SVNTests extends TestCase
          *
          * @param info everything to know about this event
          */
-        public void onNotify(NotifyInformation info)
+        public void onNotify(ClientNotifyInformation info)
         {
         }
     }

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/swig/python/tests/wc.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/swig/python/tests/wc.py?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/swig/python/tests/wc.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/swig/python/tests/wc.py Tue Aug 10 22:07:24 2010
@@ -178,7 +178,7 @@ class SubversionWorkingCopyTestCase(unit
                                               target,
                                               None,  # SvnConfig
                                               True,  # recursive
-                                              False, # get_all
+                                              True, # get_all
                                               False, # no_ignore
                                               status_func,
                                               None,  # cancel_func
@@ -212,9 +212,11 @@ class SubversionWorkingCopyTestCase(unit
 
   def test_get_pristine_copy_path(self):
       path_to_file = '%s/trunk/README.txt' % self.path
-      path_to_text_base = '%s/trunk/%s/text-base/README.txt.svn-base' % (self.path,
-        wc.get_adm_dir())
-      self.assertEqual(path_to_text_base, wc.get_pristine_copy_path(path_to_file))
+      path_to_text_base = wc.get_pristine_copy_path(path_to_file)
+      text_base = open(path_to_text_base).read()
+      # TODO: This test should modify the working file first, to ensure the
+      # path isn't just the path to the working file.
+      self.assertEqual(text_base, 'A test.\n')
 
   def test_entries_read(self):
       entries = wc.entries_read(self.wc, True)
@@ -439,8 +441,11 @@ class SubversionWorkingCopyTestCase(unit
     self.assertEqual(got_diffs, expected_diffs)
 
   def tearDown(self):
-      wc.adm_close(self.wc)
-      core.svn_io_remove_dir(self.path)
+      try:
+        wc.adm_close(self.wc)
+        core.svn_io_remove_dir(self.path)
+      except:
+        print('Error in tearDown: %s' % sys.exc_info()[0])
       self.fs = None
       self.repos = None
 

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/svn/core.rb
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/svn/core.rb?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/svn/core.rb (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/svn/core.rb Tue Aug 10 22:07:24 2010
@@ -669,16 +669,16 @@ module Svn
 
       def infinity_or_empty_from_recurse(depth_or_recurse)
         case depth_or_recurse
-          when true  : DEPTH_INFINITY
-          when false : DEPTH_EMPTY
+          when true  then DEPTH_INFINITY
+          when false then DEPTH_EMPTY
           else depth_or_recurse
         end
       end
 
       def infinity_or_immediates_from_recurse(depth_or_recurse)
         case depth_or_recurse
-          when true  : DEPTH_INFINITY
-          when false : DEPTH_IMMEDIATES
+          when true  then DEPTH_INFINITY
+          when false then DEPTH_IMMEDIATES
           else depth_or_recurse
         end
       end

Modified: subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/test/test_wc.rb
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/test/test_wc.rb?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/test/test_wc.rb (original)
+++ subversion/branches/ignore-mergeinfo/subversion/bindings/swig/ruby/test/test_wc.rb Tue Aug 10 22:07:24 2010
@@ -1052,9 +1052,9 @@ EOE
     Svn::Wc::AdmAccess.open(nil, @wc_path) do |access|
       access.set_changelist(path, "456", nil, notify_collector)
     end
-    assert_equal([[File.expand_path(path), Svn::Error::WcChangelistMove],
-                  [File.expand_path(path), NilClass]],
-                 notifies.collect {|notify| [notify.path, notify.err.class]})
+    assert_equal([[File.expand_path(path), Svn::Wc::NOTIFY_CHANGELIST_CLEAR],
+                  [File.expand_path(path), Svn::Wc::NOTIFY_CHANGELIST_SET]],
+                 notifies.collect {|notify| [notify.path, notify.action]})
 
     notifies = []
 

Modified: subversion/branches/ignore-mergeinfo/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/private/svn_wc_private.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/private/svn_wc_private.h Tue Aug 10 22:07:24 2010
@@ -44,24 +44,6 @@ extern "C" {
 #endif /* __cplusplus */
 
 
-/** Similar to svn_wc__get_entry() and svn_wc__entry_versioned().
- *
- * This function allows callers in libsvn_client to directly fetch entry data
- * without having to open up an adm_access baton.  Its error and return
- * semantics are the same as svn_wc__entry_versioned(), and parameters are the
- * same as svn_wc__get_entry() (defined in libsvn_wc/entries.h).
- */
-svn_error_t *
-svn_wc__get_entry_versioned(const svn_wc_entry_t **entry,
-                            svn_wc_context_t *wc_ctx,
-                            const char *local_abspath,
-                            svn_node_kind_t kind,
-                            svn_boolean_t show_hidden,
-                            svn_boolean_t need_parent_stub,
-                            apr_pool_t *result_pool,
-                            apr_pool_t *scratch_pool);
-
-
 /** Given a @a local_abspath with a @a wc_ctx, set @a *switched to
  * TRUE if @a local_abspath is switched, otherwise set @a *switched to FALSE.
  * All temporary allocations are done in * @a scratch_pool.
@@ -367,6 +349,20 @@ svn_wc__node_get_url(const char **url,
                      apr_pool_t *result_pool,
                      apr_pool_t *scratch_pool);
 
+/**
+ * Set @a *repos_relpath to the corresponding repos_relpath for @a
+ * local_abspath, using @a wc_ctx. If the node is added, return the
+ * repos_relpath it will have in the repository.
+ *
+ * If @a local_abspath is not in the working copy, return @c
+ * SVN_ERR_WC_PATH_NOT_FOUND. 
+ * */
+svn_error_t *
+svn_wc__node_get_repos_relpath(const char **repos_relpath,
+                               svn_wc_context_t *wc_ctx,
+                               const char *local_abspath,
+                               apr_pool_t *result_pool,
+                               apr_pool_t *scratch_pool);
 
 /**
  * Set @a *copyfrom_url to the corresponding copy-from URL (allocated
@@ -376,14 +372,20 @@ svn_wc__node_get_url(const char **url,
  * copy information (versus being a member of the subtree beneath such
  * a copy target).
  *
- * If @a local_abspath is not copied, set @a *copyfrom_rev to NULL and
+ * @a copyfrom_root_url and @a copyfrom_repos_relpath return the exact same
+ * information as @a copyfrom_url, just still separated as root and relpath.
+ *
+ * If @a local_abspath is not copied, set @a *copyfrom_root_url, 
+ * @a *copyfrom_repos_relpath and @a copyfrom_url to NULL and
  * @a *copyfrom_rev to @c SVN_INVALID_REVNUM.
  *
- * Any of @a copyfrom_url, @a copyfrom_rev, or @a is_copy_target may
- * be NULL if the caller doesn't care about those values.
+ * Any out parameters may be NULL if the caller doesn't care about those
+ * values.
  */
 svn_error_t *
-svn_wc__node_get_copyfrom_info(const char **copyfrom_url,
+svn_wc__node_get_copyfrom_info(const char **copyfrom_root_url,
+                               const char **copyfrom_repos_relpath,
+                               const char **copyfrom_url,
                                svn_revnum_t *copyfrom_rev,
                                svn_boolean_t *is_copy_target,
                                svn_wc_context_t *wc_ctx,
@@ -392,8 +394,8 @@ svn_wc__node_get_copyfrom_info(const cha
                                apr_pool_t *scratch_pool);
 
 /**
- * Recursively call @a callbacks->found_node for all nodes underneath
- * @a local_abspath.
+ * Recursively call @a walk_callback for all nodes underneath
+ * @a local_abspath, restricted by @a walk_depth.
  */
 svn_error_t *
 svn_wc__node_walk_children(svn_wc_context_t *wc_ctx,
@@ -622,6 +624,25 @@ svn_wc__node_check_conflicts(svn_boolean
                              apr_pool_t *result_pool,
                              apr_pool_t *scratch_pool);
 
+/**
+ * A hack to remove the last entry from libsvn_client.  This simply fetches an
+ * entry, 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_info_bits(apr_time_t *text_time,
+                           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);
+
 
 /**
  * Recursively acquire write locks for @a local_abspath if
@@ -697,6 +718,38 @@ svn_wc__temp_get_keep_local(svn_boolean_
                             const char *local_abspath,
                             apr_pool_t *scratch_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);
+
+/**
+ * Calculates the schedule and copied status of a node as that would
+ * have been stored in an svn_wc_entry_t instance.
+ *
+ * If not @c NULL, @a schedule and @a copied are set to their calculated
+ * values.
+ */
+svn_error_t *
+svn_wc__node_get_schedule(svn_wc_schedule_t *schedule,
+                          svn_boolean_t *copied,
+                          svn_wc_context_t *wc_ctx,
+                          const char *local_abspath,
+                          apr_pool_t *scratch_pool);
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_client.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_client.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_client.h Tue Aug 10 22:07:24 2010
@@ -469,12 +469,6 @@ typedef struct svn_client_commit_item3_t
    * same lifetime as this data structure.
    */
   apr_array_header_t *outgoing_prop_changes;
-
-  /** adm_access of this item
-   *
-   * @since New in 1.7.
-   * ### This will be obsoleted by WC-NG. */
-  svn_wc_adm_access_t *adm_access;
 } svn_client_commit_item3_t;
 
 /** The commit candidate structure.
@@ -677,11 +671,16 @@ typedef svn_error_t *(*svn_client_get_co
  */
 
 /** Callback type used by svn_client_blame5() to notify the caller
- * that line @a line_no of the blamed file was last changed in
- * @a revision by @a author on @a date, and that the contents were
+ * that line @a line_no of the blamed file was last changed in @a revision
+ * which has the revision properties @a rev_props, and that the contents were
  * @a line.
  *
- * If svn_client_blame4() was called with @a include_merged_revisions set to
+ * @a start_revnum and @a end_revnum contain the start and end revision 
+ * number of the entire blame operation, as determined from the repository
+ * inside svn_client_blame5(). This can be useful for the blame receiver 
+ * to format the blame output.
+ *
+ * If svn_client_blame5() was called with @a include_merged_revisions set to
  * TRUE, @a merged_revision, @a merged_rev_props and @a merged_path will be
  * set, otherwise they will be NULL. @a merged_path will be set to the
  * absolute repository path.
@@ -691,12 +690,14 @@ typedef svn_error_t *(*svn_client_get_co
  * @note If there is no blame information for this line, @a revision will be
  * invalid and @a rev_props will be NULL. In this case @a local_change
  * will be true if the reason there is no blame information is that the line
- * was modified locally, In all other cases @a local_change will be false.
+ * was modified locally. In all other cases @a local_change will be false.
  *
  * @since New in 1.7.
  */
 typedef svn_error_t *(*svn_client_blame_receiver3_t)(
   void *baton,
+  svn_revnum_t start_revnum,
+  svn_revnum_t end_revnum,
   apr_int64_t line_no,
   svn_revnum_t revision,
   apr_hash_t *rev_props,
@@ -708,8 +709,9 @@ typedef svn_error_t *(*svn_client_blame_
   apr_pool_t *pool);
 
 /**
- * Similar to #svn_client_blame_receiver3_t, but with separate revision
- * properties and without information about local_only changes
+ * Similar to #svn_client_blame_receiver3_t, but with separate author and
+ * date revision properties instead of all revision properties, and without
+ * information about local changes.
  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  *
@@ -1842,6 +1844,183 @@ svn_client_commit(svn_client_commit_info
  */
 
 /**
+ * Structure for holding the "status" of a working copy item.
+ *
+ * The item's entry data is in @a entry, augmented and possibly shadowed
+ * by the other fields.  @a entry is @c NULL if this item is not under
+ * version control.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions.  Therefore, to preserve binary compatibility, users
+ * should not directly allocate structures of this type.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_client_status_t
+{
+  /** The kind of node as recorded in the working copy */
+  svn_node_kind_t kind;
+
+  /** The absolute path to the node */
+  const char *local_abspath;
+
+  /** If the path is under version control, versioned is TRUE, otherwise
+   * FALSE. */
+  svn_boolean_t versioned;
+
+  /** Set to TRUE if the node is the victim of some kind of conflict. */
+  svn_boolean_t conflicted;
+
+  /** The status of the node, based on the restructuring changes and if the
+   * node has no restructuring changes the text and prop status. */
+  enum svn_wc_status_kind node_status;
+
+  /** The status of the text of the node, not including restructuring changes.
+   * Valid values are: svn_wc_status_none, svn_wc_status_normal,
+   * svn_wc_status_modified and svn_wc_status_conflicted. */
+  enum svn_wc_status_kind text_status;
+
+  /** The status of the entry's properties.
+   * Valid values are: svn_wc_status_none, svn_wc_status_normal,
+   * svn_wc_status_modified and svn_wc_status_conflicted. */
+  enum svn_wc_status_kind prop_status;
+
+  /** a node can be 'locked' if a working copy update is in progress or
+   * 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;
+
+  /** Base revision. */
+  svn_revnum_t revision;
+
+  /** Last revision this was changed */
+  svn_revnum_t changed_rev;
+
+  /** Date of last commit. */
+  apr_time_t changed_date;
+
+  /** Last commit author of this item */
+  const char *changed_author;
+
+  /** The URL of the repository */
+  const char *repos_root_url;
+
+  /** The in-repository path relative to the repository root. 
+   * Use svn_path_url_component2() to join this value to the
+   * repos_root_url to get the full URL.
+   */
+  const char *repos_relpath;
+
+    /** 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;
+
+  /** 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 locally present lock. (Values of path, token, owner, comment and
+   * are available if a lock is present) */
+  const svn_lock_t *lock;
+
+  /** Which changelist this item is part of, or NULL if not part of any. */
+  const char *changelist;
+
+  /** The depth of the node as recorded in the working copy
+   * (#svn_depth_unknown for files or when no depth is recorded) */
+  svn_depth_t depth;
+
+  /**
+   * @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 node kind of the youngest commit, or #svn_node_none
+   * if not out of date. */
+  svn_node_kind_t ood_kind;
+
+  /** The status of the node, based on the text status if the node has no
+   * restructuring changes */
+  enum svn_wc_status_kind repos_node_status;
+
+  /** 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. */
+  const svn_lock_t *repos_lock;
+
+  /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM
+   * if not out of date. */
+  svn_revnum_t ood_changed_rev;
+
+  /** Set to the most recent commit date, or @c 0 if not out of date. */
+  apr_time_t ood_changed_date;
+
+  /** 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_changed_author;
+
+  /** @} */
+
+  /** Reserved for libsvn_clients internal use; this value is only to be used for
+   * libsvn_client backwards compatibility wrappers, This value may be NULL or
+   * to other data in future versions. */
+  const void *backwards_compatibility_baton;
+
+  /* NOTE! Please update svn_client_status_dup() when adding new fields here. */
+} svn_client_status_t;
+
+/**
+ * Return a duplicate of @a status, allocated in @a result_pool. No part of the new
+ * structure will be shared with @a status.
+ *
+ * @since New in 1.7.
+ */
+svn_client_status_t *
+svn_client_status_dup(const svn_client_status_t *status,
+                      apr_pool_t *result_pool);
+
+/**
+ * A callback for reporting a @a status about @a local_abspath.
+ *
+ * @a baton is a closure object; it should be provided by the
+ * implementation, and passed by the caller.
+ *
+ * @a scratch_pool will be cleared between invocations to the callback.
+ *
+ * ### we might be revamping the status infrastructure, and this callback
+ * ### could totally disappear by the end of 1.7 development. however, we
+ * ### need to mark the STATUS parameter as "const" so that it is easier
+ * ### to reason about who/what can modify those structures.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_client_status_func_t)(
+                                            void *baton,
+                                            const char *path,
+                                            const svn_client_status_t *status,
+                                            apr_pool_t *scratch_pool);
+
+/**
  * Given @a path to a working copy directory (or single file), call
  * @a status_func/status_baton with a set of #svn_wc_status_t *
  * structures which describe the status of @a path, and its children
@@ -1887,10 +2066,9 @@ svn_client_commit(svn_client_commit_info
  */
 svn_error_t *
 svn_client_status5(svn_revnum_t *result_rev,
+                   svn_client_ctx_t *ctx,
                    const char *path,
                    const svn_opt_revision_t *revision,
-                   svn_wc_status_func4_t status_func,
-                   void *status_baton,
                    svn_depth_t depth,
                    svn_boolean_t get_all,
                    svn_boolean_t update,
@@ -1898,7 +2076,8 @@ svn_client_status5(svn_revnum_t *result_
                    svn_boolean_t ignore_externals,
                    svn_boolean_t ignore_mergeinfo,
                    const apr_array_header_t *changelists,
-                   svn_client_ctx_t *ctx,
+                   svn_client_status_func_t status_func,
+                   void *status_baton,
                    apr_pool_t *scratch_pool);
 
 /**
@@ -2345,6 +2524,10 @@ svn_client_blame(const char *path_or_url
  * against their copyfrom source, and will appear in the diff output
  * in their entirety, as if they were newly added.
  *
+ * If @a use_git_diff_format is TRUE, then the git's extended diff format
+ * will be used.
+ * ### Do we need to say more about the format? A reference perhaps?
+ *
  * Generated headers are encoded using @a header_encoding.
  *
  * Diff output will not be generated for binary files, unless @a
@@ -2353,7 +2536,9 @@ svn_client_blame(const char *path_or_url
  *
  * @a diff_options (an array of <tt>const char *</tt>) is used to pass
  * additional command line options to the diff processes invoked to compare
- * files.
+ * files. @a diff_options is allowed to be @c NULL, in which case a value
+ * for this option might still be obtained from the Subversion configuration
+ * file via client context @a ctx.
  *
  * The authentication baton cached in @a ctx is used to communicate with
  * the repository.
@@ -2390,6 +2575,7 @@ svn_client_diff5(const apr_array_header_
                  svn_boolean_t no_diff_deleted,
                  svn_boolean_t show_copies_as_adds,
                  svn_boolean_t ignore_content_type,
+                 svn_boolean_t use_git_diff_format,
                  svn_boolean_t ignore_mergeinfo,
                  const char *header_encoding,
                  apr_file_t *outfile,
@@ -2401,7 +2587,8 @@ svn_client_diff5(const apr_array_header_
 
 /**
  * Similar to svn_client_diff5(), but with  @a ignore_mergeinfo passed as
- * @c FALSE and @a show_copies_as_adds set to @c FALSE.
+ * @c FALSE, @a show_copies_as_adds set to @c FALSE and @a use_git_diff_format
+ * set to @c FALSE.
  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  *
@@ -2525,6 +2712,7 @@ svn_client_diff_peg5(const apr_array_hea
                      svn_boolean_t no_diff_deleted,
                      svn_boolean_t ignore_content_type,
                      svn_boolean_t show_copies_as_adds,
+                     svn_boolean_t use_git_diff_format,
                      svn_boolean_t ignore_mergeinfo,
                      const char *header_encoding,
                      apr_file_t *outfile,
@@ -2536,7 +2724,8 @@ svn_client_diff_peg5(const apr_array_hea
 
 /**
  * Similar to svn_client_diff_peg5(), but with @a ignore_mergeinfo passed
- * as @a FALSE @a show_copies_as_adds set to @c FALSE.
+ * as @a FALSE,  @a show_copies_as_adds set to @c FALSE and
+ * @a use_git_diff_format set to @c FALSE.
  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  *

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_config.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_config.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_config.h Tue Aug 10 22:07:24 2010
@@ -97,6 +97,7 @@ typedef struct svn_config_t svn_config_t
 #define SVN_CONFIG_SECTION_HELPERS              "helpers"
 #define SVN_CONFIG_OPTION_EDITOR_CMD                "editor-cmd"
 #define SVN_CONFIG_OPTION_DIFF_CMD                  "diff-cmd"
+#define SVN_CONFIG_OPTION_DIFF_EXTENSIONS           "diff-extensions"
 #define SVN_CONFIG_OPTION_DIFF3_CMD                 "diff3-cmd"
 #define SVN_CONFIG_OPTION_DIFF3_HAS_PROGRAM_ARG     "diff3-has-program-arg"
 #define SVN_CONFIG_OPTION_MERGE_TOOL_CMD            "merge-tool-cmd"

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_diff.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_diff.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_diff.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_diff.h Tue Aug 10 22:07:24 2010
@@ -771,6 +771,21 @@ svn_diff_mem_string_output_merge(svn_str
  * rather than parse it, see svn_client_patch(). */
 
 /**
+ * Describes what operation has been performed on a file.
+ *
+ * @since New in 1.7.
+ */
+typedef enum svn_diff_operation_kind_e
+{
+  svn_diff_op_added,
+  svn_diff_op_deleted,
+  svn_diff_op_copied,
+  svn_diff_op_moved,
+  /* There's no tree changes, just text modifications. */
+  svn_diff_op_modified
+}svn_diff_operation_kind_t;
+
+/**
  * A single hunk inside a patch
  *
  * @since New in 1.7. */
@@ -852,6 +867,15 @@ typedef struct svn_patch_t {
    * An array containing an svn_hunk_t object for each hunk parsed
    * from the patch. */
   apr_array_header_t *hunks;
+
+  /**
+   * A hash table containing an array of svn_hunk_t object for each property
+   * parsed from the patch. The property names act as keys.  */
+  apr_hash_t *property_hunks;
+
+  /**
+   * Represents the operation performed on the file. */
+  svn_diff_operation_kind_t operation;
 } svn_patch_t;
 
 /**

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_dirent_uri.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_dirent_uri.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_dirent_uri.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_dirent_uri.h Tue Aug 10 22:07:24 2010
@@ -256,9 +256,9 @@ svn_dirent_dirname(const char *dirent,
  * @since New in 1.7.
  */
 void
-svn_dirent_split(const char *dirent,
-                 const char **dirpath,
+svn_dirent_split(const char **dirpath,
                  const char **base_name,
+                 const char *dirent,
                  apr_pool_t *pool);
 
 /** Divide the canonicalized @a relpath into @a *dirpath and @a
@@ -280,9 +280,9 @@ svn_dirent_split(const char *dirent,
  * @since New in 1.7.
  */
 void
-svn_relpath_split(const char *relpath,
-                  const char **dirpath,
+svn_relpath_split(const char **dirpath,
                   const char **base_name,
+                  const char *relpath,
                   apr_pool_t *pool);
 
 /** Get the basename of the specified canonicalized @a relpath.  The
@@ -338,9 +338,9 @@ svn_relpath_dirname(const char *relpath,
  * @since New in 1.7.
  */
 void
-svn_uri_split(const char *dirent,
-              const char **dirpath,
+svn_uri_split(const char **dirpath,
               const char **base_name,
+              const char *uri,
               apr_pool_t *pool);
 
 /** Get the basename of the specified canonicalized @a uri.  The
@@ -763,7 +763,7 @@ svn_uri_condense_targets(const char **pc
                          apr_pool_t *result_pool,
                          apr_pool_t *scratch_pool);
 
-/* Check that when @a path is joined to @a base_path, the resulting path
+/** Check that when @a path is joined to @a base_path, the resulting path
  * is still under BASE_PATH in the local filesystem. If not, return @c FALSE.
  * If @c TRUE is returned, @a *full_path will be set to the absolute path
  * of @a path, allocated in @a pool.
@@ -779,6 +779,26 @@ svn_dirent_is_under_root(char **full_pat
                          const char *path,
                          apr_pool_t *pool);
 
+/** Set @a *dirent to the path corresponding to the file:// URL @a url, using
+ * the platform-specific file:// rules.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_uri_get_dirent_from_file_url(const char **dirent,
+                                 const char *url,
+                                 apr_pool_t *pool);
+
+/** Set @a *url to a file:// URL, corresponding to @a dirent using the
+ * platform specific dirent and file:// rules.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_uri_get_file_url_from_dirent(const char **url,
+                                 const char *dirent,
+                                 apr_pool_t *pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_error_codes.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_error_codes.h Tue Aug 10 22:07:24 2010
@@ -470,7 +470,9 @@ SVN_ERROR_START
              SVN_ERR_WC_CATEGORY_START + 28,
              "Failed to locate 'copyfrom' path in working copy")
 
-  /** @since New in 1.5. */
+  /** @since New in 1.5.
+   * @deprecated This event is not an error, and is now reported
+   * via the standard notification mechanism instead. */
   SVN_ERRDEF(SVN_ERR_WC_CHANGELIST_MOVE,
              SVN_ERR_WC_CATEGORY_START + 29,
              "Moving a path from one changelist to another")

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_fs.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_fs.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_fs.h Tue Aug 10 22:07:24 2010
@@ -1894,6 +1894,10 @@ svn_fs_revision_proplist(apr_hash_t **ta
  * - @a fs is a filesystem, and @a rev is the revision in that filesystem
  *   whose property should change.
  * - @a name is the name of the property to change.
+ * - if @a old_value_p is not @c NULL, then @a *old_value_p is the expected old
+ *   value of the property, and changing the value will fail with error
+ *   #SVN_ERR_BAD_PROPERTY_VALUE if the present value of the property is not @a
+ *   *old_value_p.
  * - @a value is the new value of the property, or zero if the property should
  *   be removed altogether.
  *
@@ -1902,8 +1906,26 @@ svn_fs_revision_proplist(apr_hash_t **ta
  * via transactions.
  *
  * Do any necessary temporary allocation in @a pool.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
+svn_fs_change_rev_prop2(svn_fs_t *fs,
+                        svn_revnum_t rev,
+                        const char *name,
+                        const svn_string_t *const *old_value_p,
+                        const svn_string_t *value,
+                        apr_pool_t *pool);
+
+
+/** 
+ * Similar to svn_fs_change_rev_prop2(), but with @a old_value_p passed as
+ * @c NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_fs_change_rev_prop(svn_fs_t *fs,
                        svn_revnum_t rev,
                        const char *name,
@@ -2104,6 +2126,11 @@ typedef svn_error_t *(*svn_fs_get_locks_
  * get_locks_func / @a get_locks_baton.  Use @a pool for necessary
  * allocations.
  *
+ * @a depth limits the reported locks to those associated with paths
+ * within the specified depth of @a path, and must be one of the
+ * following values:  #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates, or #svn_depth_infinity.
+ *
  * If the @a get_locks_func callback implementation returns an error,
  * lock iteration will terminate and that error will be returned by
  * this function.
@@ -2115,7 +2142,24 @@ typedef svn_error_t *(*svn_fs_get_locks_
  * start a new Berkeley DB transaction (which is most of this svn_fs
  * API).  Yes, this is a nasty implementation detail to have to be
  * aware of.  We hope to fix this problem in the future.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_fs_get_locks2(svn_fs_t *fs,
+                  const char *path,
+                  svn_depth_t depth,
+                  svn_fs_get_locks_callback_t get_locks_func,
+                  void *get_locks_baton,
+                  apr_pool_t *pool);
+
+/** 
+ * Similar to svn_fs_get_locks2(), but with @a depth always passed as
+ * svn_depth_infinity.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_fs_get_locks(svn_fs_t *fs,
                  const char *path,
@@ -2143,7 +2187,15 @@ typedef enum
   svn_fs_pack_notify_start = 0,
 
   /** packing of the shard is completed */
-  svn_fs_pack_notify_end
+  svn_fs_pack_notify_end,
+
+  /** packing of the shard revprops has commenced
+      @since New in 1.7. */
+  svn_fs_pack_notify_start_revprop,
+
+  /** packing of the shard revprops has completed
+      @since New in 1.7. */
+  svn_fs_pack_notify_end_revprop
 
 } svn_fs_pack_notify_action_t;
 

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_io.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_io.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_io.h Tue Aug 10 22:07:24 2010
@@ -130,7 +130,8 @@ svn_io_check_resolved_path(const char *p
  * utf-8 encoded @a filename, in the directory @a dirpath.  The file handle is
  * returned in @a *file, and the name, which ends with @a suffix, is returned
  * in @a *unique_name, also utf8-encoded.  Either @a file or @a unique_name
- * may be @c NULL.
+ * may be @c NULL.  If @a file is @c NULL, the file will be created but not
+ * open.
  *
  * If @a delete_when is #svn_io_file_del_on_close, then the @c APR_DELONCLOSE
  * flag will be used when opening the file.  The @c APR_BUFFERED flag will
@@ -187,10 +188,11 @@ svn_io_open_uniquely_named(apr_file_t **
                            apr_pool_t *scratch_pool);
 
 
-/** Create a writable file in the directory @a dirpath. The file will have
- * an arbitrary and unique name, and the full path will be returned in
- * @a temp_path. The file will be returned in @a file. Both will be
- * allocated from @a result_pool.
+/** Create a writable file, with an arbitrary and unique name, in the
+ * directory @a dirpath.  Set @a *temp_path to its full path, and set
+ * @a *file to the file handle, both allocated from @a result_pool.  Either
+ * @a file or @a unique_name may be @c NULL.  If @a file is @c NULL, the file
+ * will be created but not open.
  *
  * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
  * (Note that when using the system-provided temp directory, it may not
@@ -299,6 +301,8 @@ svn_io_copy_file(const char *src,
 
 /** Copy permission flags from @a src onto the file at @a dst. Both
  * filenames are utf8-encoded filenames.
+ *
+ * @since New in 1.6.
  */
 svn_error_t *
 svn_io_copy_perms(const char *src,
@@ -1891,6 +1895,16 @@ svn_io_dir_read(apr_finfo_t *finfo,
                 apr_dir_t *thedir,
                 apr_pool_t *pool);
 
+/** Wrapper for apr_file_name_get().  @a *filename is utf8-encoded.
+ *
+ * @note The file name may be NULL.
+ *
+ * @since New in 1.7. */
+svn_error_t *
+svn_io_file_name_get(const char **filename,
+                     apr_file_t *file,
+                     apr_pool_t *pool);
+
 
 
 /** Version/format files.
@@ -1919,14 +1933,6 @@ svn_io_write_version_file(const char *pa
                           int version,
                           apr_pool_t *pool);
 
-/** Wrapper for apr_file_name_get().
- *
- * @since New in 1.7. */
-svn_error_t *
-svn_io_file_name_get(const char **filename,
-                     apr_file_t *file,
-                     apr_pool_t *pool);
-
 /** @} */
 
 #ifdef __cplusplus

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_opt.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_opt.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_opt.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_opt.h Tue Aug 10 22:07:24 2010
@@ -744,29 +744,6 @@ svn_opt_print_help(apr_getopt_t *os,
                    const char *footer,
                    apr_pool_t *pool);
 
-/* Return, in @a *true_targets_p, a copy of @a targets with peg revision
- * specifiers snipped off the end of each element.
- *
- * This function is useful for subcommands for which peg revisions
- * do not make any sense. Such subcommands still need to allow peg
- * revisions to be specified on the command line so that users of
- * the command line client can consistently escape '@' characters
- * in filenames by appending an '@' character, regardless of the
- * subcommand being used.
- *
- * If a peg revision is present but cannot be parsed, an error is thrown.
- * The user has likely forgotten to escape an '@' character in a filename.
- *
- * It is safe to pass the address of @a targets as @a true_targets_p.
- *
- * Do all allocations in @a pool.
- *
- * @since New in 1.7. */
-svn_error_t *
-svn_opt_eat_peg_revisions(apr_array_header_t **true_targets_p,
-                          const apr_array_header_t *targets,
-                          apr_pool_t *pool);
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_ra.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_ra.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_ra.h Tue Aug 10 22:07:24 2010
@@ -1155,7 +1155,10 @@ svn_ra_do_switch(svn_ra_session_t *sessi
  * represented by the @a session's URL, or empty if the entire directory
  * is meant to be examined.
  *
- * Get status only as deeply as @a depth indicates.
+ * Get status as deeply as @a depth indicates. If @a depth is
+ * #svn_depth_unknown, get the status down to the ambient depth of the
+ * working copy. If @depth is deeper than the working copy, include changes
+ * that would be needed to populate the working copy to that depth.
  *
  * The caller may not perform any RA operations using @a session
  * before finishing the report, and may not perform any RA operations
@@ -1689,6 +1692,11 @@ svn_ra_get_lock(svn_ra_session_t *sessio
  * Set @a *locks to a hashtable which represents all locks on or
  * below @a path.
  *
+ * @a depth limits the returned locks to those associated with paths
+ * within the specified depth of @a path, and must be one of the
+ * following values:  #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates, or #svn_depth_infinity.
+ *
  * The hashtable maps (const char *) absolute fs paths to (const
  * svn_lock_t *) structures.  The hashtable -- and all keys and
  * values -- are allocated in @a pool.
@@ -1700,8 +1708,23 @@ svn_ra_get_lock(svn_ra_session_t *sessio
  * server doesn't implement it, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is
  * returned.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_get_locks2(svn_ra_session_t *session,
+                  apr_hash_t **locks,
+                  const char *path,
+                  svn_depth_t depth,
+                  apr_pool_t *pool);
+
+/**
+ * Similar to svn_ra_get_locks2(), but with @a depth always passed as
+ * #svn_depth_infinity.
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_ra_get_locks(svn_ra_session_t *session,
                  apr_hash_t **locks,

Modified: subversion/branches/ignore-mergeinfo/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/include/svn_repos.h?rev=984234&r1=984233&r2=984234&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/include/svn_repos.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/include/svn_repos.h Tue Aug 10 22:07:24 2010
@@ -56,6 +56,25 @@ const svn_version_t *
 svn_repos_version(void);
 
 
+/* Some useful enums.  They need to be declared here for the notification
+   system to pick them up. */
+/** The different "actions" attached to nodes in the dumpfile. */
+enum svn_node_action
+{
+  svn_node_action_change,
+  svn_node_action_add,
+  svn_node_action_delete,
+  svn_node_action_replace
+};
+
+/** The different policies for processing the UUID in the dumpfile. */
+enum svn_repos_load_uuid
+{
+  svn_repos_load_uuid_default,
+  svn_repos_load_uuid_ignore,
+  svn_repos_load_uuid_force
+};
+
 
 /** Callback type for checking authorization on paths produced by (at
  * least) svn_repos_dir_delta2().
@@ -164,6 +183,134 @@ typedef svn_error_t *(*svn_repos_file_re
    apr_pool_t *pool);
 
 
+/* Notification system. */
+
+/** The type of action occuring.
+ *
+ * @since New in 1.7.
+ */
+typedef enum svn_repos_notify_action_t
+{
+  /** A warning message is waiting. */
+  svn_repos_notify_warning = 0,
+
+  /** A revision has finished being dumped. */
+  svn_repos_notify_dump_rev_end,
+
+  /** A revision has finished being verified. */
+  svn_repos_notify_verify_rev_end,
+
+  /** packing of an FSFS shard has commenced */
+  svn_repos_notify_pack_shard_start,
+
+  /** packing of an FSFS shard is completed */
+  svn_repos_notify_pack_shard_end,
+
+  /** packing of the shard revprops has commenced */
+  svn_repos_notify_pack_shard_start_revprop,
+
+  /** packing of the shard revprops has completed */
+  svn_repos_notify_pack_shard_end_revprop,
+
+  /** A revision has begun loading */
+  svn_repos_notify_load_txn_start,
+
+  /** A revision has finished loading */
+  svn_repos_notify_load_txn_committed,
+
+  /** A node has begun loading */
+  svn_repos_notify_load_node_start,
+
+  /** A node has finished loading */
+  svn_repos_notify_load_node_done,
+
+  /** A copied node has been encountered */
+  svn_repos_notify_load_copied_node,
+
+  /** Mergeinfo has been normalized */
+  svn_repos_notify_load_normalized_mergeinfo,
+
+  /** The operation has acquired a mutex for the repo. */
+  svn_repos_notify_mutex_acquired,
+
+  /** Recover has started. */
+  svn_repos_notify_recover_start,
+
+  /** Upgrade has started. */
+  svn_repos_notify_upgrade_start
+
+} svn_repos_notify_action_t;
+
+/**
+ * Structure used by #svn_repos_notify_func_t.
+ *
+ * The only field guaranteed to be populated is @c action.  Other fields are
+ * dependent upon the @c action.  (See individual fields for more information.)
+ *
+ * @note Callers of notification functions should use
+ * svn_repos_notify_create() to create structures of this type to allow for
+ * future extensibility.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_repos_notify_t
+{
+  /** Action that describes what happened in the repository. */
+  svn_repos_notify_action_t action;
+
+  /** For #svn_repos_notify_dump_rev_end and #svn_repos_notify_verify_rev_end,
+   * the revision which just completed. */
+  svn_revnum_t revision;
+
+  /** For #svn_repos_notify_warning, the warning text. */
+  const char *warning;
+
+  /** For #svn_repos_notify_pack_shard_start,
+      #svn_repos_notify_pack_shard_end,
+      #svn_repos_notify_pack_shard_start_revprop, and
+      #svn_repos_notify_pack_shard_end_revprop, the shard processed. */
+  apr_int64_t shard;
+
+  /** For #svn_repos_notify_load_commited_rev, the revision committed. */
+  svn_revnum_t new_revision;
+
+  /** For #svn_repos_notify_load_commited_rev, the source revision, if
+      different from #new_revision, otherwise #SVN_INVALID_REVNUM.
+      For #svn_repos_notify_load_txn_start, the source revision. */
+  svn_revnum_t old_revision;
+
+  /** For #svn_repos_notify_load_node_start, the action being taken on the
+      node. */
+  enum svn_node_action node_action;
+
+  /** For #svn_repos_notify_load_node_start, the path of the node. */
+  const char *path;
+
+  /* NOTE: Add new fields at the end to preserve binary compatibility.
+     Also, if you add fields here, you have to update
+     svn_repos_notify_create(). */
+} svn_repos_notify_t;
+
+/** Callback for providing notification from the repository.
+ * Returns @a void.  Justification: success of an operation is not dependent
+ * upon successful notification of that operation.
+ *
+ * @since New in 1.7. */
+typedef void (*svn_repos_notify_func_t)(void *baton,
+                                        const svn_repos_notify_t *notify,
+                                        apr_pool_t *scratch_pool);
+
+/**
+ * Allocate an #svn_repos_notify_t structure in @a result_pool, initialize
+ * and return it.
+ *
+ * @since New in 1.7.
+ */
+svn_repos_notify_t *
+svn_repos_notify_create(svn_repos_notify_action_t action,
+                        apr_pool_t *result_pool);
+
+
 /** The repository object. */
 typedef struct svn_repos_t svn_repos_t;
 
@@ -244,8 +391,23 @@ svn_repos_create(svn_repos_t **repos_p,
  * It does *not* guarantee the most optimized repository state as a
  * dump and subsequent load would.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_upgrade2(const char *path,
+                   svn_boolean_t nonblocking,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_upgrade2(), but with @a start_callback and baton,
+ * rather than a notify_callback / baton
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_upgrade(const char *path,
                   svn_boolean_t nonblocking,
@@ -320,8 +482,24 @@ svn_repos_hotcopy(const char *src_path,
  * Possibly update the repository, @a repos, to use a more efficient
  * filesystem representation.  Use @a pool for allocations.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_fs_pack2(svn_repos_t *repos,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_fs_pack2(), but with a #svn_fs_pack_notify_t instead
+ * of a #svn_repos_notify_t.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_fs_pack(svn_repos_t *repos,
                   svn_fs_pack_notify_t notify_func,
@@ -330,7 +508,6 @@ svn_repos_fs_pack(svn_repos_t *repos,
                   void *cancel_baton,
                   apr_pool_t *pool);
 
-
 /**
  * Run database recovery procedures on the repository at @a path,
  * returning the database to a consistent state.  Use @a pool for all
@@ -343,8 +520,8 @@ svn_repos_fs_pack(svn_repos_t *repos,
  * If @a nonblocking is TRUE, an error of type EWOULDBLOCK is
  * returned if the lock is not immediately available.
  *
- * If @a start_callback is not NULL, it will be called with @a
- * start_callback_baton as argument before the recovery starts, but
+ * If @a notify_func is not NULL, it will be called with @a
+ * notify_baton as argument before the recovery starts, but
  * after the exclusive lock has been acquired.
  *
  * If @a cancel_func is not @c NULL, it is called periodically with
@@ -356,8 +533,25 @@ svn_repos_fs_pack(svn_repos_t *repos,
  * by a single threaded process, or by a multi-threaded process when
  * no other threads are accessing the repository.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_recover4(const char *path,
+                   svn_boolean_t nonblocking,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void * cancel_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_recover4(), but with @a start callback in place of
+ * the notify_func / baton.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_recover3(const char *path,
                    svn_boolean_t nonblocking,
@@ -1706,7 +1900,7 @@ svn_repos_fs_begin_txn_for_update(svn_fs
 
 /** @defgroup svn_repos_fs_locks Repository lock wrappers
  * @{
- * @since New in 1.2. */
+ */
 
 /** Like svn_fs_lock(), but invoke the @a repos's pre- and
  * post-lock hooks before and after the locking action.  Use @a pool
@@ -1721,6 +1915,8 @@ svn_repos_fs_begin_txn_for_update(svn_fs
  * The pre-lock hook may cause a different token to be used for the
  * lock, instead of @a token; see the pre-lock-hook documentation for
  * more.
+ *
+ * @since New in 1.2.
  */
 svn_error_t *
 svn_repos_fs_lock(svn_lock_t **lock,
@@ -1744,6 +1940,8 @@ svn_repos_fs_lock(svn_lock_t **lock,
  * hook, return the original error wrapped with
  * SVN_ERR_REPOS_POST_UNLOCK_HOOK_FAILED.  If the caller sees this
  * error, it knows that the unlock succeeded anyway.
+ *
+ * @since New in 1.2.
  */
 svn_error_t *
 svn_repos_fs_unlock(svn_repos_t *repos,
@@ -1760,7 +1958,31 @@ svn_repos_fs_unlock(svn_repos_t *repos,
  * authz_read_func and @a authz_read_baton to "screen" all returned
  * locks.  That is: do not return any locks on any paths that are
  * unreadable in HEAD, just silently omit them.
+ *
+ * @a depth limits the returned locks to those associated with paths
+ * within the specified depth of @a path, and must be one of the
+ * following values:  #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates, or #svn_depth_infinity.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_fs_get_locks2(apr_hash_t **locks,
+                        svn_repos_t *repos,
+                        const char *path,
+                        svn_depth_t depth,
+                        svn_repos_authz_func_t authz_read_func,
+                        void *authz_read_baton,
+                        apr_pool_t *pool);
+
+/** 
+ * Similar to svn_repos_fs_get_locks2(), but with @a depth always
+ * passed as svn_depth_infinity.
+ *
+ * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_fs_get_locks(apr_hash_t **locks,
                        svn_repos_t *repos,
@@ -2098,33 +2320,6 @@ svn_repos_node_from_baton(void *edit_bat
 #define SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM  \
                                         SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_MD5
 
-/** The different "actions" attached to nodes in the dumpfile. */
-enum svn_node_action
-{
-  svn_node_action_change,
-  svn_node_action_add,
-  svn_node_action_delete,
-  svn_node_action_replace
-};
-
-/** The different policies for processing the UUID in the dumpfile. */
-enum svn_repos_load_uuid
-{
-  svn_repos_load_uuid_default,
-  svn_repos_load_uuid_ignore,
-  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_notify_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.
  *
@@ -2260,8 +2455,7 @@ svn_repos_dump_fs(svn_repos_t *repos,
 /**
  * Read and parse dumpfile-formatted @a dumpstream, reconstructing
  * filesystem revisions in already-open @a repos, handling uuids in
- * accordance with @a uuid_action.  If non-@c NULL, send feedback to
- * @a feedback_stream.  Use @a pool for all allocation.
+ * accordance with @a uuid_action.  Use @a pool for all allocation.
  *
  * If the dumpstream contains copy history that is unavailable in the
  * repository, an error will be thrown.
@@ -2285,12 +2479,36 @@ svn_repos_dump_fs(svn_repos_t *repos,
  * If @a use_post_commit_hook is set, call the repository's
  * post-commit hook after committing each loaded revision.
  *
+ * If non-NULL, use @a notify_func and @a notify_baton to send notification
+ * of events to the caller.
+ *
  * 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 load.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_load_fs3(svn_repos_t *repos,
+                   svn_stream_t *dumpstream,
+                   enum svn_repos_load_uuid uuid_action,
+                   const char *parent_dir,
+                   svn_boolean_t use_pre_commit_hook,
+                   svn_boolean_t use_post_commit_hook,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_load_fs3(), but with @a feedback_stream in place of
+ * the #svn_repos_notify_func_t and baton.
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_load_fs2(svn_repos_t *repos,
                    svn_stream_t *dumpstream,
@@ -2467,8 +2685,27 @@ svn_repos_parse_dumpstream2(svn_stream_t
  * Print all parsing feedback to @a outstream (if non-@c NULL).
  *
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **parser,
+                               void **parse_baton,
+                               svn_repos_t *repos,
+                               svn_boolean_t use_history,
+                               enum svn_repos_load_uuid uuid_action,
+                               const char *parent_dir,
+                               svn_repos_notify_func_t notify_func,
+                               void *notify_baton,
+                               apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_get_fs_build_parser3(), but with @a outstream in place
+ * if a #svn_repos_notify_func_t and baton.
+ *
  * @since New in 1.1.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
                                void **parse_baton,
@@ -2479,7 +2716,6 @@ svn_repos_get_fs_build_parser2(const svn
                                const char *parent_dir,
                                apr_pool_t *pool);
 
-
 /**
  * A vtable that is driven by svn_repos_parse_dumpstream().
  * Similar to #svn_repos_parse_fns2_t except that it lacks