subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hwri...@apache.org
Subject svn commit: r1170622 [1/7] - in /subversion/branches/fs-py: ./ notes/ subversion/bindings/javahl/tests/org/apache/subversion/javahl/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion/libsvn_fs...
Date Wed, 14 Sep 2011 13:46:59 GMT
Author: hwright
Date: Wed Sep 14 13:46:56 2011
New Revision: 1170622

URL: http://svn.apache.org/viewvc?rev=1170622&view=rev
Log:
On the fs-py branch:
Bring up-to-date with trunk.

Added:
    subversion/branches/fs-py/subversion/include/svn_editor.h
      - copied unchanged from r1170619, subversion/trunk/subversion/include/svn_editor.h
    subversion/branches/fs-py/subversion/libsvn_client/diff_summarize.c
      - copied unchanged from r1170619, subversion/trunk/subversion/libsvn_client/diff_summarize.c
    subversion/branches/fs-py/subversion/tests/cmdline/upgrade_tests_data/upgrade_file_externals.tar.bz2
      - copied unchanged from r1170619, subversion/trunk/subversion/tests/cmdline/upgrade_tests_data/upgrade_file_externals.tar.bz2
    subversion/branches/fs-py/subversion/tests/libsvn_delta/editor-test.c
      - copied unchanged from r1170619, subversion/trunk/subversion/tests/libsvn_delta/editor-test.c
    subversion/branches/fs-py/tools/dist/_gnupg.py
      - copied unchanged from r1170619, subversion/trunk/tools/dist/_gnupg.py
    subversion/branches/fs-py/tools/dist/templates/download.ezt
      - copied unchanged from r1170619, subversion/trunk/tools/dist/templates/download.ezt
    subversion/branches/fs-py/tools/dist/templates/htaccess.ezt
      - copied unchanged from r1170619, subversion/trunk/tools/dist/templates/htaccess.ezt
Modified:
    subversion/branches/fs-py/   (props changed)
    subversion/branches/fs-py/CHANGES
    subversion/branches/fs-py/build.conf
    subversion/branches/fs-py/notes/fsfs-improvements.txt
    subversion/branches/fs-py/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
    subversion/branches/fs-py/subversion/include/private/svn_editor.h
    subversion/branches/fs-py/subversion/include/svn_client.h
    subversion/branches/fs-py/subversion/include/svn_delta.h
    subversion/branches/fs-py/subversion/include/svn_repos.h
    subversion/branches/fs-py/subversion/include/svn_sorts.h
    subversion/branches/fs-py/subversion/include/svn_wc.h
    subversion/branches/fs-py/subversion/libsvn_client/cleanup.c
    subversion/branches/fs-py/subversion/libsvn_client/client.h
    subversion/branches/fs-py/subversion/libsvn_client/cmdline.c
    subversion/branches/fs-py/subversion/libsvn_client/commit.c
    subversion/branches/fs-py/subversion/libsvn_client/commit_util.c
    subversion/branches/fs-py/subversion/libsvn_client/copy.c
    subversion/branches/fs-py/subversion/libsvn_client/diff.c
    subversion/branches/fs-py/subversion/libsvn_client/export.c
    subversion/branches/fs-py/subversion/libsvn_client/externals.c
    subversion/branches/fs-py/subversion/libsvn_client/info.c
    subversion/branches/fs-py/subversion/libsvn_client/merge.c
    subversion/branches/fs-py/subversion/libsvn_client/mergeinfo.c
    subversion/branches/fs-py/subversion/libsvn_client/mergeinfo.h
    subversion/branches/fs-py/subversion/libsvn_client/patch.c
    subversion/branches/fs-py/subversion/libsvn_client/ra.c
    subversion/branches/fs-py/subversion/libsvn_client/relocate.c
    subversion/branches/fs-py/subversion/libsvn_client/repos_diff.c
    subversion/branches/fs-py/subversion/libsvn_client/repos_diff_summarize.c
    subversion/branches/fs-py/subversion/libsvn_client/status.c
    subversion/branches/fs-py/subversion/libsvn_client/update.c
    subversion/branches/fs-py/subversion/libsvn_delta/compat.c
    subversion/branches/fs-py/subversion/libsvn_delta/editor.c
    subversion/branches/fs-py/subversion/libsvn_fs/fs-loader.h
    subversion/branches/fs-py/subversion/libsvn_fs_fs/fs_fs.c
    subversion/branches/fs-py/subversion/libsvn_fs_fs/tree.c
    subversion/branches/fs-py/subversion/libsvn_ra/ra_loader.c
    subversion/branches/fs-py/subversion/libsvn_ra_neon/commit.c
    subversion/branches/fs-py/subversion/libsvn_ra_neon/session.c
    subversion/branches/fs-py/subversion/libsvn_ra_serf/commit.c
    subversion/branches/fs-py/subversion/libsvn_ra_serf/update.c
    subversion/branches/fs-py/subversion/libsvn_ra_svn/client.c
    subversion/branches/fs-py/subversion/libsvn_ra_svn/cyrus_auth.c
    subversion/branches/fs-py/subversion/libsvn_ra_svn/editorp.c
    subversion/branches/fs-py/subversion/libsvn_repos/authz.c
    subversion/branches/fs-py/subversion/libsvn_repos/commit.c
    subversion/branches/fs-py/subversion/libsvn_repos/dump.c
    subversion/branches/fs-py/subversion/libsvn_repos/replay.c
    subversion/branches/fs-py/subversion/libsvn_repos/reporter.c
    subversion/branches/fs-py/subversion/libsvn_subr/error.c
    subversion/branches/fs-py/subversion/libsvn_subr/iter.c
    subversion/branches/fs-py/subversion/libsvn_subr/mergeinfo.c
    subversion/branches/fs-py/subversion/libsvn_subr/sorts.c
    subversion/branches/fs-py/subversion/libsvn_subr/svn_string.c
    subversion/branches/fs-py/subversion/libsvn_subr/target.c
    subversion/branches/fs-py/subversion/libsvn_wc/copy.c
    subversion/branches/fs-py/subversion/libsvn_wc/diff_editor.c
    subversion/branches/fs-py/subversion/libsvn_wc/entries.c
    subversion/branches/fs-py/subversion/libsvn_wc/info.c
    subversion/branches/fs-py/subversion/libsvn_wc/status.c
    subversion/branches/fs-py/subversion/libsvn_wc/update_editor.c
    subversion/branches/fs-py/subversion/libsvn_wc/wc-queries.sql
    subversion/branches/fs-py/subversion/libsvn_wc/wc_db.c
    subversion/branches/fs-py/subversion/libsvn_wc/wc_db.h
    subversion/branches/fs-py/subversion/po/fr.po
    subversion/branches/fs-py/subversion/svn/main.c
    subversion/branches/fs-py/subversion/svn/propedit-cmd.c
    subversion/branches/fs-py/subversion/svn/schema/diff.rnc
    subversion/branches/fs-py/subversion/svnrdump/dump_editor.c
    subversion/branches/fs-py/subversion/svnsync/main.c
    subversion/branches/fs-py/subversion/tests/cmdline/authz_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/diff_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/externals_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/merge_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/merge_tree_conflict_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/mergeinfo_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/patch_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/resolve_tests.py
    subversion/branches/fs-py/subversion/tests/cmdline/svntest/actions.py
    subversion/branches/fs-py/subversion/tests/cmdline/svntest/factory.py
    subversion/branches/fs-py/subversion/tests/cmdline/upgrade_tests.py
    subversion/branches/fs-py/subversion/tests/libsvn_delta/   (props changed)
    subversion/branches/fs-py/subversion/tests/libsvn_fs/fs-test.c
    subversion/branches/fs-py/subversion/tests/libsvn_repos/repos-test.c
    subversion/branches/fs-py/subversion/tests/libsvn_wc/op-depth-test.c
    subversion/branches/fs-py/subversion/tests/svn_test_main.c
    subversion/branches/fs-py/tools/client-side/svnmucc/svnmucc.c
    subversion/branches/fs-py/tools/dev/windows-build/README
    subversion/branches/fs-py/tools/dist/gnupg.py
    subversion/branches/fs-py/tools/dist/release.py
    subversion/branches/fs-py/tools/dist/templates/nightly-candidates.ezt
    subversion/branches/fs-py/tools/dist/templates/rc-candidates.ezt
    subversion/branches/fs-py/tools/dist/templates/stable-candidates.ezt
    subversion/branches/fs-py/tools/examples/get-location-segments.py

Propchange: subversion/branches/fs-py/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep 14 13:46:56 2011
@@ -56,4 +56,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
-/subversion/trunk:1154223-1163240
+/subversion/trunk:1154223-1170619

Modified: subversion/branches/fs-py/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/CHANGES?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/CHANGES (original)
+++ subversion/branches/fs-py/CHANGES Wed Sep 14 13:46:56 2011
@@ -24,7 +24,8 @@ the 1.6 release:  http://subversion.apac
     * Less verbose HTTP-based repository access protocol (issue #1161, #3371)
     * Rewritten working copy metadata storage (issue #3357)
     * New 'svn patch' subcommand (issue #511)
-    * Limit FSFS memory consumption (issue #3478, #3593)
+    * Rewritten FSFS in-memory caching for better performance
+    * New remote repository dump/load client 'svnrdump'
 
   - Minor new features and improvements:
     * Better handling of HTTP redirects (issue #2779)
@@ -60,7 +61,7 @@ the 1.6 release:  http://subversion.apac
     * allow subdirs of moved dirs to be moved and committed (issue #1259)
     * improved performance of 'svn mv' with whole directories (issue #1284)
     * 'svn rm B; svn cp A B' now works (issue #1516)
-    * 'svn diff URL1 URL2' now reverse of 'svn diff URL2 URL1) (issue #2333)
+    * 'svn diff URL1 URL2' now reverse of 'svn diff URL2 URL1' (issue #2333)
     * error if relocating to an unused URL (issue #2531)
     * 'svn blame -rWORKING' is now supported (issue #2544)
     * improve correctness of commit on a relocated wc over ra_dav (issue #2578)
@@ -160,8 +161,9 @@ the 1.6 release:  http://subversion.apac
     * match paths against authz rules in case sensitive way (issue #3781)
     * svnserve can now force usernames to upper/lower case (issue #3726)
     * reduce duplicate log messages in 'log -g' (issue #3650)
-    * don't crash on shutdown with SASL in inetd mode (issue #3664)
+    * svnserve: don't crash on shutdown with SASL in inetd mode (issue #3664)
     * disallow arbitrary HTTP headers from committers (issue #2872)
+    * limit FSFS memory consumption (issue #3478, #3593)
     * many other minor bugfixes too numerous to list here
 
   - Other tool improvements and bugfixes:
@@ -192,7 +194,7 @@ the 1.6 release:  http://subversion.apac
     * add information on text and property mods in log APIs (r877688)
     * fixed: svn_ra_local__get_file() leaks file descriptors (issue #3290)
     * svn_ra_neon__get_dir() returns correct dir set for URLs (issue #3093)
-    * swig-py: always set ChangedPath.path (issue #2630)
+    * swig-py: always set ChangedPath.path (also for deletes) (issue #2630)
     * improve conflict resolver API for a specific direction (issue #3049)
 
   - Bindings:

Modified: subversion/branches/fs-py/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/build.conf?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/build.conf (original)
+++ subversion/branches/fs-py/build.conf Wed Sep 14 13:46:56 2011
@@ -873,6 +873,14 @@ sources = random-test.c
 install = test
 libs = libsvn_test libsvn_delta libsvn_subr apriconv apr
 
+[editor-test]
+description = Test the editor v2 interface
+type = exe
+path = subversion/tests/libsvn_delta
+sources = editor-test.c
+install = test
+libs = libsvn_repos libsvn_fs libsvn_test libsvn_delta libsvn_subr apriconv apr
+
 [window-test]
 description = Test delta window generation
 type = exe
@@ -1115,7 +1123,7 @@ libs = __ALL__
        strings-reps-test changes-test locks-test repos-test
        checksum-test compat-test config-test hashdump-test mergeinfo-test
        opt-test path-test stream-test string-test time-test utf-test
-       target-test error-test cache-test
+       target-test error-test cache-test editor-test
        revision-test
        subst_translate-test
        translate-test

Modified: subversion/branches/fs-py/notes/fsfs-improvements.txt
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/notes/fsfs-improvements.txt?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/notes/fsfs-improvements.txt (original)
+++ subversion/branches/fs-py/notes/fsfs-improvements.txt Wed Sep 14 13:46:56 2011
@@ -1,3 +1,8 @@
+[ At the time of writing (1.7-dev), FSFS format 5 was current.  Since then
+format 5 has been retracted; it was never released.  1.7 shipped with f4 and
+1.8 will most likely ship with f6.  Format 5 was current during 1.7-dev and
+packed revprops into an authoritative SQLite database. ]
+
 Introduction
 ------------
 

Modified: subversion/branches/fs-py/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/fs-py/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Wed Sep 14 13:46:56 2011
@@ -32,6 +32,7 @@ import java.io.FileReader;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
 import java.text.ParseException;
 import java.util.Collection;
 import java.util.Arrays;
@@ -3679,8 +3680,17 @@ public class BasicTests extends SVNTests
                                       Map<String, byte[]> revprops,
                                       boolean hasChildren)
             {
-                String author = new String(revprops.get("svn:author"));
-                String message = new String(revprops.get("svn:log"));
+                String author, message;
+                try {
+                    author = new String(revprops.get("svn:author"), "UTF8");
+                } catch (UnsupportedEncodingException e) {
+                    author = new String(revprops.get("svn:author"));
+                }
+                try {
+                    message = new String(revprops.get("svn:log"), "UTF8");
+                } catch (UnsupportedEncodingException e) {
+                    message = new String(revprops.get("svn:log"));
+                }
                 long timeMicros;
 
                 try {

Modified: subversion/branches/fs-py/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/include/svn_client.h?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/include/svn_client.h (original)
+++ subversion/branches/fs-py/subversion/include/svn_client.h Wed Sep 14 13:46:56 2011
@@ -3509,14 +3509,15 @@ svn_client_mergeinfo_get_merged(apr_hash
 /**
  * If @a finding_merged is TRUE, then drive log entry callbacks
  * @a receiver / @a receiver_baton with the revisions merged from
- * @a merge_source_path_or_url (as of @a src_peg_revision) into
- * @a path_or_url (as of @a peg_revision).  If @a finding_merged is FALSE
- * then find the revisions eligible for merging.
+ * @a source_path_or_url (as of @a source_peg_revision) into
+ * @a target_path_or_url (as of @a target_peg_revision).  If @a
+ * finding_merged is FALSE then find the revisions eligible for merging.
  *
  * If @a depth is #svn_depth_empty consider only the explicit or
- * inherited mergeinfo on @a path_or_url when calculating merged revisions
- * from @a merge_source_path_or_url.  If @a depth is #svn_depth_infinity
- * then also consider the explicit subtree mergeinfo under @a path_or_url.
+ * inherited mergeinfo on @a target_path_or_url when calculating merged
+ * revisions from @a source_path_or_url.  If @a depth is #svn_depth_infinity
+ * then also consider the explicit subtree mergeinfo under @a
+ * target_path_or_url.
  * If a depth other than #svn_depth_empty or #svn_depth_infinity is
  * requested then return a #SVN_ERR_UNSUPPORTED_FEATURE error.
  *
@@ -3532,10 +3533,10 @@ svn_client_mergeinfo_get_merged(apr_hash
  */
 svn_error_t *
 svn_client_mergeinfo_log(svn_boolean_t finding_merged,
-                         const char *path_or_url,
-                         const svn_opt_revision_t *peg_revision,
-                         const char *merge_source_path_or_url,
-                         const svn_opt_revision_t *src_peg_revision,
+                         const char *target_path_or_url,
+                         const svn_opt_revision_t *target_peg_revision,
+                         const char *source_path_or_url,
+                         const svn_opt_revision_t *source_peg_revision,
                          svn_log_entry_receiver_t receiver,
                          void *receiver_baton,
                          svn_boolean_t discover_changed_paths,

Modified: subversion/branches/fs-py/subversion/include/svn_delta.h
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/include/svn_delta.h?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/include/svn_delta.h (original)
+++ subversion/branches/fs-py/subversion/include/svn_delta.h Wed Sep 14 13:46:56 2011
@@ -41,6 +41,7 @@
 #include "svn_string.h"
 #include "svn_io.h"
 #include "svn_checksum.h"
+#include "svn_editor.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -649,10 +650,12 @@ svn_txdelta_skip_svndiff_window(apr_file
  *
  * Each of these takes a directory baton, indicating the directory
  * in which the change takes place, and a @a path argument, giving the
- * path (relative to the root of the edit) of the file,
- * subdirectory, or directory entry to change. Editors will usually
- * want to join this relative path with some base stored in the edit
- * baton (e.g. a URL, a location in the OS filesystem).
+ * path of the file, subdirectory, or directory entry to change.
+ * 
+ * The @a path argument to each of the callbacks is relative to the
+ * root of the edit.  Editors will usually want to join this relative
+ * path with some base stored in the edit baton (e.g. a URL, or a
+ * location in the OS filesystem).
  *
  * Since every call requires a parent directory baton, including
  * @c add_directory and @c open_directory, where do we ever get our
@@ -826,7 +829,7 @@ typedef struct svn_delta_editor_t
                             void **root_baton);
 
 
-  /** Remove the directory entry named @a path, a child of the directory
+  /** Remove the directory entry at @a path, a child of the directory
    * represented by @a parent_baton.  If @a revision is a valid
    * revision number, it is used as a sanity check to ensure that you
    * are really removing the revision of @a path that you think you are.
@@ -847,9 +850,10 @@ typedef struct svn_delta_editor_t
                                apr_pool_t *scratch_pool);
 
 
-  /** We are going to add a new subdirectory named @a path.  We will use
+  /** We are going to add a new subdirectory at @a path, a child of
+   * the directory represented by @a parent_baton.  We will use
    * the value this callback stores in @a *child_baton as the
-   * @a parent_baton for further changes in the new subdirectory.
+   * parent baton for further changes in the new subdirectory.
    *
    * If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a
    * copy), and the origin of the copy may be recorded as
@@ -866,10 +870,10 @@ typedef struct svn_delta_editor_t
                                 apr_pool_t *result_pool,
                                 void **child_baton);
 
-  /** We are going to make changes in a subdirectory (of the directory
-   * identified by @a parent_baton). The subdirectory is specified by
-   * @a path. The callback must store a value in @a *child_baton that
-   * should be used as the @a parent_baton for subsequent changes in this
+  /** We are going to make changes in the subdirectory at @a path, a
+   * child of the directory represented by @a parent_baton.
+   * The callback must store a value in @a *child_baton that
+   * should be used as the parent baton for subsequent changes in this
    * subdirectory.  If a valid revnum, @a base_revision is the current
    * revision of the subdirectory.
    *
@@ -921,7 +925,8 @@ typedef struct svn_delta_editor_t
                                    void *parent_baton,
                                    apr_pool_t *scratch_pool);
 
-  /** We are going to add a new file named @a path.  The callback can
+  /** We are going to add a new file at @a path, a child of the
+   * directory represented by @a parent_baton.  The callback can
    * store a baton for this new file in @a **file_baton; whatever value
    * it stores there should be passed through to @c apply_textdelta.
    *
@@ -950,8 +955,8 @@ typedef struct svn_delta_editor_t
                            apr_pool_t *result_pool,
                            void **file_baton);
 
-  /** We are going to make change to a file named @a path, which resides
-   * in the directory identified by @a parent_baton.
+  /** We are going to make changes to a file at @a path, a child of the
+   * directory represented by @a parent_baton.
    *
    * The callback can store a baton for this new file in @a **file_baton;
    * whatever value it stores there should be passed through to
@@ -1081,6 +1086,60 @@ typedef struct svn_delta_editor_t
 svn_delta_editor_t *
 svn_delta_default_editor(apr_pool_t *pool);
 
+/* Return a delta editor and baton which will forward calls to @a editor,
+ * allocated in @a pool.
+ *
+ * @note: Since the semantics behind the two editors are different, calls
+ * the timing of calls forwarded to @a editor may be imprecise.  That is,
+ * the memory and computational overhead in using this forwarding
+ * mechanism may be large.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_delta_from_editor(const svn_delta_editor_t **deditor,
+                      void **dedit_baton,
+                      svn_editor_t *editor,
+                      apr_pool_t *pool);
+
+/* Return an editor allocated in @a result_pool which will forward calls
+ * to @a deditor using @a dedit_baton.
+ *
+ * @note Since the sematics behind the two editors are different, the
+ * timing of calls forwarded to the @a editor may be imprecise, and the
+ * overhead large.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_editor_from_delta(svn_editor_t **editor,
+                      const svn_delta_editor_t *deditor,
+                      void *dedit_baton,
+                      svn_cancel_func_t cancel_func,
+                      void *cancel_baton,
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool);
+
+/** A temporary API which conditionally inserts a double editor shim
+ * into the chain of delta editors.  Used for testing Editor v2.
+ *
+ * Whether or not the shims are inserted is controlled by a compile-time
+ * option in libsvn_delta/compat.c.
+ *
+ * @note The use of these shims and this API will likely cause all kinds
+ * of performance degredation.  (Which is actually a moot point since they
+ * don't even work properly yet anyway.)
+ *
+ * ### This should not ship in the final release.
+ */
+svn_error_t *
+svn_editor__insert_shims(const svn_delta_editor_t **deditor_out,
+                         void **dedit_baton_out,
+                         const svn_delta_editor_t *deditor_in,
+                         void *dedit_baton_in,
+                         apr_pool_t *result_pool,
+                         apr_pool_t *scratch_pool);
+
 /** A text-delta window handler which does nothing.
  *
  * Editors can return this handler from @c apply_textdelta if they don't

Modified: subversion/branches/fs-py/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/include/svn_repos.h?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/include/svn_repos.h (original)
+++ subversion/branches/fs-py/subversion/include/svn_repos.h Wed Sep 14 13:46:56 2011
@@ -300,10 +300,10 @@ typedef struct svn_repos_notify_t
       #svn_repos_notify_pack_shard_end_revprop, the shard processed. */
   apr_int64_t shard;
 
-  /** For #svn_repos_notify_load_committed_rev, the revision committed. */
+  /** For #svn_repos_notify_load_node_done, the revision committed. */
   svn_revnum_t new_revision;
 
-  /** For #svn_repos_notify_load_committed_rev, the source revision, if
+  /** For #svn_repos_notify_load_node_done, the source revision, if
       different from @a new_revision, otherwise #SVN_INVALID_REVNUM.
       For #svn_repos_notify_load_txn_start, the source revision. */
   svn_revnum_t old_revision;

Modified: subversion/branches/fs-py/subversion/include/svn_sorts.h
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/include/svn_sorts.h?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/include/svn_sorts.h (original)
+++ subversion/branches/fs-py/subversion/include/svn_sorts.h Wed Sep 14 13:46:56 2011
@@ -145,7 +145,7 @@ svn_sort_compare_ranges(const void *a,
 /** Sort @a ht according to its keys, return an @c apr_array_header_t
  * containing @c svn_sort__item_t structures holding those keys and values
  * (i.e. for each @c svn_sort__item_t @a item in the returned array,
- * @a item->key and @a item->size are the hash key, and @a item->data points to
+ * @a item->key and @a item->size are the hash key, and @a item->value points to
  * the hash value).
  *
  * Storage is shared with the original hash, not copied.

Modified: subversion/branches/fs-py/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/include/svn_wc.h?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/include/svn_wc.h (original)
+++ subversion/branches/fs-py/subversion/include/svn_wc.h Wed Sep 14 13:46:56 2011
@@ -1271,7 +1271,7 @@ typedef enum svn_wc_notify_lock_state_t
  * @c kind, @c content_state, @c prop_state and @c lock_state are from
  * after @c action, not before.
  *
- * @note If @c action is #svn_wc_notify_update (### what?), then @c path has
+ * @note If @c action is #svn_wc_notify_update_completed, then @c path has
  * already been installed, so it is legitimate for an implementation of
  * #svn_wc_notify_func2_t to examine @c path in the working copy.
  *
@@ -3043,12 +3043,25 @@ svn_wc_entry_dup(const svn_wc_entry_t *e
  */
 typedef struct svn_wc_info_t
 {
-  /* ### Do we still need schedule? */
+  /** The schedule of this item 
+   * ### Do we still need schedule? */
   svn_wc_schedule_t schedule;
+
+  /** If copied, the URL from which the copy was made, else @c NULL. */
   const char *copyfrom_url;
+
+  /** If copied, the revision from which the copy was made,
+   * else #SVN_INVALID_REVNUM. */
   svn_revnum_t copyfrom_rev;
+
+  /** The checksum of the node, if it is a file. */
   const svn_checksum_t *checksum;
+
+  /** A changelist the item is in, @c NULL if this node is not in a
+   * changelist. */
   const char *changelist;
+
+  /** The depth of the item, see #svn_depth_t */
   svn_depth_t depth;
 
   /**
@@ -3654,6 +3667,10 @@ typedef struct svn_wc_status3_t
    * @since New in 1.8. */
   const char *moved_to_abspath;
 
+  /* TRUE iff the item is a file brought in by an svn:externals definition.
+   * @since New in 1.8. */
+  svn_boolean_t file_external;
+
   /* NOTE! Please update svn_wc_dup_status3() when adding new fields here. */
 } svn_wc_status3_t;
 

Modified: subversion/branches/fs-py/subversion/libsvn_client/cleanup.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/cleanup.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/cleanup.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/cleanup.c Wed Sep 14 13:46:56 2011
@@ -120,6 +120,7 @@ svn_client_upgrade(const char *path,
   apr_hash_t *externals;
   apr_hash_index_t *hi;
   apr_pool_t *iterpool;
+  apr_pool_t *iterpool2;
   svn_opt_revision_t rev = {svn_opt_revision_unspecified, {0}};
   struct repos_info_baton info_baton;
 
@@ -148,6 +149,7 @@ svn_client_upgrade(const char *path,
                               scratch_pool, scratch_pool));
 
   iterpool = svn_pool_create(scratch_pool);
+  iterpool2 = svn_pool_create(scratch_pool);
 
   for (hi = apr_hash_first(scratch_pool, externals); hi;
        hi = apr_hash_next(hi))
@@ -174,11 +176,12 @@ svn_client_upgrade(const char *path,
 
           item = APR_ARRAY_IDX(externals_p, i, svn_wc_external_item2_t*);
 
+          svn_pool_clear(iterpool2);
           external_path = svn_dirent_join(externals_parent, item->target_dir,
-                                          iterpool);
+                                          iterpool2);
 
           SVN_ERR(svn_dirent_get_absolute(&external_abspath, external_path,
-                                          iterpool));
+                                          iterpool2));
 
           /* This is hack. We can only send dirs to svn_wc_upgrade(). This
              way we will get an exception saying that the wc must be
@@ -186,17 +189,13 @@ svn_client_upgrade(const char *path,
              in an adm_dir belonging to the real wc and since that was
              updated before the externals no error is returned. */
           err = svn_wc_read_kind(&kind, ctx->wc_ctx, external_abspath, FALSE,
-                                 iterpool);
+                                 iterpool2);
 
           if (err && err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
             {
               svn_error_clear(err);
 
-              SVN_ERR(svn_wc_upgrade(ctx->wc_ctx, external_abspath,
-                                     fetch_repos_info, &info_baton,
-                                     ctx->cancel_func, ctx->cancel_baton,
-                                     ctx->notify_func2, ctx->notify_baton2,
-                                     iterpool));
+              SVN_ERR(svn_client_upgrade(external_abspath, ctx, iterpool2));
             }
           else
             SVN_ERR(err);
@@ -204,6 +203,7 @@ svn_client_upgrade(const char *path,
     }
 
   svn_pool_destroy(iterpool);
+  svn_pool_destroy(iterpool2);
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/fs-py/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/client.h?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/client.h (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/client.h Wed Sep 14 13:46:56 2011
@@ -105,7 +105,7 @@ svn_error_t *svn_client__get_copy_source
    specify the point(s) of interest (typically the revisions referred
    to as the "operative range" for a given operation) along that history.
 
-   END may be of kind svn_opt_revision_unspecified (in which case
+   END may be NULL or of kind svn_opt_revision_unspecified (in either case
    END_URL and END_REVISION are not touched by the function);
    START and REVISION may not.
 
@@ -584,12 +584,6 @@ svn_client__switch_internal(svn_revnum_t
 /* Create an editor for a pure repository comparison, i.e. comparing one
    repository version against the other.
 
-   TARGET is a working-copy path, the base of the hierarchy to be
-   compared.  It corresponds to the URL opened in RA_SESSION below.
-
-   WC_CTX is a context for the working copy and should be NULL for
-   operations that do not involve a working copy.
-
    DIFF_CMD/DIFF_CMD_BATON represent the callback and callback argument that
    implement the file comparison function
 
@@ -607,9 +601,10 @@ svn_client__switch_internal(svn_revnum_t
    'dir_deleted' callback for each individual node in that subtree.
 
    If TEXT_DELTAS is FALSE, then do not expect text deltas from the edit
-   drive, nor send text deltas to the diff callbacks.
-   ### TODO: The implementation currently does send text deltas to the diff
-       callbacks in many cases even if they are not wanted.
+   drive, nor send the 'before' and 'after' texts to the diff callbacks;
+   instead, send empty files to the diff callbacks if there was a change.
+   This must be FALSE if the edit producer is not sending text deltas,
+   otherwise the file content checksum comparisons will fail.
 
    If NOTIFY_FUNC is non-null, invoke it with NOTIFY_BATON for each
    file and directory operated on during the edit.
@@ -618,8 +613,6 @@ svn_client__switch_internal(svn_revnum_t
 svn_error_t *
 svn_client__get_diff_editor(const svn_delta_editor_t **editor,
                             void **edit_baton,
-                            svn_wc_context_t *wc_ctx,
-                            const char *target,
                             svn_depth_t depth,
                             svn_ra_session_t *ra_session,
                             svn_revnum_t revision,

Modified: subversion/branches/fs-py/subversion/libsvn_client/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/cmdline.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/cmdline.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/cmdline.c Wed Sep 14 13:46:56 2011
@@ -114,8 +114,8 @@ check_root_url_of_target(const char **ro
   if (!svn_path_is_url(truepath))
     SVN_ERR(svn_dirent_get_absolute(&truepath, truepath, pool));
 
-  err =  svn_client__get_repos_root(&tmp_root_url, truepath,
-                                    ctx, pool, pool);
+  err = svn_client__get_repos_root(&tmp_root_url, truepath,
+                                   ctx, pool, pool);
 
   if (err)
     {
@@ -125,7 +125,7 @@ check_root_url_of_target(const char **ro
        *
        * If the target itself is a URL to a repository that does not exist,
        * that's fine, too. The callers will deal with this argument in an
-       * appropriate manter if it does not make any sense.
+       * appropriate manner if it does not make any sense.
        *
        * Also tolerate locally added targets ("bad revision" error).
        */
@@ -142,7 +142,7 @@ check_root_url_of_target(const char **ro
         return svn_error_trace(err);
      }
 
-   if (*root_url != NULL)
+   if (*root_url && tmp_root_url)
      {
        if (strcmp(*root_url, tmp_root_url) != 0)
          return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,

Modified: subversion/branches/fs-py/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/commit.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/commit.c Wed Sep 14 13:46:56 2011
@@ -667,10 +667,15 @@ get_ra_editor(svn_ra_session_t **ra_sess
                                            log_msg, ctx, pool));
 
   /* Fetch RA commit editor. */
-  return svn_ra_get_commit_editor3(*ra_session, editor, edit_baton,
-                                   commit_revprops, commit_callback,
-                                   commit_baton, lock_tokens, keep_locks,
-                                   pool);
+  SVN_ERR(svn_ra_get_commit_editor3(*ra_session, editor, edit_baton,
+                                    commit_revprops, commit_callback,
+                                    commit_baton, lock_tokens, keep_locks,
+                                    pool));
+
+  SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
+                                   pool, pool));
+
+  return SVN_NO_ERROR;
 }
 
 

Modified: subversion/branches/fs-py/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/commit_util.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/commit_util.c Wed Sep 14 13:46:56 2011
@@ -1341,14 +1341,9 @@ svn_client__condense_commit_items(const 
     {
       svn_client_commit_item3_t *this_item
         = APR_ARRAY_IDX(ci, i, svn_client_commit_item3_t *);
-      size_t url_len = strlen(this_item->url);
-      size_t base_url_len = strlen(*base_url);
 
-      if (url_len > base_url_len)
-        this_item->session_relpath = svn_uri__is_child(*base_url,
-                                                       this_item->url, pool);
-      else
-        this_item->session_relpath = "";
+      this_item->session_relpath = svn_uri_skip_ancestor(*base_url,
+                                                         this_item->url, pool);
     }
 #ifdef SVN_CLIENT_COMMIT_DEBUG
   /* ### TEMPORARY CODE ### */

Modified: subversion/branches/fs-py/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/copy.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/copy.c Wed Sep 14 13:46:56 2011
@@ -761,7 +761,7 @@ repos_to_repos_copy(const apr_array_head
   apr_hash_t *action_hash = apr_hash_make(pool);
   apr_array_header_t *path_infos;
   const char *top_url, *top_url_all, *top_url_dst;
-  const char *message, *repos_root, *ignored_url;
+  const char *message, *repos_root;
   svn_revnum_t youngest = SVN_INVALID_REVNUM;
   svn_ra_session_t *ra_session = NULL;
   const svn_delta_editor_t *editor;
@@ -795,8 +795,7 @@ repos_to_repos_copy(const apr_array_head
       svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
                                                     svn_client__copy_pair_t *);
       apr_hash_t *mergeinfo;
-      svn_opt_revision_t *src_rev, *ignored_rev, dead_end_rev;
-      dead_end_rev.kind = svn_opt_revision_unspecified;
+      svn_opt_revision_t *src_rev;
 
       /* Are the source and destination URLs at or under REPOS_ROOT? */
       if (! (svn_uri__is_ancestor(repos_root, pair->src_abspath_or_url)
@@ -816,21 +815,17 @@ repos_to_repos_copy(const apr_array_head
 
       /* Run the history function to get the source's URL in the
          operational revision. */
-      SVN_ERR(svn_client__ensure_ra_session_url(&ignored_url, ra_session,
-                                                pair->src_abspath_or_url,
-                                                pool));
+      SVN_ERR(svn_ra_reparent(ra_session, pair->src_abspath_or_url, pool));
       SVN_ERR(svn_client__repos_locations(&pair->src_abspath_or_url, &src_rev,
-                                          &ignored_url, &ignored_rev,
+                                          NULL, NULL,
                                           ra_session,
                                           pair->src_abspath_or_url,
                                           &pair->src_peg_revision,
-                                          &pair->src_op_revision,
-                                          &dead_end_rev, ctx, pool));
+                                          &pair->src_op_revision, NULL,
+                                          ctx, pool));
 
       /* Go ahead and grab mergeinfo from the source, too. */
-      SVN_ERR(svn_client__ensure_ra_session_url(&ignored_url, ra_session,
-                                                pair->src_abspath_or_url,
-                                                pool));
+      SVN_ERR(svn_ra_reparent(ra_session, pair->src_abspath_or_url, pool));
       SVN_ERR(calculate_target_mergeinfo(ra_session, &mergeinfo, NULL,
                                          pair->src_abspath_or_url,
                                          pair->src_revnum, ctx, pool));
@@ -895,8 +890,7 @@ repos_to_repos_copy(const apr_array_head
     }
 
   /* Point the RA session to our current TOP_URL. */
-  SVN_ERR(svn_client__ensure_ra_session_url(&ignored_url, ra_session,
-                                            top_url, pool));
+  SVN_ERR(svn_ra_reparent(ra_session, top_url, pool));
 
   /* If we're allowed to create nonexistent parent directories of our
      destinations, then make a list in NEW_DIRS of the parent
@@ -1000,18 +994,12 @@ repos_to_repos_copy(const apr_array_head
       svn_node_kind_t dst_kind;
       const char *src_rel, *dst_rel;
 
-      src_rel = svn_uri__is_child(top_url, pair->src_abspath_or_url, pool);
+      src_rel = svn_uri_skip_ancestor(top_url, pair->src_abspath_or_url, pool);
       if (src_rel)
         {
           SVN_ERR(svn_ra_check_path(ra_session, src_rel, pair->src_revnum,
                                     &info->src_kind, pool));
         }
-      else if (strcmp(pair->src_abspath_or_url, top_url) == 0)
-        {
-          src_rel = "";
-          SVN_ERR(svn_ra_check_path(ra_session, src_rel, pair->src_revnum,
-                                    &info->src_kind, pool));
-        }
       else
         {
           const char *old_url = NULL;
@@ -1835,19 +1823,16 @@ repos_to_wc_copy(const apr_array_header_
     {
       svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
                                                     svn_client__copy_pair_t *);
-      const char *src, *ignored_url;
-      svn_opt_revision_t *new_rev, *ignored_rev, dead_end_rev;
+      const char *src;
+      svn_opt_revision_t *new_rev;
 
       svn_pool_clear(iterpool);
-      dead_end_rev.kind = svn_opt_revision_unspecified;
 
-      SVN_ERR(svn_client__repos_locations(&src, &new_rev,
-                                          &ignored_url, &ignored_rev,
+      SVN_ERR(svn_client__repos_locations(&src, &new_rev, NULL, NULL,
                                           NULL,
                                           pair->src_abspath_or_url,
                                           &pair->src_peg_revision,
-                                          &pair->src_op_revision,
-                                          &dead_end_rev,
+                                          &pair->src_op_revision, NULL,
                                           ctx, iterpool));
 
       pair->src_original = pair->src_abspath_or_url;
@@ -2161,9 +2146,9 @@ try_copy(const apr_array_header_t *sourc
     {
       if (!srcs_are_urls)
         {
-          /* If we are doing a wc->* move, but with an operational revision
+          /* If we are doing a wc->* copy, but with an operational revision
              other than the working copy revision, we are really doing a
-             repo->* move, because we're going to need to get the rev from the
+             repo->* copy, because we're going to need to get the rev from the
              repo. */
 
           svn_boolean_t need_repos_op_rev = FALSE;

Modified: subversion/branches/fs-py/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/diff.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/diff.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/diff.c Wed Sep 14 13:46:56 2011
@@ -254,7 +254,7 @@ adjust_relative_to_repos_root(const char
   return SVN_NO_ERROR;
 }
 
-/* Adjust PATH, ORIG_PATH_1 and ORIG_PATH_2, representing the changed file
+/* Adjust *PATH, *ORIG_PATH_1 and *ORIG_PATH_2, representing the changed file
  * and the two original targets passed to the diff command, to handle the
  * case when we're dealing with different anchors. RELATIVE_TO_DIR is the
  * directory the diff target should be considered relative to. All
@@ -459,10 +459,6 @@ print_git_diff_header_modified(svn_strea
  * are the paths passed to the original diff command. REV1 and REV2 are
  * revisions being diffed. COPYFROM_PATH and COPYFROM_REV indicate where the
  * diffed item was copied from.
- * RA_SESSION and WC_CTX are used to adjust paths in the headers to be
- * relative to the repository root.
- * WC_ROOT_ABSPATH is the absolute path to the root directory of a working
- * copy involved in a repos-wc diff, and may be NULL.
  * Use SCRATCH_POOL for temporary allocations. */
 static svn_error_t *
 print_git_diff_header(svn_stream_t *os,
@@ -475,9 +471,6 @@ print_git_diff_header(svn_stream_t *os,
                       const char *copyfrom_path,
                       svn_revnum_t copyfrom_rev,
                       const char *header_encoding,
-                      svn_ra_session_t *ra_session,
-                      svn_wc_context_t *wc_ctx,
-                      const char *wc_root_abspath,
                       apr_pool_t *scratch_pool)
 {
   if (operation == svn_diff_op_deleted)
@@ -566,8 +559,9 @@ display_prop_diffs(const apr_array_heade
                    apr_pool_t *pool)
 {
   int i;
-  const char *path1 = apr_pstrdup(pool, orig_path1);
-  const char *path2 = apr_pstrdup(pool, orig_path2);
+  const char *path1 = orig_path1;
+  const char *path2 = orig_path2;
+  apr_pool_t *iterpool;
 
   if (use_git_diff_format)
     {
@@ -589,8 +583,8 @@ display_prop_diffs(const apr_array_heade
     {
       const char *label1;
       const char *label2;
-      const char *adjusted_path1 = apr_pstrdup(pool, path1);
-      const char *adjusted_path2 = apr_pstrdup(pool, path2);
+      const char *adjusted_path1 = path1;
+      const char *adjusted_path2 = path2;
 
       SVN_ERR(adjust_paths_for_diff_labels(&path, &adjusted_path1,
                                            &adjusted_path2,
@@ -616,8 +610,7 @@ display_prop_diffs(const apr_array_heade
                                         svn_diff_op_modified,
                                         path1, path2, rev1, rev2, NULL,
                                         SVN_INVALID_REVNUM,
-                                        encoding, ra_session, wc_ctx,
-                                        wc_root_abspath, pool));
+                                        encoding, pool));
           SVN_ERR(svn_stream_close(os));
         }
 
@@ -637,6 +630,7 @@ display_prop_diffs(const apr_array_heade
   SVN_ERR(file_printf_from_utf8(file, encoding, "%s" APR_EOL_STR,
                                 under_string));
 
+  iterpool = svn_pool_create(pool);
   for (i = 0; i < propchanges->nelts; i++)
     {
       const char *action;
@@ -657,6 +651,8 @@ display_prop_diffs(const apr_array_heade
               && svn_string_compare(original_value, propchange->value)))
         continue;
 
+      svn_pool_clear(iterpool);
+
       if (! original_value)
         action = "Added";
       else if (! propchange->value)
@@ -671,7 +667,7 @@ display_prop_diffs(const apr_array_heade
           const char *orig = original_value ? original_value->data : NULL;
           const char *val = propchange->value ? propchange->value->data : NULL;
           svn_error_t *err = display_mergeinfo_diff(orig, val, encoding,
-                                                    file, pool);
+                                                    file, iterpool);
 
           /* Issue #3896: If we can't pretty-print mergeinfo differences
              because invalid mergeinfo is present, then don't let the diff
@@ -688,7 +684,7 @@ display_prop_diffs(const apr_array_heade
         }
 
       {
-        svn_stream_t *os = svn_stream_from_aprfile2(file, TRUE, pool);
+        svn_stream_t *os = svn_stream_from_aprfile2(file, TRUE, iterpool);
         svn_diff_t *diff;
         svn_diff_file_options_t options = { 0 };
         const svn_string_t *tmp;
@@ -699,14 +695,16 @@ display_prop_diffs(const apr_array_heade
            Since the diff is not useful anyway for patching properties an
            eol character is appended when needed to remove those pescious
            ' \ No newline at end of file' lines. */
-        tmp = original_value ? original_value : svn_string_create("", pool);
-        orig = maybe_append_eol(tmp, pool);
+        tmp = original_value ? original_value : svn_string_create("",
+                                                                  iterpool);
+        orig = maybe_append_eol(tmp, iterpool);
 
         tmp = propchange->value ? propchange->value :
-                                  svn_string_create("", pool);
-        val = maybe_append_eol(tmp, pool);
+                                  svn_string_create("", iterpool);
+        val = maybe_append_eol(tmp, iterpool);
 
-        SVN_ERR(svn_diff_mem_string_diff(&diff, orig, val, &options, pool));
+        SVN_ERR(svn_diff_mem_string_diff(&diff, orig, val, &options,
+                                         iterpool));
 
         /* UNIX patch will try to apply a diff even if the diff header
          * is missing. It tries to be helpful by asking the user for a
@@ -716,13 +714,16 @@ display_prop_diffs(const apr_array_heade
          * instead of "@@" as the default hunk delimiter for property diffs.
          * We also supress the diff header. */
         SVN_ERR(svn_diff_mem_string_output_unified2(os, diff, FALSE, "##",
-                                           svn_dirent_local_style(path, pool),
-                                           svn_dirent_local_style(path, pool),
-                                           encoding, orig, val, pool));
+                                           svn_dirent_local_style(path,
+                                                                  iterpool),
+                                           svn_dirent_local_style(path,
+                                                                  iterpool),
+                                           encoding, orig, val, iterpool));
         SVN_ERR(svn_stream_close(os));
 
       }
     }
+  svn_pool_destroy(iterpool);
 
   return SVN_NO_ERROR;
 }
@@ -919,16 +920,13 @@ diff_content_changed(const char *path,
   apr_file_t *errfile = diff_cmd_baton->errfile;
   const char *label1, *label2;
   svn_boolean_t mt1_binary = FALSE, mt2_binary = FALSE;
-  const char *path1, *path2;
+  const char *path1 = diff_cmd_baton->orig_path_1;
+  const char *path2 = diff_cmd_baton->orig_path_2;
 
   /* Get a stream from our output file. */
   os = svn_stream_from_aprfile2(diff_cmd_baton->outfile, TRUE, subpool);
 
   /* Generate the diff headers. */
-
-  path1 = apr_pstrdup(subpool, diff_cmd_baton->orig_path_1);
-  path2 = apr_pstrdup(subpool, diff_cmd_baton->orig_path_2);
-
   SVN_ERR(adjust_paths_for_diff_labels(&path, &path1, &path2,
                                        rel_to_dir, subpool));
 
@@ -1040,9 +1038,6 @@ diff_content_changed(const char *path,
                                             copyfrom_path,
                                             copyfrom_rev,
                                             diff_cmd_baton->header_encoding,
-                                            diff_cmd_baton->ra_session,
-                                            diff_cmd_baton->wc_ctx,
-                                            diff_cmd_baton->wc_root_abspath,
                                             subpool));
             }
 
@@ -1751,7 +1746,7 @@ diff_repos_repos(const svn_wc_diff_callb
      Otherwise, we just use "". */
   SVN_ERR(svn_client__get_diff_editor(
                 &diff_editor, &diff_edit_baton,
-                NULL, "", depth,
+                depth,
                 extra_ra_session, rev1, TRUE /* walk_deleted_dirs */,
                 TRUE /* text_deltas */,
                 callbacks, callback_baton,
@@ -1844,17 +1839,13 @@ diff_repos_wc(const char *path1,
      actual URLs will be. */
   if (peg_revision->kind != svn_opt_revision_unspecified)
     {
-      svn_opt_revision_t *start_ignore, *end_ignore, end;
-      const char *url_ignore;
-
-      end.kind = svn_opt_revision_unspecified;
+      svn_opt_revision_t *start_ignore;
 
-      SVN_ERR(svn_client__repos_locations(&url1, &start_ignore,
-                                          &url_ignore, &end_ignore,
+      SVN_ERR(svn_client__repos_locations(&url1, &start_ignore, NULL, NULL,
                                           NULL,
                                           path1,
                                           peg_revision,
-                                          revision1, &end,
+                                          revision1, NULL,
                                           ctx, pool));
       if (!reverse)
         {
@@ -2119,7 +2110,7 @@ diff_summarize_repos_repos(svn_client_di
 
   /* Set up the repos_diff editor. */
   SVN_ERR(svn_client__get_diff_editor(&diff_editor, &diff_edit_baton,
-            NULL /* wc_ctx */, "", depth,
+            depth,
             extra_ra_session, rev1, TRUE /* walk_deleted_dirs */,
             FALSE /* text_deltas */,
             callbacks, callback_baton,

Modified: subversion/branches/fs-py/subversion/libsvn_client/export.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/export.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/export.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/export.c Wed Sep 14 13:46:56 2011
@@ -1039,7 +1039,6 @@ svn_client_export5(svn_revnum_t *result_
                    apr_pool_t *pool)
 {
   svn_revnum_t edit_revision = SVN_INVALID_REVNUM;
-  const char *url;
   svn_boolean_t from_is_url = svn_path_is_url(from_path_or_url);
 
   SVN_ERR_ASSERT(peg_revision != NULL);
@@ -1056,10 +1055,10 @@ svn_client_export5(svn_revnum_t *result_
   if (from_is_url || ! SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind))
     {
       svn_revnum_t revnum;
+      const char *url;
       svn_ra_session_t *ra_session;
       svn_node_kind_t kind;
       struct edit_baton *eb = apr_pcalloc(pool, sizeof(*eb));
-      const char *repos_root_url;
 
       /* Get the RA connection. */
       SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
@@ -1067,9 +1066,6 @@ svn_client_export5(svn_revnum_t *result_
                                                peg_revision,
                                                revision, ctx, pool));
 
-      /* Get the repository root. */
-      SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
-
       eb->root_path = to_path;
       eb->root_url = url;
       eb->force = overwrite;
@@ -1182,6 +1178,9 @@ svn_client_export5(svn_revnum_t *result_
                                                     &edit_baton,
                                                     pool));
 
+          SVN_ERR(svn_editor__insert_shims(&export_editor, &edit_baton,
+                                           export_editor, edit_baton,
+                                           pool, pool));
 
           /* Manufacture a basic 'report' to the update reporter. */
           SVN_ERR(svn_ra_do_update2(ra_session,
@@ -1219,8 +1218,10 @@ svn_client_export5(svn_revnum_t *result_
 
           if (! ignore_externals && depth == svn_depth_infinity)
             {
+              const char *repos_root_url;
               const char *to_abspath;
 
+              SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
               SVN_ERR(svn_dirent_get_absolute(&to_abspath, to_path, pool));
               SVN_ERR(svn_client__export_externals(eb->externals,
                                                    from_path_or_url,

Modified: subversion/branches/fs-py/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/externals.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/externals.c Wed Sep 14 13:46:56 2011
@@ -126,8 +126,8 @@ relegate_dir_external(svn_wc_context_t *
 static svn_error_t *
 switch_dir_external(const char *local_abspath,
                     const char *url,
-                    const svn_opt_revision_t *revision,
                     const svn_opt_revision_t *peg_revision,
+                    const svn_opt_revision_t *revision,
                     const char *defining_abspath,
                     svn_boolean_t *timestamp_sleep,
                     svn_client_ctx_t *ctx,
@@ -135,10 +135,18 @@ switch_dir_external(const char *local_ab
 {
   svn_node_kind_t kind;
   svn_error_t *err;
+  svn_revnum_t external_peg_rev = SVN_INVALID_REVNUM;
+  svn_revnum_t external_rev = SVN_INVALID_REVNUM;
   apr_pool_t *subpool = svn_pool_create(pool);
 
   SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
 
+  if (peg_revision->kind == svn_opt_revision_number)
+    external_peg_rev = peg_revision->value.number;
+
+  if (revision->kind == svn_opt_revision_number)
+    external_rev = revision->value.number;
+
   /* If path is a directory, try to update/switch to the correct URL
      and revision. */
   SVN_ERR(svn_io_check_path(local_abspath, &kind, pool));
@@ -230,8 +238,8 @@ switch_dir_external(const char *local_ab
                                                 svn_uri_skip_ancestor(
                                                             repos_root_url,
                                                             url, subpool),
-                                                SVN_INVALID_REVNUM,
-                                                SVN_INVALID_REVNUM,
+                                                external_peg_rev,
+                                                external_rev,
                                                 subpool));
 
               svn_pool_destroy(subpool);
@@ -288,8 +296,8 @@ switch_dir_external(const char *local_ab
                                       repos_root_url, repos_uuid,
                                       svn_uri_skip_ancestor(repos_root_url,
                                                             url, pool),
-                                      SVN_INVALID_REVNUM,
-                                      SVN_INVALID_REVNUM,
+                                      external_peg_rev,
+                                      external_rev,
                                       pool));
   }
 
@@ -824,10 +832,10 @@ handle_external_item_change(const struct
      iterpool, since the hash table values outlive the iterpool and
      any pointers they have should also outlive the iterpool.  */
 
-   SVN_ERR(resolve_relative_external_url(&new_url,
-                                         new_item, eb->repos_root_url,
-                                         parent_dir_url,
-                                         scratch_pool, scratch_pool));
+  SVN_ERR(resolve_relative_external_url(&new_url,
+                                        new_item, eb->repos_root_url,
+                                        parent_dir_url,
+                                        scratch_pool, scratch_pool));
 
   /* If the external is being checked out, exported or updated,
      determine if the external is a file or directory. */
@@ -871,17 +879,21 @@ handle_external_item_change(const struct
      the global case is hard, and it should be pretty obvious to a
      user when it happens.  Worst case: your disk fills up :-). */
 
+  /* First notify that we're about to handle an external. */
+  if (eb->ctx->notify_func2)
+    {
+      (*eb->ctx->notify_func2)(
+         eb->ctx->notify_baton2,
+         svn_wc_create_notify(local_abspath,
+                              svn_wc_notify_update_external,
+                              scratch_pool),
+         scratch_pool);
+    }
+
   if (! old_defining_abspath)
     {
       /* This branch is only used during a checkout or an export. */
 
-      /* First notify that we're about to handle an external. */
-      if (eb->ctx->notify_func2)
-        (*eb->ctx->notify_func2)(
-           eb->ctx->notify_baton2,
-           svn_wc_create_notify(local_abspath, svn_wc_notify_update_external,
-                                scratch_pool), scratch_pool);
-
       switch (ra_cache.kind)
         {
         case svn_node_dir:
@@ -924,18 +936,6 @@ handle_external_item_change(const struct
     {
       /* This branch handles a definition change or simple update. */
 
-      /* First notify that we're about to handle an external. */
-      if (eb->ctx->notify_func2)
-        {
-          svn_wc_notify_t *nt;
-
-          nt = svn_wc_create_notify(local_abspath,
-                                    svn_wc_notify_update_external,
-                                    scratch_pool);
-
-          eb->ctx->notify_func2(eb->ctx->notify_baton2, nt, scratch_pool);
-        }
-
       /* Either the URL changed, or the exact same item is present in
          both hashes, and caller wants to update such unchanged items.
          In the latter case, the call below will try to make sure that
@@ -945,8 +945,8 @@ handle_external_item_change(const struct
         {
         case svn_node_dir:
           SVN_ERR(switch_dir_external(local_abspath, new_url,
-                                      &(new_item->revision),
                                       &(new_item->peg_revision),
+                                      &(new_item->revision),
                                       parent_dir_abspath,
                                       eb->timestamp_sleep, eb->ctx,
                                       scratch_pool));

Modified: subversion/branches/fs-py/subversion/libsvn_client/info.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_client/info.c?rev=1170622&r1=1170621&r2=1170622&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_client/info.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_client/info.c Wed Sep 14 13:46:56 2011
@@ -186,20 +186,18 @@ same_resource_in_head(svn_boolean_t *sam
                       apr_pool_t *pool)
 {
   svn_error_t *err;
-  svn_opt_revision_t start_rev, end_rev, peg_rev;
+  svn_opt_revision_t start_rev, peg_rev;
   svn_opt_revision_t *ignored_rev;
-  const char *head_url, *ignored_url;
+  const char *head_url;
 
   start_rev.kind = svn_opt_revision_head;
   peg_rev.kind = svn_opt_revision_number;
   peg_rev.value.number = rev;
-  end_rev.kind = svn_opt_revision_unspecified;
 
-  err = svn_client__repos_locations(&head_url, &ignored_rev,
-                                    &ignored_url, &ignored_rev,
+  err = svn_client__repos_locations(&head_url, &ignored_rev, NULL, NULL,
                                     ra_session,
                                     url, &peg_rev,
-                                    &start_rev, &end_rev,
+                                    &start_rev, NULL,
                                     ctx, pool);
   if (err &&
       ((err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES) ||



Mime
View raw message