You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/12/18 18:36:29 UTC

svn commit: r1220465 [9/13] - in /subversion/branches/file-handle-cache: ./ build/ build/ac-macros/ contrib/client-side/emacs/ contrib/server-side/mod_dontdothat/ notes/ subversion/bindings/javahl/tests/org/apache/subversion/javahl/ subversion/bindings...

Modified: subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db.h?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db.h Sun Dec 18 17:36:24 2011
@@ -1133,6 +1133,37 @@ svn_wc__db_external_read(svn_wc__db_stat
                          apr_pool_t *result_pool,
                          apr_pool_t *scratch_pool);
 
+/* Return in *EXTERNALS a list of svn_wc__committable_external_info_t *
+ * containing info on externals defined to be checked out below LOCAL_ABSPATH,
+ * returning only those externals that are not fixed to a specific revision.
+ *
+ * If IMMEDIATES_ONLY is TRUE, only those externals defined to be checked out
+ * as immediate children of LOCAL_ABSPATH are returned (this is useful for
+ * treating user requested depth < infinity).
+ *
+ * If there are no externals to be returned, set *EXTERNALS to NULL. Otherwise
+ * set *EXTERNALS to an APR array newly cleated in RESULT_POOL.
+ *
+ * NOTE: This only returns the externals known by the immediate WC root for
+ * LOCAL_ABSPATH; i.e.:
+ * - If there is a further parent WC "above" the immediate WC root, and if
+ *   that parent WC defines externals to live somewhere within this WC, these
+ *   externals will appear to be foreign/unversioned and won't be picked up.
+ * - Likewise, only the topmost level of externals nestings (externals
+ *   defined within a checked out external dir) is picked up by this function.
+ *   (For recursion, see svn_wc__committable_externals_below().)
+ *
+ * ###TODO: Add a WRI_ABSPATH (wc root indicator) separate from LOCAL_ABSPATH,
+ * to allow searching any wc-root for externals under LOCAL_ABSPATH, not only
+ * LOCAL_ABSPATH's most immediate wc-root. */
+svn_error_t *
+svn_wc__db_committable_externals_below(apr_array_header_t **externals,
+                                       svn_wc__db_t *db,
+                                       const char *local_abspath,
+                                       svn_boolean_t immediates_only,
+                                       apr_pool_t *result_pool,
+                                       apr_pool_t *scratch_pool);
+
 /* Gets a mapping from const char * local abspaths of externals to the const
    char * local abspath of where they are defined for all externals defined
    at or below LOCAL_ABSPATH.
@@ -1207,6 +1238,7 @@ svn_error_t *
 svn_wc__db_op_copy_shadowed_layer(svn_wc__db_t *db,
                                   const char *src_abspath,
                                   const char *dst_abspath,
+                                  svn_boolean_t is_move,
                                   apr_pool_t *scratch_pool);
 
 
@@ -1407,6 +1439,32 @@ svn_wc__db_op_delete(svn_wc__db_t *db,
                      apr_pool_t *scratch_pool);
 
 
+/* Mark all LOCAL_ABSPATH in the TARGETS array, and all of their children,
+ * for deletion.
+ *
+ * This function is more efficient than svn_wc__db_op_delete() because
+ * only one sqlite transaction is used for all targets.
+ * It currently lacks support for moves (though this could be changed,
+ * at which point svn_wc__db_op_delete() becomes redundant).
+ *
+ * If NOTIFY_FUNC is not NULL, then it will be called (with NOTIFY_BATON)
+ * for each node deleted. While this processing occurs, if CANCEL_FUNC is
+ * not NULL, then it will be called (with CANCEL_BATON) to detect cancellation
+ * during the processing.
+ *
+ * Note: the notification (and cancellation) occur outside of a SQLite
+ * transaction.
+ */
+svn_error_t *
+svn_wc__db_op_delete_many(svn_wc__db_t *db,
+                          apr_array_header_t *targets,
+                          svn_cancel_func_t cancel_func,
+                          void *cancel_baton,
+                          svn_wc_notify_func2_t notify_func,
+                          void *notify_baton,
+                          apr_pool_t *scratch_pool);
+
+
 /* ### mark PATH as (possibly) modified. "svn edit" ... right API here? */
 svn_error_t *
 svn_wc__db_op_modified(svn_wc__db_t *db,
@@ -2507,7 +2565,8 @@ svn_wc__db_scan_addition(svn_wc__db_stat
 
    If the user moves-away B/W/D from the WORKING tree, then behavior is
    again dependent upon the origination of B/W. For a plain add, the nodes
-   simply move to the destination. For a copy, a deletion is made at B/W/D,
+   simply move to the destination; this means that B/W/D ceases to be a
+   node and so cannot be scanned. For a copy, a deletion is made at B/W/D,
    and a new copy (of a subtree of the original source) is made at the
    destination. For a move-here, a deletion is made, and a copy is made at
    the destination (we do not track multiple moves; the source is moved to
@@ -2517,13 +2576,6 @@ svn_wc__db_scan_addition(svn_wc__db_stat
 
    There are three further considerations when resolving a deleted node:
 
-     If the BASE B/W/D was moved-away, then BASE_DEL_ABSPATH will specify
-     B/W/D as the root of the BASE deletion (not necessarily B/W as an
-     implicit delete caused by a replacement; only the closest ancestor is
-     reported). The other parameters will operate as normal, based on what
-     is happening in the WORKING tree. Also note that ancestors of B/W/D
-     may report additional, explicit moved-away status.
-
      If the BASE B/W/D was deleted explicitly *and* B/W is a replacement,
      then the explicit deletion is subsumed by the implicit deletion that
      occurred with the B/W replacement. Thus, BASE_DEL_ABSPATH will point
@@ -2988,19 +3040,6 @@ svn_wc__db_min_max_revisions(svn_revnum_
                              svn_boolean_t committed,
                              apr_pool_t *scratch_pool);
 
-/* Indicate in *IS_SPARSE_CHECKOUT whether any of the nodes within
- * LOCAL_ABSPATH is sparse, using DB.
- * Use SCRATCH_POOL for temporary allocations.
- *
- * This function provides a subset of the functionality of
- * svn_wc__db_revision_status() and is more efficient if the caller
- * doesn't need all information returned by svn_wc__db_revision_status(). */
-svn_error_t *
-svn_wc__db_is_sparse_checkout(svn_boolean_t *is_sparse_checkout,
-                              svn_wc__db_t *db,
-                              const char *local_abspath,
-                              apr_pool_t *scratch_pool);
-
 /* Indicate in *IS_SWITCHED whether any node beneath LOCAL_ABSPATH
  * is switched, using DB. Use SCRATCH_POOL for temporary allocations.
  *

Modified: subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_pristine.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_pristine.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_pristine.c (original)
+++ subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_pristine.c Sun Dec 18 17:36:24 2011
@@ -225,7 +225,15 @@ svn_wc__db_pristine_read(svn_stream_t **
 
   SVN_ERR_ASSERT(contents != NULL);
   SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath));
-  SVN_ERR_ASSERT(sha1_checksum != NULL);
+
+  /* Some 1.6-to-1.7 wc upgrades created rows without checksums and
+     updating such a row passes NULL here. */
+  if (!sha1_checksum)
+    return svn_error_createf(SVN_ERR_WC_CORRUPT, NULL,
+                             _("Can't read '%s' from pristine store "
+                               "because no checksum supplied"),
+                             svn_dirent_local_style(wri_abspath, scratch_pool));
+
   SVN_ERR_ASSERT(sha1_checksum->kind == svn_checksum_sha1);
 
   SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,

Modified: subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_wcroot.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_wcroot.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/branches/file-handle-cache/subversion/libsvn_wc/wc_db_wcroot.c Sun Dec 18 17:36:24 2011
@@ -145,7 +145,7 @@ get_path_kind(svn_node_kind_t *kind,
 }
 
 
-/* */
+/* Return an error if the work queue in SDB is non-empty. */
 static svn_error_t *
 verify_no_work(svn_sqlite__db_t *sdb)
 {

Modified: subversion/branches/file-handle-cache/subversion/libsvn_wc/workqueue.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/libsvn_wc/workqueue.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/libsvn_wc/workqueue.c (original)
+++ subversion/branches/file-handle-cache/subversion/libsvn_wc/workqueue.c Sun Dec 18 17:36:24 2011
@@ -668,9 +668,24 @@ run_file_install(svn_wc__db_t *db,
                                       local_relpath,
                                       scratch_pool, scratch_pool));
     }
+  else if (! checksum)
+    {
+      /* This error replaces a previous assertion. Reporting an error from here
+         leaves the workingqueue operation in place, so the working copy is
+         still broken!
+
+         But when we report this error the user at least knows what node has
+         this specific problem, so maybe we can find out why users see this
+         error */
+      return svn_error_createf(SVN_ERR_WC_CORRUPT_TEXT_BASE, NULL,
+                               _("Can't install '%s' from pristine store, "
+                                 "because no checksum is recorded for this "
+                                 "file"),
+                               svn_dirent_local_style(local_abspath,
+                                                      scratch_pool));
+    }
   else
     {
-      SVN_ERR_ASSERT(checksum != NULL);
       SVN_ERR(svn_wc__db_pristine_get_future_path(&source_abspath,
                                                   wcroot_abspath,
                                                   checksum,

Modified: subversion/branches/file-handle-cache/subversion/mod_dav_svn/mod_dav_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/mod_dav_svn/mod_dav_svn.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/mod_dav_svn/mod_dav_svn.c (original)
+++ subversion/branches/file-handle-cache/subversion/mod_dav_svn/mod_dav_svn.c Sun Dec 18 17:36:24 2011
@@ -215,8 +215,15 @@ merge_dir_config(apr_pool_t *p, void *ba
   newconf->list_parentpath = INHERIT_VALUE(parent, child, list_parentpath);
   newconf->txdelta_cache = INHERIT_VALUE(parent, child, txdelta_cache);
   newconf->fulltext_cache = INHERIT_VALUE(parent, child, fulltext_cache);
-  /* Prefer our parent's value over our new one - hence the swap. */
-  newconf->root_dir = INHERIT_VALUE(child, parent, root_dir);
+  newconf->root_dir = INHERIT_VALUE(parent, child, root_dir);
+
+  if (parent->fs_path)
+    ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
+                 "mod_dav_svn: nested Location '%s' hinders access to '%s' "
+                 "in SVNPath Location '%s'",
+                 child->root_dir,
+                 svn_urlpath__skip_ancestor(parent->root_dir, child->root_dir),
+                 parent->root_dir);
 
   return newconf;
 }

Modified: subversion/branches/file-handle-cache/subversion/mod_dav_svn/reports/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/mod_dav_svn/reports/log.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/mod_dav_svn/reports/log.c (original)
+++ subversion/branches/file-handle-cache/subversion/mod_dav_svn/reports/log.c Sun Dec 18 17:36:24 2011
@@ -30,6 +30,7 @@
 #include "svn_repos.h"
 #include "svn_string.h"
 #include "svn_types.h"
+#include "svn_base64.h"
 #include "svn_xml.h"
 #include "svn_path.h"
 #include "svn_dav.h"
@@ -61,6 +62,9 @@ struct log_receiver_baton
 
   /* whether the client requested any custom revprops */
   svn_boolean_t requested_custom_revprops;
+
+  /* whether the client can handle encoded binary property values */
+  svn_boolean_t encode_binary_props;
 };
 
 
@@ -119,35 +123,50 @@ log_receiver(void *baton,
            hi = apr_hash_next(hi))
         {
           char *name;
-          svn_string_t *value;
+          void *val;
+          const svn_string_t *value;
+          const char *encoding_str = "";
 
           svn_pool_clear(iterpool);
-          apr_hash_this(hi, (void *)&name, NULL, (void *)&value);
+          apr_hash_this(hi, (void *)&name, NULL, &val);
+          value = val;
+
+          /* If the client is okay with us encoding binary (or really,
+             any non-XML-safe) property values, do so as necessary. */
+          if (lrb->encode_binary_props)
+            {
+              if (! svn_xml_is_xml_safe(value->data, value->len))
+                {
+                  value = svn_base64_encode_string2(value, TRUE, iterpool);
+                  encoding_str = " encoding=\"base64\"";
+                }
+            }
+
           if (strcmp(name, SVN_PROP_REVISION_AUTHOR) == 0)
             SVN_ERR(dav_svn__brigade_printf
                     (lrb->bb, lrb->output,
-                     "<D:creator-displayname>%s</D:creator-displayname>"
-                     DEBUG_CR,
+                     "<D:creator-displayname%s>%s</D:creator-displayname>"
+                     DEBUG_CR, encoding_str,
                      apr_xml_quote_string(iterpool, value->data, 0)));
           else if (strcmp(name, SVN_PROP_REVISION_DATE) == 0)
             /* ### this should be DAV:creation-date, but we need to format
                ### that date a bit differently */
             SVN_ERR(dav_svn__brigade_printf
                     (lrb->bb, lrb->output,
-                     "<S:date>%s</S:date>" DEBUG_CR,
+                     "<S:date%s>%s</S:date>" DEBUG_CR, encoding_str,
                      apr_xml_quote_string(iterpool, value->data, 0)));
           else if (strcmp(name, SVN_PROP_REVISION_LOG) == 0)
             SVN_ERR(dav_svn__brigade_printf
                     (lrb->bb, lrb->output,
-                     "<D:comment>%s</D:comment>" DEBUG_CR,
+                     "<D:comment%s>%s</D:comment>" DEBUG_CR, encoding_str,
                      apr_xml_quote_string(pool,
                                           svn_xml_fuzzy_escape(value->data,
                                                                iterpool), 0)));
           else
             SVN_ERR(dav_svn__brigade_printf
                     (lrb->bb, lrb->output,
-                     "<S:revprop name=\"%s\">%s</S:revprop>" DEBUG_CR,
-                     apr_xml_quote_string(iterpool, name, 0),
+                     "<S:revprop name=\"%s\"%s>%s</S:revprop>" DEBUG_CR,
+                     apr_xml_quote_string(iterpool, name, 0), encoding_str,
                      apr_xml_quote_string(iterpool, value->data, 0)));
         }
     }
@@ -305,6 +324,7 @@ dav_svn__log_report(const dav_resource *
   seen_revprop_element = FALSE;
 
   lrb.requested_custom_revprops = FALSE;
+  lrb.encode_binary_props = FALSE;
   for (child = doc->root->first_child; child != NULL; child = child->next)
     {
       /* if this element isn't one of ours, then skip it */
@@ -333,6 +353,8 @@ dav_svn__log_report(const dav_resource *
         strict_node_history = TRUE; /* presence indicates positivity */
       else if (strcmp(child->name, "include-merged-revisions") == 0)
         include_merged_revisions = TRUE; /* presence indicates positivity */
+      else if (strcmp(child->name, "encode-binary-props") == 0)
+        lrb.encode_binary_props = TRUE; /* presence indicates positivity */
       else if (strcmp(child->name, "all-revprops") == 0)
         {
           revprops = NULL; /* presence indicates fetch all revprops */

Modified: subversion/branches/file-handle-cache/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/mod_dav_svn/repos.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/file-handle-cache/subversion/mod_dav_svn/repos.c Sun Dec 18 17:36:24 2011
@@ -1161,6 +1161,7 @@ create_private_resource(const dav_resour
 static void log_warning(void *baton, svn_error_t *err)
 {
   request_rec *r = baton;
+  const char *continuation = "";
 
   /* ### hmm. the FS is cleaned up at request cleanup time. "r" might
      ### not really be valid. we should probably put the FS into a
@@ -1170,7 +1171,15 @@ static void log_warning(void *baton, svn
      ### of our functions ... ??
   */
 
-  ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r, "%s", err->message);
+  /* Not showing file/line so no point in tracing */
+  err = svn_error_purge_tracing(err);
+  while (err)
+    {
+      ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r, "%s%s",
+                    continuation, err->message);
+      continuation = "-";
+      err = err->child;
+    }
 }
 
 

Modified: subversion/branches/file-handle-cache/subversion/po/de.po
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/po/de.po?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/po/de.po [UTF-8] (original)
+++ subversion/branches/file-handle-cache/subversion/po/de.po [UTF-8] Sun Dec 18 17:36:24 2011
@@ -236,9 +236,8 @@ msgid "Invalid character in hex checksum
 msgstr "Ungültiges Zeichen in der Hex-Prüfsumme gefunden"
 
 #: ../include/svn_error_codes.h:220
-#, fuzzy
 msgid "Unknown string value of token"
-msgstr "Unbekannter Status für Sperrbefehl"
+msgstr "Unbekannter Zeichenkettenwert für Sperrmarke"
 
 #: ../include/svn_error_codes.h:226
 msgid "No such XML tag attribute"
@@ -303,9 +302,8 @@ msgid "Unrecognized stream data"
 msgstr "Unbekannter Datenstrom"
 
 #: ../include/svn_error_codes.h:294
-#, fuzzy
 msgid "Stream doesn't support seeking"
-msgstr "Server unterstützt »edit pipelining« nicht"
+msgstr "Datenstrom unterstützt das Setzen der Position nicht"
 
 #: ../include/svn_error_codes.h:300
 msgid "Unknown svn_node_kind"
@@ -480,9 +478,8 @@ msgid "The specified node is not a symli
 msgstr "Der spezifizierte Knoten ist kein symbolischer Link"
 
 #: ../include/svn_error_codes.h:503
-#, fuzzy
 msgid "The specified path has an unexpected status"
-msgstr "Die angegebene Vergleichsoption wird nicht unterstützt"
+msgstr "Der angegebene Pfad hat einen unerwarteten Status"
 
 #: ../include/svn_error_codes.h:508
 #, fuzzy
@@ -490,9 +487,8 @@ msgid "The working copy needs to be upgr
 msgstr "Die Arbeitskopie fehlt"
 
 #: ../include/svn_error_codes.h:513
-#, fuzzy
 msgid "Previous operation was interrupted; run 'svn cleanup'"
-msgstr "Die Operation wurde unterbrochen"
+msgstr "Die vorhergehende Operation wurde unterbrochen; Starten Sie »svn cleanup«"
 
 #: ../include/svn_error_codes.h:518
 msgid "This operation can not be performed with just this depth."
@@ -883,9 +879,8 @@ msgid "Server SSL certificate untrusted"
 msgstr "Server-SSL-Zertifikat ist nicht vertrauenswürdig"
 
 #: ../include/svn_error_codes.h:986
-#, fuzzy
 msgid "Initialization of the GSSAPI context failed"
-msgstr "Initialisierung der SSPI-Bibliothek schlug fehl"
+msgstr "Initialisierung des GSSAPI-Kontextes schlug fehl"
 
 #: ../include/svn_error_codes.h:991
 msgid "While handling serf response:"
@@ -1052,9 +1047,8 @@ msgid "A file external cannot overwrite 
 msgstr "Ein externer Dateiverweis kann kein existierendes versioniertes Objekt überschreiben"
 
 #: ../include/svn_error_codes.h:1182
-#, fuzzy
 msgid "Invalid path component strip count specified"
-msgstr "Ungültige Revision angegeben"
+msgstr "Ungültige Anzahl der vom Pfad zu entfernenden Komponenten angegeben"
 
 #: ../include/svn_error_codes.h:1187
 msgid "Detected a cycle while processing the operation"
@@ -1245,9 +1239,8 @@ msgid "No external merge tool available"
 msgstr "Kein externes Werkzeug zum Zusammenführen verfügbar"
 
 #: ../include/svn_error_codes.h:1396
-#, fuzzy
 msgid "Failed processing one or more externals definitions"
-msgstr "»svn:externals«-Definitionen ignorieren"
+msgstr "Verarbeitung einer oder mehrerer »svn:externals«-Definitionen fehlgeschlagen"
 
 #: ../include/svn_error_codes.h:1402
 msgid "Assertion failure"
@@ -1287,9 +1280,9 @@ msgstr "»%s« endet mit einem reservier
 #: ../svn/export-cmd.c:91 ../svn/import-cmd.c:106 ../svn/resolve-cmd.c:106
 #: ../svn/resolved-cmd.c:76 ../svn/revert-cmd.c:77 ../svn/status-cmd.c:260
 #: ../svn/upgrade-cmd.c:72
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a local path"
-msgstr "»%s« ist keine Datei"
+msgstr "»%s« ist kein lokaler Pfad"
 
 #: ../libsvn_client/add.c:683 ../libsvn_ra/ra_loader.c:373
 #: ../libsvn_ra_serf/serf.c:366 ../libsvn_ra_serf/serf.c:482
@@ -1348,9 +1341,9 @@ msgid "URL '%s' refers to a file, not a 
 msgstr "Die URL »%s« verweist auf eine Datei, nicht auf ein Verzeichnis"
 
 #: ../libsvn_client/checkout.c:204
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is already a working copy for a different URL; use 'svn update' to update it"
-msgstr "»%s« ist bereits eine Arbeitskopie für eine andere URL"
+msgstr "»%s« ist bereits eine Arbeitskopie für eine andere URL; Verwenden Sie »svn update« um sie zu aktualisieren"
 
 #: ../libsvn_client/checkout.c:212
 #, c-format
@@ -1418,9 +1411,8 @@ msgid "Error bumping revisions post-comm
 msgstr "Fehler beim Weiterschalten der Revisionen nach der Übertragung (Details folgen):"
 
 #: ../libsvn_client/commit.c:968
-#, fuzzy
 msgid "Are all targets part of the same working copy?"
-msgstr "Sind alle Ziele Teil derselben Arbeitskopie?"
+msgstr "Sind alle Ziele Teil der selben Arbeitskopie?"
 
 #: ../libsvn_client/commit.c:1007
 msgid "Cannot non-recursively commit a directory deletion of a directory with child nodes"
@@ -1513,9 +1505,8 @@ msgid "Path '%s' already exists, but is 
 msgstr "Pfad »%s« existiert bereits, ist aber kein Verzeichnis"
 
 #: ../libsvn_client/copy.c:775
-#, fuzzy
 msgid "Source and destination URLs appear not to all point to the same repository."
-msgstr "Quelle und Ziel scheinen sich nicht im selben Projektarchiv zu befinden (Quelle: »%s«; Ziel: »%s«)"
+msgstr "Quellen- und Ziel-URL scheinen nicht auf das selbe Projektarchiv zu zeigen."
 
 #: ../libsvn_client/copy.c:985
 #, c-format
@@ -1587,9 +1578,9 @@ msgid "'%s' is in the way of the resourc
 msgstr "»%s« ist der Ressource, die sich unter Versionskontrolle befindet, im Weg"
 
 #: ../libsvn_client/delete.c:74
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' has local modifications -- commit or revert them first"
-msgstr "»%s« hat lokale Änderungen"
+msgstr "»%s« hat lokale Änderungen -- zuerst übertragen oder zurücksetzen"
 
 #: ../libsvn_client/delete.c:104
 #, c-format
@@ -1598,9 +1589,9 @@ msgstr "Externer Dateiverweis bei »%s«
 
 #: ../libsvn_client/delete.c:339 ../libsvn_client/locking_commands.c:200
 #: ../svn/delete-cmd.c:68 ../svn/diff-cmd.c:288 ../svn/lock-cmd.c:116
-#, fuzzy, c-format
+#, c-format
 msgid "Cannot mix repository and working copy targets"
-msgstr "Quellen aus dem Projektarchiv und einer Arbeitskopie können nicht gemischt werden"
+msgstr "Ziele aus dem Projektarchiv und einer Arbeitskopie können nicht gemischt werden"
 
 #: ../libsvn_client/deprecated.c:714 ../svn/move-cmd.c:65
 msgid "Cannot specify revisions (except HEAD) with move operations"
@@ -1611,9 +1602,8 @@ msgid "No commits in repository"
 msgstr "Keine Übertragungen im Projektarchiv"
 
 #: ../libsvn_client/deprecated.c:2094 ../libsvn_wc/deprecated.c:3370
-#, fuzzy
 msgid "Non-recursive relocation not supported"
-msgstr "Umplatzieren innerhalb des Projektarchivs nicht erlaubt"
+msgstr "Nicht-rekursives Umplatzieren nicht unterstützt"
 
 #: ../libsvn_client/diff.c:136
 #, c-format
@@ -1652,9 +1642,9 @@ msgid "Cannot display: file marked as a 
 msgstr "Kann nicht anzeigen: Dateityp ist als binär angegeben.%s"
 
 #: ../libsvn_client/diff.c:1326
-#, fuzzy, c-format
+#, c-format
 msgid "Path '%s' has no URL"
-msgstr "»%s« hat keine URL"
+msgstr "Pfad »%s« hat keine URL"
 
 #: ../libsvn_client/diff.c:1395 ../libsvn_client/merge.c:6304
 #: ../libsvn_client/merge.c:8984
@@ -1844,9 +1834,9 @@ msgid "Missing required revision specifi
 msgstr "Es wurde keine Revision angegeben"
 
 #: ../libsvn_client/log.c:401
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a relative path"
-msgstr "»%s« ist keine Datei"
+msgstr "»%s« ist kein relativer Pfad"
 
 #: ../libsvn_client/log.c:422
 msgid "When specifying working copy paths, only one target may be given"
@@ -1983,14 +1973,13 @@ msgid "Only depths 'infinity' and 'empty
 msgstr ""
 
 #: ../libsvn_client/patch.c:243
-#, fuzzy, c-format
+#, c-format
 msgid "Cannot strip %u components from '%s'"
-msgstr "Zeile kann nicht in Komponenten zerlegt werden: »%s«"
+msgstr "Kann nicht %u Komponenten von »%s« entfernen"
 
 #: ../libsvn_client/patch.c:2754
-#, fuzzy
 msgid "strip count must be positive"
-msgstr "Parameter für --limit muss positiv sein"
+msgstr "Anzahl der zu entfernenden Komponenten muss positiv sein"
 
 #: ../libsvn_client/prop_commands.c:80
 #, c-format
@@ -2043,9 +2032,8 @@ msgid "revprop '%s' in r%ld is unexpecte
 msgstr "Revisionseigenschaft »%s« in r%ld ist unerwarteterweise im Projektarchiv vorhanden (eventuell hat jemand anderer sie gesetzt?)"
 
 #: ../libsvn_client/prop_commands.c:519
-#, fuzzy
 msgid "Author name should not contain a newline; value will not be set unless forced"
-msgstr "Der Wert kann nur mittels »force« gesetzt werden"
+msgstr "Der Autorenname sollte keinen Zeilenvorschub enthalten; Wert kann nur mittels »force« gesetzt werden"
 
 #: ../libsvn_client/prop_commands.c:764
 #, c-format
@@ -2137,21 +2125,19 @@ msgstr "Die URL »%s« ist kein Kind der
 
 #: ../libsvn_delta/svndiff.c:165
 msgid "Compression of svndiff data failed"
-msgstr "Kompression der svndiff-Daten schlug fehl"
+msgstr "Komprimierung der svndiff-Daten schlug fehl"
 
 #: ../libsvn_delta/svndiff.c:432
-#, fuzzy
 msgid "Decompression of svndiff data failed: no size"
-msgstr "Dekompression der svndiff-Daten schlug fehl"
+msgstr "Dekomprimierung der svndiff-Daten schlug fehl: Größe fehlt"
 
 #: ../libsvn_delta/svndiff.c:435
-#, fuzzy
 msgid "Decompression of svndiff data failed: size too large"
-msgstr "Dekompression der svndiff-Daten schlug fehl"
+msgstr "Dekomprimierung der svndiff-Daten schlug fehl: Größe zu groß"
 
 #: ../libsvn_delta/svndiff.c:456
 msgid "Decompression of svndiff data failed"
-msgstr "Dekompression der svndiff-Daten schlug fehl"
+msgstr "Dekomprimierung der svndiff-Daten schlug fehl"
 
 #: ../libsvn_delta/svndiff.c:463
 msgid "Size of uncompressed data does not match stored original length"
@@ -2163,9 +2149,9 @@ msgid "Invalid diff stream: insn %d cann
 msgstr "Ungültiger Diff-Strom: insn %d kann nicht dekodiert werden"
 
 #: ../libsvn_delta/svndiff.c:542
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid diff stream: insn %d has length zero"
-msgstr "Ungültiger Diff-Strom: insn %d hat negative Länge"
+msgstr "Ungültiger Diff-Strom: insn %d hat Länge Null"
 
 #: ../libsvn_delta/svndiff.c:546
 #, c-format
@@ -4193,28 +4179,27 @@ msgid ""
 msgstr ""
 
 #: ../libsvn_ra_serf/util.c:1421
-#, fuzzy
 msgid "Proxy authentication failed"
-msgstr "Authentifizierung schlug fehl"
+msgstr "Proxy-Anmeldung schlug fehl"
 
 #: ../libsvn_ra_serf/util.c:1495
-#, fuzzy, c-format
+#, c-format
 msgid "Premature EOF seen from server (http status=%d)"
-msgstr "Vorzeitiges EOF vom Server"
+msgstr "Vorzeitiges EOF vom Server (http Status=%d)"
 
 #: ../libsvn_ra_serf/util.c:1547
-#, fuzzy, c-format
+#, c-format
 msgid "Unspecified error message: %d %s"
-msgstr "Nicht spezifizierte Fehlermeldung"
+msgstr "Nicht spezifizierte Fehlermeldung: %d %s"
 
 #: ../libsvn_ra_serf/util.c:1815
 msgid "The OPTIONS response did not include the requested version-controlled-configuration value"
 msgstr "Die OPTIONS-Antwort enthielt nicht den angeforderten Wert »version-controlled-configuration«"
 
 #: ../libsvn_ra_serf/util.c:1932
-#, fuzzy, c-format
+#, c-format
 msgid "'%s': no lock token available"
-msgstr "Keine Sperrmarke angegeben"
+msgstr "»%s«: Keine Sperrmarke verfügbar"
 
 #: ../libsvn_ra_svn/client.c:136
 #, c-format
@@ -6057,19 +6042,16 @@ msgid "SQLite is required to be compiled
 msgstr "Es wird erwartet, dass SQLite im Thread-sicheren Modus kompiliert und gestartet wird"
 
 #: ../libsvn_subr/sqlite.c:731
-#, fuzzy
 msgid "Could not configure SQLite"
-msgstr "Konnte Datei nicht sichern"
+msgstr "Konnte SQLite nicht konfigurieren"
 
 #: ../libsvn_subr/sqlite.c:733
-#, fuzzy
 msgid "Could not initialize SQLite"
-msgstr "Konnte die SASL-Bibliothek nicht initialisieren"
+msgstr "Konnte SQLite nicht initialisieren"
 
 #: ../libsvn_subr/sqlite.c:742
-#, fuzzy
 msgid "Could not initialize SQLite shared cache"
-msgstr "Konnte die SASL-Bibliothek nicht initialisieren"
+msgstr "Konnte den gemeinsam genutzten SQLite-Zwischenspeicher nicht initialisieren"
 
 #: ../libsvn_subr/sqlite.c:812
 #, c-format
@@ -6109,7 +6091,7 @@ msgstr " (%a, %d. %b %Y)"
 #: ../libsvn_subr/token.c:66
 #, fuzzy, c-format
 msgid "Token '%s' is unrecognized"
-msgstr "»%s« hat einen nicht erkannten Knotentyp"
+msgstr "Marke »%s« hat einen nicht erkannten Knotentyp"
 
 #: ../libsvn_subr/utf.c:190
 msgid "Can't lock charset translation mutex"
@@ -6381,9 +6363,9 @@ msgid "Tree conflicts can only be resolv
 msgstr ""
 
 #: ../libsvn_wc/copy.c:78
-#, fuzzy, c-format
+#, c-format
 msgid "Source '%s' is unexpected kind"
-msgstr "Quelle »%s« ist kein Verzeichnis"
+msgstr "Quelle »%s« ist unbekannten Typs"
 
 #: ../libsvn_wc/copy.c:384
 #, fuzzy, c-format
@@ -6462,9 +6444,9 @@ msgid "Unexpectedly found '%s': path is 
 msgstr "Unerwartetes »%s« gefunden: Pfad wird als »fehlend« markiert"
 
 #: ../libsvn_wc/entries.c:1148
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a versioned working copy"
-msgstr "»%s« ist keine Arbeitskopie"
+msgstr "»%s« ist keine versionierte Arbeitskopie"
 
 #: ../libsvn_wc/entries.c:1394
 #, fuzzy, c-format
@@ -6867,9 +6849,9 @@ msgid "Invalid source URL prefix: '%s' (
 msgstr ""
 
 #: ../libsvn_wc/relocate.c:146 ../libsvn_wc/relocate.c:151
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid destination URL: '%s'"
-msgstr "Ungültige URL »%s«"
+msgstr "Ungültige Ziel-URL: »%s«"
 
 #: ../libsvn_wc/tree_conflicts.c:130
 msgid "Unknown enumeration value in tree conflict description"
@@ -6976,9 +6958,9 @@ msgid "Unrecognized node kind: '%s'"
 msgstr "Unbekannter Knotentyp: »%s«"
 
 #: ../libsvn_wc/update_editor.c:5582
-#, fuzzy, c-format
+#, c-format
 msgid "Node '%s' exists."
-msgstr "Datei »%s« existiert bereits"
+msgstr "Knoten »%s« existiert bereits"
 
 #: ../libsvn_wc/update_editor.c:5637
 #, c-format
@@ -7030,9 +7012,9 @@ msgid "No REPOSITORY table entry for id 
 msgstr "Kein REPOSITORY-Tabelleneintrag für ID »%ld«"
 
 #: ../libsvn_wc/wc_db.c:1456 ../libsvn_wc/wc_db.c:1502
-#, fuzzy, c-format
+#, c-format
 msgid "The node '%s' is not in a workingcopy."
-msgstr "Pfad »%s« ist nicht in der Arbeitskopie enthalten"
+msgstr "Der Knoten »%s« ist nicht in einer Arbeitskopie."
 
 #: ../libsvn_wc/wc_db.c:2019 ../libsvn_wc/wc_db.c:5288
 #, c-format
@@ -7100,24 +7082,24 @@ msgid "The properties of '%s' are in an 
 msgstr ""
 
 #: ../libsvn_wc/wc_db.c:7643
-#, fuzzy, c-format
+#, c-format
 msgid "Repository '%s' not found in the database"
-msgstr "Pfad »%s« wurde in der HEAD-Revision nicht gefunden"
+msgstr "Projektverzeichnis »%s« nicht in der Datenbank gefunden"
 
 #: ../libsvn_wc/wc_db.c:8505 ../libsvn_wc/wc_db.c:8552
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is already locked."
-msgstr "Pfad ist bereits gesperrt"
+msgstr "»%s« ist bereits gesperrt"
 
 #: ../libsvn_wc/wc_db.c:8509 ../libsvn_wc/wc_db.c:8560
-#, fuzzy, c-format
+#, c-format
 msgid "Working copy '%s' locked."
-msgstr "Arbeitskopie »%s« gesperrt"
+msgstr "Arbeitskopie »%s« gesperrt."
 
 #: ../libsvn_wc/wc_db.c:8639
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is already locked via '%s'."
-msgstr "Pfad ist bereits gesperrt"
+msgstr "»%s« ist bereits durch »%s« gesperrt"
 
 #: ../libsvn_wc/wc_db.c:8753
 #, fuzzy, c-format
@@ -7161,9 +7143,9 @@ msgid "Missing a row in WCROOT for '%s'.
 msgstr "Fehlende Zeile in WCROOT für »%s«."
 
 #: ../libsvn_wc/wc_db_pdh.c:668
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is not a working copy root"
-msgstr "»%s« ist keine Arbeitskopie"
+msgstr "»%s« ist keine Basis einer Arbeitskopie"
 
 # CHECKME: What's WCROOT? A variable or short for "working copy root"?
 #: ../libsvn_wc/wc_db_util.c:68
@@ -7490,9 +7472,9 @@ msgid "'--new' option only valid with '-
 msgstr "Option »--new« ist nur in Verbindung mit der Option »--old« zulässig"
 
 #: ../svn/diff-cmd.c:322
-#, fuzzy, c-format
+#, c-format
 msgid "Path '%s' not relative to base URLs"
-msgstr "Pfad »%s« ist keine URL"
+msgstr "Pfad »%s« ist nicht relativ zur Basis-URL"
 
 #: ../svn/export-cmd.c:113
 msgid "Destination directory exists; please remove the directory or use --force to overwrite"
@@ -7532,13 +7514,12 @@ msgstr ""
 "Verfügbare Unterbefehle:\n"
 
 #: ../svn/help-cmd.c:63
-#, fuzzy
 msgid ""
 "Subversion is a tool for version control.\n"
 "For additional information, see http://subversion.apache.org/\n"
 msgstr ""
 "Subversion ist ein Programm zur Versionskontrolle.\n"
-"Für weitere Informationen, siehe: http://subversion.tigris.org/\n"
+"Für weitere Informationen, siehe: http://subversion.apache.org/\n"
 
 #: ../svn/help-cmd.c:70 ../svnrdump/svnrdump.c:349 ../svnsync/main.c:1762
 msgid ""
@@ -7847,14 +7828,12 @@ msgid "'with-revprop' option only valid 
 msgstr "Option »with-revprop« ist nur im XML-Modus gültig"
 
 #: ../svn/log-cmd.c:588
-#, fuzzy
 msgid "'diff' option is not supported in XML mode"
-msgstr "Die angegebene Vergleichsoption wird nicht unterstützt"
+msgstr "Option »diff« wird im XML-Modus nicht unterstützt"
 
 #: ../svn/log-cmd.c:594
-#, fuzzy
 msgid "'quiet' and 'diff' options are mutually exclusive"
-msgstr "--relocate und --depth schließen sich gegenseitig aus"
+msgstr "»quiet« und »diff« schließen sich gegenseitig aus"
 
 #: ../svn/log-cmd.c:598
 msgid "'diff-cmd' option requires 'diff' option"
@@ -8176,9 +8155,8 @@ msgid "don't diff copied or moved files 
 msgstr ""
 
 #: ../svn/main.c:326
-#, fuzzy
 msgid "don't expand keywords"
-msgstr "Kann Zeitangabe nicht expandieren"
+msgstr "Schlüsselwörter nicht expandieren"
 
 #: ../svn/main.c:328
 msgid "apply the unidiff in reverse"
@@ -9678,14 +9656,13 @@ msgid "'%s' is not a valid --show-revs v
 msgstr "»%s« ist kein gültiger Wert für --show-revs"
 
 #: ../svn/main.c:1764
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid strip count '%s'"
-msgstr "Ungültiger Quellpfad einer Kopie: »%s«"
+msgstr "Ungültige Anzahl der zu entfernenden Komponenten »%s«"
 
 #: ../svn/main.c:1770
-#, fuzzy
 msgid "Argument to --strip must be positive"
-msgstr "Parameter für --limit muss positiv sein"
+msgstr "Parameter für --strip muss positiv sein"
 
 #: ../svn/main.c:1851 ../svndumpfilter/main.c:1395 ../svnlook/main.c:2399
 #: ../svnrdump/svnrdump.c:522
@@ -9730,9 +9707,8 @@ msgstr "--trust-server-cert erfordert --
 
 # TODO: Duplicated message!!!!
 #: ../svn/main.c:1970
-#, fuzzy
 msgid "--diff-cmd and --internal-diff are mutually exclusive"
-msgstr "-c und -r schließen sich gegenseitig aus"
+msgstr "--diff-cmd und --internal-diff schließen sich gegenseitig aus"
 
 #: ../svn/main.c:2030
 msgid "Log message file is a versioned file; use '--force-log' to override"
@@ -9755,9 +9731,8 @@ msgid "--relocate and --depth are mutual
 msgstr "--relocate und --depth schließen sich gegenseitig aus"
 
 #: ../svn/main.c:2087
-#, fuzzy
 msgid "--relocate and --non-recursive (-N) are mutually exclusive"
-msgstr "--relocate und --depth schließen sich gegenseitig aus"
+msgstr "--relocate und --non-recursive (-N) schließen sich gegenseitig aus"
 
 #: ../svn/main.c:2171
 msgid "--auto-props and --no-auto-props are mutually exclusive"
@@ -9822,15 +9797,13 @@ msgid "--force cannot be used with --rei
 msgstr "--force kann nicht mit --reintegrate verwendet werden"
 
 #: ../svn/merge-cmd.c:294
-#, fuzzy
 msgid "--reintegrate can only be used with a single merge source"
-msgstr "--reintegrate kann nicht mit --ignore-ancestry verwendet werden"
+msgstr "--reintegrate kann nur mit einer einzelnen Zusammenführungsquelle verwendet werden"
 
 # TODO: merge messages!!!
 #: ../svn/merge-cmd.c:298
-#, fuzzy
 msgid "--allow-mixed-revisions cannot be used with --reintegrate"
-msgstr "--force kann nicht mit --reintegrate verwendet werden"
+msgstr "--allow-mixed-revisions kann nicht mit --reintegrate verwendet werden"
 
 #: ../svn/mergeinfo-cmd.c:81
 msgid "Not enough arguments given"
@@ -10200,9 +10173,8 @@ msgid "Obliterate %8ld %s\n"
 msgstr ""
 
 #: ../svn/obliterate-cmd.c:111
-#, fuzzy
 msgid "Wrong number of arguments"
-msgstr "Falsche Anzahl Ziele angegeben"
+msgstr "Falsche Anzahl von Argumenten"
 
 #: ../svn/obliterate-cmd.c:116
 #, fuzzy
@@ -10378,17 +10350,17 @@ msgid "local %s, incoming %s upon %s"
 msgstr "lokal %s, eingehend %s bei %s"
 
 #: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "\n"
 "Committed revision %ld%s.\n"
 msgstr ""
 "\n"
-"Revision %ld übertragen.\n"
+"Revision %ld%s übertragen.\n"
 
 #: ../svn/util.c:78
 msgid " (the answer to life, the universe, and everything)"
-msgstr ""
+msgstr " (die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest)"
 
 #: ../svn/util.c:87
 #, c-format
@@ -10630,11 +10602,10 @@ msgid ""
 msgstr "Ein mit Subversion-Versionen vor 1.6 kompatibles Format verwenden"
 
 #: ../svnadmin/main.c:321
-#, fuzzy
 msgid ""
 "use format compatible with Subversion versions\n"
 "                             earlier than 1.7"
-msgstr "Ein mit Subversion-Versionen vor 1.4 kompatibles Format verwenden"
+msgstr "Ein mit Subversion-Versionen vor 1.7 kompatibles Format verwenden"
 
 #: ../svnadmin/main.c:334
 msgid ""
@@ -11897,9 +11868,9 @@ msgstr ""
 "Verfügbare Unterbefehle:\n"
 
 #: ../svnrdump/svnrdump.c:585
-#, fuzzy, c-format
+#, c-format
 msgid "Revision %ld does not exist.\n"
-msgstr "URL »%s« existiert nicht in Revision %ld"
+msgstr "Revision %ld existiert nicht.\n"
 
 #: ../svnrdump/svnrdump.c:592
 #, c-format
@@ -12070,9 +12041,9 @@ msgstr ""
 "Cyrus-SASL-Authentifizierung ist verfügbar.\n"
 
 #: ../svnserve/main.c:487
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid port '%s'"
-msgstr "Ungültige URL »%s«"
+msgstr "Ungültiger Port »%s«"
 
 #: ../svnserve/main.c:528
 #, c-format
@@ -12370,9 +12341,8 @@ msgid "Destination repository is already
 msgstr "Das Zielprojektarchiv synchronisiert bereits von »%s«"
 
 #: ../svnsync/main.c:854
-#, fuzzy
 msgid "Destination repository has more revisions than source repository"
-msgstr "Zielprojektarchiv wurde noch nicht initialisiert"
+msgstr "Zielprojektarchiv hat mehr Revisionen als Quellprojektarchiv"
 
 #: ../svnsync/main.c:918 ../svnsync/main.c:921 ../svnsync/main.c:1425
 #: ../svnsync/main.c:1432 ../svnsync/main.c:1667 ../svnsync/main.c:1670
@@ -12420,9 +12390,9 @@ msgid "Cannot specify revisions via both
 msgstr ""
 
 #: ../svnsync/main.c:1628 ../svnsync/main.c:1961
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid revision range '%s' provided"
-msgstr "Ungültige Revisionsnummer angegeben"
+msgstr "Ungültiger Revisionsbereich »%s« angegeben"
 
 #: ../svnsync/main.c:1724
 #, c-format
@@ -12555,24 +12525,24 @@ msgid "last changed rather than current 
 msgstr "gibt letzte geänderte statt aktueller Revisionen aus"
 
 #: ../svnversion/main.c:232
-#, fuzzy, c-format
+#, c-format
 msgid "Unversioned directory%s"
-msgstr "Keine versionierten Elternverzeichnisse"
+msgstr "Nicht versioniertes Verzeichnis%s"
 
 #: ../svnversion/main.c:250 ../svnversion/main.c:266
-#, fuzzy, c-format
+#, c-format
 msgid "Unversioned file%s"
-msgstr "nicht versioniert"
+msgstr "Nicht versionierte Datei%s"
 
 #: ../svnversion/main.c:279
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' doesn't exist\n"
-msgstr "»%s« ist nicht vorhanden"
+msgstr "»%s« existiert nicht\n"
 
 #: ../svnversion/main.c:287
-#, fuzzy, c-format
+#, c-format
 msgid "'%s' is of unknown type\n"
-msgstr "»%s« ist veraltet"
+msgstr "»%s« ist unbekannten Typs\n"
 
 #. Local uncommitted modifications, no revision info was found.
 #: ../svnversion/main.c:296

Modified: subversion/branches/file-handle-cache/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/svn/cl.h?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/svn/cl.h (original)
+++ subversion/branches/file-handle-cache/subversion/svn/cl.h Sun Dec 18 17:36:24 2011
@@ -230,6 +230,7 @@ typedef struct svn_cl__opt_state_t
   svn_boolean_t internal_diff;    /* override diff_cmd in config file */
   svn_boolean_t use_git_diff_format; /* Use git's extended diff format */
   svn_boolean_t allow_mixed_rev; /* Allow operation on mixed-revision WC */
+  svn_boolean_t include_externals; /* Recurses (in)to file & dir externals */
 } svn_cl__opt_state_t;
 
 
@@ -381,6 +382,9 @@ svn_cl__time_cstring_to_human_cstring(co
 /* Print STATUS for PATH to stdout for human consumption.  Prints in
    abbreviated format by default, or DETAILED format if flag is set.
 
+   When SUPPRESS_EXTERNALS_PLACEHOLDERS is set, avoid printing
+   externals placeholder lines ("X lines").
+
    When DETAILED is set, use SHOW_LAST_COMMITTED to toggle display of
    the last-committed-revision and last-committed-author.
 
@@ -392,10 +396,16 @@ svn_cl__time_cstring_to_human_cstring(co
 
    Increment *TEXT_CONFLICTS, *PROP_CONFLICTS, or *TREE_CONFLICTS if
    a conflict was encountered.
-   */
+
+   Use CWD_ABSPATH -- the absolute path of the current working
+   directory -- to shorten PATH into something relative to that
+   directory as necessary.
+*/
 svn_error_t *
-svn_cl__print_status(const char *path,
+svn_cl__print_status(const char *cwd_abspath,
+                     const char *path,
                      const svn_client_status_t *status,
+                     svn_boolean_t suppress_externals_placeholders,
                      svn_boolean_t detailed,
                      svn_boolean_t show_last_committed,
                      svn_boolean_t skip_unrecognized,
@@ -408,9 +418,15 @@ svn_cl__print_status(const char *path,
 
 
 /* Print STATUS for PATH in XML to stdout.  Use POOL for temporary
-   allocations. */
+   allocations.
+
+   Use CWD_ABSPATH -- the absolute path of the current working
+   directory -- to shorten PATH into something relative to that
+   directory as necessary.
+ */
 svn_error_t *
-svn_cl__print_status_xml(const char *path,
+svn_cl__print_status_xml(const char *cwd_abspath,
+                         const char *path,
                          const svn_client_status_t *status,
                          svn_client_ctx_t *ctx,
                          apr_pool_t *pool);
@@ -552,14 +568,10 @@ svn_cl__merge_file_externally(const char
 
 /* Set *NOTIFY_FUNC_P and *NOTIFY_BATON_P to a notifier/baton for all
  * operations, allocated in POOL.
- *
- * If don't want a summary line at the end of notifications, set
- * SUPPRESS_FINAL_LINE.
  */
 svn_error_t *
 svn_cl__get_notifier(svn_wc_notify_func2_t *notify_func_p,
                      void **notify_baton_p,
-                     svn_boolean_t suppress_final_line,
                      apr_pool_t *pool);
 
 /* Make the notifier for use with BATON print the appropriate summary
@@ -766,42 +778,19 @@ svn_cl__node_description(const svn_wc_co
                          const char *wc_repos_root_URL,
                          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.
- *
- * ### JAF TODO: This function is not good because it does not allow the
- * ### caller to detect if an invalid peg revision was specified.
- * ###
- * ### Callers should never have a need to silently *discard* all peg
- * ### revisions, even if they are doing this *after* saving any peg
- * ### revisions that might be of interest on certain arguments: I don't
- * ### think it can ever be correct to silently ignore a peg revision that
- * ### is specified, whether it makes semantic sense or not.
- * ###
- * ### Instead, callers should parse all the arguments and silently
- * ### ignore an *empty* peg revision part (just an "@", which can be
- * ### used to escape an earlier "@" in the argument) on any argument,
- * ### even an argument on which a peg revision does not make sense,
- * ### but should not silently ignore a non-empty peg when it does not
- * ### make sense.
- * ###
- * ### Something like:
- * ###   For each (URL-like?) argument that doesn't accept a peg rev:
- * ###     Parse into peg-rev and true-path parts;
- * ###     If (peg rev != unspecified)
- * ###       Error("This arg doesn't accept a peg rev.").
- * ###     Use the true-path part.
+/* Return, in @a *true_targets_p, a shallow copy of @a targets with any
+ * empty peg revision specifier snipped off the end of each element.  If any
+ * target has a non-empty peg revision specifier, throw an error.  The user
+ * may have specified a peg revision where it doesn't make sense to do so,
+ * or may have forgotten to escape an '@' character in a filename.
  *
  * 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
+ * do not make any sense. Such subcommands still need to allow an empty
+ * peg revision 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. */
@@ -833,6 +822,23 @@ svn_cl__local_style_skip_ancestor(const 
                                   const char *path,
                                   apr_pool_t *pool);
 
+/* Check that PATH_OR_URL1@REVISION1 is related to PATH_OR_URL2@REVISION2.
+ * Raise an error if not.
+ *
+ * ### Ideally we would also check that they are on different lines of
+ * history.  That is easy in common cases, but to give a correct answer in
+ * general we need to know the operative revision(s) as well.  For example,
+ * when one location is the branch point from which the other branch was
+ * copied.
+ */
+svn_error_t *
+svn_cl__check_related_source_and_target(const char *path_or_url1,
+                                        const svn_opt_revision_t *revision1,
+                                        const char *path_or_url2,
+                                        const svn_opt_revision_t *revision2,
+                                        svn_client_ctx_t *ctx,
+                                        apr_pool_t *pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/file-handle-cache/subversion/svn/commit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/svn/commit-cmd.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/svn/commit-cmd.c (original)
+++ subversion/branches/file-handle-cache/subversion/svn/commit-cmd.c Sun Dec 18 17:36:24 2011
@@ -166,15 +166,17 @@ svn_cl__commit(apr_getopt_t *os,
     }
 
   /* Commit. */
-  err = svn_client_commit5(targets,
+  err = svn_client_commit6(targets,
                            opt_state->depth,
                            no_unlock,
                            opt_state->keep_changelists,
                            TRUE /* commit_as_operations */,
+                           opt_state->include_externals, /* file externals */
+                           opt_state->include_externals, /* dir externals */
                            opt_state->changelists,
                            opt_state->revprop_table,
-                           ! opt_state->quiet
-                                ? svn_cl__print_commit_info : NULL,
+                           (opt_state->quiet
+                            ? NULL : svn_cl__print_commit_info),
                            NULL,
                            ctx,
                            pool);

Modified: subversion/branches/file-handle-cache/subversion/svn/copy-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/svn/copy-cmd.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/svn/copy-cmd.c (original)
+++ subversion/branches/file-handle-cache/subversion/svn/copy-cmd.c Sun Dec 18 17:36:24 2011
@@ -76,7 +76,18 @@ svn_cl__copy(apr_getopt_t *os,
       APR_ARRAY_PUSH(sources, svn_client_copy_source_t *) = source;
     }
 
-  SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
+  /* Get DST_PATH (the target path or URL) and check that no peg revision is
+   * specified for it. */
+  {
+    const char *tgt = APR_ARRAY_IDX(targets, targets->nelts - 1, const char *);
+    svn_opt_revision_t peg;
+
+    SVN_ERR(svn_opt_parse_path(&peg, &dst_path, tgt, pool));
+    if (peg.kind != svn_opt_revision_unspecified)
+      return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+                               _("'%s': a peg revision is not allowed here"),
+                               tgt);
+  }
 
   /* Figure out which type of notification to use.
      (There is no need to check that the src paths are homogeneous;
@@ -84,8 +95,6 @@ svn_cl__copy(apr_getopt_t *os,
      error if they are not.) */
   src_path = APR_ARRAY_IDX(targets, 0, const char *);
   srcs_are_urls = svn_path_is_url(src_path);
-  dst_path = APR_ARRAY_IDX(targets, targets->nelts - 1, const char *);
-  apr_array_pop(targets);
   dst_is_url = svn_path_is_url(dst_path);
 
   if ((! srcs_are_urls) && (! dst_is_url))
@@ -127,7 +136,8 @@ svn_cl__copy(apr_getopt_t *os,
   err = svn_client_copy6(sources, dst_path, TRUE,
                          opt_state->parents, opt_state->ignore_externals,
                          opt_state->revprop_table,
-                         svn_cl__print_commit_info, NULL,
+                         (opt_state->quiet ? NULL : svn_cl__print_commit_info),
+                         NULL,
                          ctx, pool);
 
   if (ctx->log_msg_func3)

Modified: subversion/branches/file-handle-cache/subversion/svn/delete-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/svn/delete-cmd.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/svn/delete-cmd.c (original)
+++ subversion/branches/file-handle-cache/subversion/svn/delete-cmd.c Sun Dec 18 17:36:24 2011
@@ -79,7 +79,9 @@ svn_cl__delete(apr_getopt_t *os,
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
   err = svn_client_delete4(targets, opt_state->force, opt_state->keep_local,
-                           opt_state->revprop_table, svn_cl__print_commit_info,
+                           opt_state->revprop_table,
+                           (opt_state->quiet
+                            ? NULL : svn_cl__print_commit_info),
                            NULL, ctx, pool);
   if (err)
     err = svn_cl__may_need_force(err);

Modified: subversion/branches/file-handle-cache/subversion/svn/import-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/svn/import-cmd.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/svn/import-cmd.c (original)
+++ subversion/branches/file-handle-cache/subversion/svn/import-cmd.c Sun Dec 18 17:36:24 2011
@@ -120,7 +120,8 @@ svn_cl__import(apr_getopt_t *os,
                               opt_state->no_ignore,
                               opt_state->force,
                               opt_state->revprop_table,
-                              svn_cl__print_commit_info,
+                              (opt_state->quiet
+                               ? NULL : svn_cl__print_commit_info),
                               NULL,
                               ctx,
                               pool), pool));

Modified: subversion/branches/file-handle-cache/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/file-handle-cache/subversion/svn/log-cmd.c?rev=1220465&r1=1220464&r2=1220465&view=diff
==============================================================================
--- subversion/branches/file-handle-cache/subversion/svn/log-cmd.c (original)
+++ subversion/branches/file-handle-cache/subversion/svn/log-cmd.c Sun Dec 18 17:36:24 2011
@@ -51,8 +51,9 @@ struct log_receiver_baton
   /* Client context. */
   svn_client_ctx_t *ctx;
 
-  /* The URL target of the log operation. */
-  const char *target_url;
+  /* The target of the log operation. */
+  const char *target_path_or_url;
+  svn_opt_revision_t target_peg_revision;
 
   /* Don't print log message body nor its line count. */
   svn_boolean_t omit_log_message;
@@ -281,7 +282,6 @@ log_entry_receiver(void *baton,
       apr_array_header_t *diff_options;
       svn_opt_revision_t start_revision;
       svn_opt_revision_t end_revision;
-      svn_error_t *err;
 
       SVN_ERR(svn_stream_for_stdout(&outstream, pool));
       SVN_ERR(svn_stream_for_stderr(&errstream, pool));
@@ -299,82 +299,22 @@ log_entry_receiver(void *baton,
       end_revision.value.number = log_entry->revision;
 
       SVN_ERR(svn_cmdline_printf(pool, _("\n")));
-      err = svn_client_diff6(diff_options,
-                             lb->target_url,
-                             &start_revision,
-                             lb->target_url,
-                             &end_revision,
-                             NULL,
-                             lb->depth,
-                             FALSE, /* ignore ancestry */
-                             TRUE, /* no diff deleted */
-                             FALSE, /* show copies as adds */
-                             FALSE, /* ignore content type */
-                             FALSE, /* use git diff format */
-                             svn_cmdline_output_encoding(pool),
-                             outstream,
-                             errstream,
-                             NULL,
-                             lb->ctx, pool);
-      if (err)
-        {
-          /* We get a "path not found" error in case the revision created
-           * lb->target_url. Try to show a diff from the parent instead. */
-          if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
-            {
-              const char *parent;
-              apr_pool_t *iterpool;
-
-              svn_error_clear(err);
-
-              parent = svn_uri_dirname(lb->target_url, pool);
-              iterpool = svn_pool_create(pool);
-              while (strcmp(parent, lb->target_url) != 0)
-                {
-                  svn_pool_clear(iterpool);
-                  err = svn_client_diff6(diff_options,
-                                         parent,
-                                         &start_revision,
-                                         parent,
-                                         &end_revision,
-                                         NULL,
-                                         lb->depth,
-                                         FALSE, /* ignore ancestry */
-                                         TRUE, /* no diff deleted */
-                                         FALSE, /* show copies as adds */
-                                         FALSE, /* ignore content type */
-                                         FALSE, /* use git diff format */
-                                         svn_cmdline_output_encoding(iterpool),
-                                         outstream,
-                                         errstream,
-                                         NULL,
-                                         lb->ctx, iterpool);
-                  if (err == SVN_NO_ERROR)
-                    break;
-                  else
-                    {
-                      if (err->apr_err == SVN_ERR_FS_NOT_FOUND)
-                        {
-                          svn_error_clear(err);
-                          parent = svn_uri_dirname(parent, pool);
-                          continue;
-                        }
-                      if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL ||
-                          err->apr_err == SVN_ERR_AUTHZ_UNREADABLE ||
-                          err->apr_err == SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED)
-                        {
-                          svn_error_clear(err);
-                          break;
-                        }
-                      return svn_error_trace(err);
-                    }
-                }
-              svn_pool_destroy(iterpool);
-            }
-          else
-            return svn_error_trace(err);
-        }
-
+      SVN_ERR(svn_client_diff_peg6(diff_options,
+                                   lb->target_path_or_url,
+                                   &lb->target_peg_revision,
+                                   &start_revision, &end_revision,
+                                   NULL,
+                                   lb->depth,
+                                   FALSE, /* ignore ancestry */
+                                   TRUE, /* no diff deleted */
+                                   FALSE, /* show copies as adds */
+                                   FALSE, /* ignore content type */
+                                   FALSE, /* use git diff format */
+                                   svn_cmdline_output_encoding(pool),
+                                   outstream,
+                                   errstream,
+                                   NULL,
+                                   lb->ctx, pool));
       SVN_ERR(svn_cmdline_printf(pool, _("\n")));
     }
 
@@ -567,8 +507,6 @@ svn_cl__log(apr_getopt_t *os,
   struct log_receiver_baton lb;
   const char *target;
   int i;
-  svn_opt_revision_t peg_revision;
-  const char *true_path;
   apr_array_header_t *revprops;
 
   if (!opt_state->xml)
@@ -622,8 +560,6 @@ svn_cl__log(apr_getopt_t *os,
   /* Add "." if user passed 0 arguments */
   svn_opt_push_implicit_dot_target(targets, pool);
 
-  target = APR_ARRAY_IDX(targets, 0, const char *);
-
   /* Determine if they really want a two-revision range. */
   if (opt_state->used_change_arg)
     {
@@ -645,9 +581,15 @@ svn_cl__log(apr_getopt_t *os,
         }
     }
 
-  /* Strip peg revision. */
-  SVN_ERR(svn_opt_parse_path(&peg_revision, &true_path, target, pool));
-  APR_ARRAY_IDX(targets, 0, const char *) = true_path;
+  /* Parse the first target into path-or-url and peg revision. */
+  target = APR_ARRAY_IDX(targets, 0, const char *);
+  SVN_ERR(svn_opt_parse_path(&lb.target_peg_revision, &lb.target_path_or_url,
+                             target, pool));
+  if (lb.target_peg_revision.kind == svn_opt_revision_unspecified)
+    lb.target_peg_revision.kind = (svn_path_is_url(target)
+                                     ? svn_opt_revision_head
+                                     : svn_opt_revision_working);
+  APR_ARRAY_IDX(targets, 0, const char *) = lb.target_path_or_url;
 
   if (svn_path_is_url(target))
     {
@@ -666,8 +608,6 @@ svn_cl__log(apr_getopt_t *os,
 
   lb.ctx = ctx;
   lb.omit_log_message = opt_state->quiet;
-  SVN_ERR(svn_client_url_from_path2(&lb.target_url, true_path, ctx,
-                                    pool, pool));
   lb.show_diff = opt_state->show_diff;
   lb.depth = opt_state->depth == svn_depth_unknown ? svn_depth_infinity
                                                    : opt_state->depth;
@@ -718,7 +658,7 @@ svn_cl__log(apr_getopt_t *os,
             APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
         }
       SVN_ERR(svn_client_log5(targets,
-                              &peg_revision,
+                              &lb.target_peg_revision,
                               opt_state->revision_ranges,
                               opt_state->limit,
                               opt_state->verbose,
@@ -741,7 +681,7 @@ svn_cl__log(apr_getopt_t *os,
       if (!opt_state->quiet)
         APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
       SVN_ERR(svn_client_log5(targets,
-                              &peg_revision,
+                              &lb.target_peg_revision,
                               opt_state->revision_ranges,
                               opt_state->limit,
                               opt_state->verbose,