You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2014/02/28 12:01:08 UTC

svn commit: r1572916 - in /subversion/trunk/subversion: include/private/svn_magic.h include/svn_config.h libsvn_client/add.c libsvn_client/import.c libsvn_subr/config_file.c libsvn_subr/magic.c

Author: philip
Date: Fri Feb 28 11:01:08 2014
New Revision: 1572916

URL: http://svn.apache.org/r1572916
Log:
Provide config:miscellany:enable-magic-file to control the use of
libmagic.  There are environment variables that do this already but
they are not specific to Subversion and affect other applications.

* subversion/include/svn_config.h
  (SVN_CONFIG_OPTION_ENABLE_MAGIC_FILE): New.

* subversion/include/private/svn_magic.h
  (svn_magic__init): Add config parameter.

* subversion/libsvn_subr/config_file.c
  (svn_config_ensure): Document new setting.

* subversion/libsvn_subr/magic.c
  (svn_magic__init): Check for enable-magic-file=no.

* subversion/libsvn_client/add.c
  (add): Pass config to svn_magic__init.

* subversion/libsvn_client/import.c
  (import): Pass config to svn_magic__init.

Modified:
    subversion/trunk/subversion/include/private/svn_magic.h
    subversion/trunk/subversion/include/svn_config.h
    subversion/trunk/subversion/libsvn_client/add.c
    subversion/trunk/subversion/libsvn_client/import.c
    subversion/trunk/subversion/libsvn_subr/config_file.c
    subversion/trunk/subversion/libsvn_subr/magic.c

Modified: subversion/trunk/subversion/include/private/svn_magic.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_magic.h?rev=1572916&r1=1572915&r2=1572916&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_magic.h (original)
+++ subversion/trunk/subversion/include/private/svn_magic.h Fri Feb 28 11:01:08 2014
@@ -30,7 +30,8 @@
 /* An opaque struct that wraps a libmagic cookie. */
 typedef struct svn_magic__cookie_t svn_magic__cookie_t;
 
-/* This routine initialises libmagic.
+/* This routine initialises libmagic.  CONFIG is a config hash and
+ * may be NULL.
  * Upon success a new *MAGIC_COOKIE is allocated in RESULT_POOL.
  * On failure *MAGIC_COOKIE is set to NULL.
  * All resources used by libmagic are freed by a cleanup handler
@@ -38,6 +39,7 @@ typedef struct svn_magic__cookie_t svn_m
  * the pool is cleared! */
 void
 svn_magic__init(svn_magic__cookie_t **magic_cookie,
+                apr_hash_t *config,
                 apr_pool_t *result_pool);
 
 /* Detect the mime-type of the file at LOCAL_ABSPATH using MAGIC_COOKIE.

Modified: subversion/trunk/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_config.h?rev=1572916&r1=1572915&r2=1572916&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_config.h (original)
+++ subversion/trunk/subversion/include/svn_config.h Fri Feb 28 11:01:08 2014
@@ -131,6 +131,8 @@ typedef struct svn_config_t svn_config_t
 /** @deprecated Not used by Subversion since 2003/r847039 (well before 1.0) */
 #define SVN_CONFIG_OPTION_TEMPLATE_ROOT             "template-root"
 #define SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS         "enable-auto-props"
+/** @since New in 1.9. */
+#define SVN_CONFIG_OPTION_ENABLE_MAGIC_FILE         "enable-magic-file"
 #define SVN_CONFIG_OPTION_NO_UNLOCK                 "no-unlock"
 #define SVN_CONFIG_OPTION_MIMETYPES_FILE            "mime-types-file"
 #define SVN_CONFIG_OPTION_PRESERVED_CF_EXTS         "preserved-conflict-file-exts"

Modified: subversion/trunk/subversion/libsvn_client/add.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/add.c?rev=1572916&r1=1572915&r2=1572916&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/add.c (original)
+++ subversion/trunk/subversion/libsvn_client/add.c Fri Feb 28 11:01:08 2014
@@ -840,7 +840,7 @@ add(const char *local_abspath,
   svn_magic__cookie_t *magic_cookie;
   apr_array_header_t *ignores = NULL;
 
-  svn_magic__init(&magic_cookie, scratch_pool);
+  svn_magic__init(&magic_cookie, ctx->config, scratch_pool);
 
   if (existing_parent_abspath)
     {

Modified: subversion/trunk/subversion/libsvn_client/import.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/import.c?rev=1572916&r1=1572915&r2=1572916&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/import.c (original)
+++ subversion/trunk/subversion/libsvn_client/import.c Fri Feb 28 11:01:08 2014
@@ -664,7 +664,7 @@ import(const char *local_abspath,
   const svn_io_dirent2_t *dirent;
 
   import_ctx->autoprops = autoprops;
-  svn_magic__init(&import_ctx->magic_cookie, pool);
+  svn_magic__init(&import_ctx->magic_cookie, ctx->config, pool);
 
   /* Get a root dir baton.  We pass the revnum we used for testing our
      assumptions and obtaining inherited properties. */

Modified: subversion/trunk/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/config_file.c?rev=1572916&r1=1572915&r2=1572916&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/config_file.c (original)
+++ subversion/trunk/subversion/libsvn_subr/config_file.c Fri Feb 28 11:01:08 2014
@@ -1278,6 +1278,12 @@ svn_config_ensure(const char *config_dir
         "### for 'svn add' and 'svn import', it defaults to 'no'."           NL
         "### Automatic properties are defined in the section 'auto-props'."  NL
         "# enable-auto-props = yes"                                          NL
+#ifdef SVN_HAVE_LIBMAGIC
+        "### Set enable-magic-file to 'no' to disable magic file detection"  NL
+        "### of the file type when automatically setting svn:mime-type. It"  NL
+        "### defaults to 'yes' if magic file support is possible."           NL
+        "# enable-magic-file = yes"                                          NL
+#endif
         "### Set interactive-conflicts to 'no' to disable interactive"       NL
         "### conflict resolution prompting.  It defaults to 'yes'."          NL
         "# interactive-conflicts = no"                                       NL

Modified: subversion/trunk/subversion/libsvn_subr/magic.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/magic.c?rev=1572916&r1=1572915&r2=1572916&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/magic.c (original)
+++ subversion/trunk/subversion/libsvn_subr/magic.c Fri Feb 28 11:01:08 2014
@@ -33,6 +33,8 @@
 #include "svn_types.h"
 #include "svn_pools.h"
 #include "svn_error.h"
+#include "svn_config.h"
+#include "svn_hash.h"
 
 #include "svn_private_config.h"
 
@@ -63,12 +65,28 @@ close_magic_cookie(void *baton)
 
 void
 svn_magic__init(svn_magic__cookie_t **magic_cookie,
+                apr_hash_t *config,
                 apr_pool_t *result_pool)
 {
-
   svn_magic__cookie_t *mc = NULL;
 
 #ifdef SVN_HAVE_LIBMAGIC
+  if (config)
+    {
+      svn_boolean_t enable;
+      svn_config_t *cfg = svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG);
+
+      SVN_ERR(svn_config_get_bool(cfg, &enable,
+                                  SVN_CONFIG_SECTION_MISCELLANY,
+                                  SVN_CONFIG_OPTION_ENABLE_MAGIC_FILE,
+                                  TRUE));
+      if (!enable)
+        {
+          *magic_cookie = NULL;
+          return;
+        }
+    }
+
   mc = apr_palloc(result_pool, sizeof(*mc));
 
   /* Initialise libmagic. */