On Wed, Oct 17, 2001 at 04:29:42PM -0500, Ben Collins-Sussman wrote:
> Mark Benedetto King <bking@answerfriend.com> writes:
> 
> > .svnignore functionality, mentioned in www/project_tasks.html
> > (which references issue #482) seems to have been implemented.
> > 
> > can this task be removed and the issue closed?
> 
> Actually, we need to move the .svnignore patterns into directory
> properties, and then remove the .svnignore files.
> 
I'm hoping you meant ".svn/dir-props".  That's where this patch
puts them.  
> Before this, someone needs to make a trivial change to the beginning
> of libsvn_wc/adm_crawler.c, so that it loads the patterns out of a
> property ("svn:ignore") instead of from a file.
Okay.  You were right, it was trivial.
This patch does not attempt to preserve any sort of backwards
compatibility; it does not look for .svnignore files.
I'm concerned about how well this will work on operating systems
that use '\r' as part of their line separator, but I have the
same concerns about the original code.
Index: ./subversion/libsvn_wc/wc.h
===================================================================
--- ./subversion/libsvn_wc/.svn/text-base/wc.h	Wed Oct 17 11:34:35 2001
+++ ./subversion/libsvn_wc/wc.h	Thu Oct 18 14:57:29 2001
@@ -53,9 +53,6 @@
 #define SVN_WC_TIMESTAMP_WC   "working"
 
 
-/* The name of the '.svnignore' file */
-#define SVN_WC_SVNIGNORE      ".svnignore"
-
 
 
 /*** Locking. ***/
Index: ./subversion/libsvn_wc/adm_crawler.c
===================================================================
--- ./subversion/libsvn_wc/.svn/text-base/adm_crawler.c	Wed Oct 17 11:34:39 2001
+++ ./subversion/libsvn_wc/adm_crawler.c	Thu Oct 18 15:01:44 2001
@@ -54,47 +54,36 @@
 
 }
 
-/* Helper routine: try to read the contents of DIRPATH/.svnignore.  If
-   no such file exists, then set *PATTERNS to NULL.  Otherwise, set
-   *PATTERNS to a list of patterns to match;  *PATTERNS will contain
-   an array of (const char *) objects. */
+/* Helper routine: read the newline separated records
+   in the dir-props hash-entry for "svn:ignore" into *PATTERNS
+   as (const char *) objects. */
 static svn_error_t *
-load_ignore_file (const char *dirpath,
+load_ignore_property (const char *dirpath,
                   apr_array_header_t *patterns,
                   apr_pool_t *pool)
 {
-  apr_file_t *fp;
-  apr_status_t status;
-  char buf[100];
-  apr_size_t sz = 100;
-
-  /* Try to load the .svnignore file. */
+  apr_hash_t *props = apr_hash_make (pool);
   svn_stringbuf_t *path = svn_stringbuf_create (dirpath, pool);
-  svn_path_add_component_nts (path, SVN_WC_SVNIGNORE, svn_path_local_style);
-  if (apr_file_open (&fp, path->data, APR_READ | APR_BUFFERED, 
-                     APR_OS_DEFAULT, pool))
-    {
-      return SVN_NO_ERROR;
-    }
+  svn_stringbuf_t *file = svn_wc__adm_path( path, 0, pool, SVN_WC__ADM_DIR_PROPS, NULL );
+  svn_stringbuf_t *list;
 
-  /* Now that it's open, read one line at a time into the array. */
-  while (1)
-    {
-      status = svn_io_read_length_line (fp, buf, &sz);
-      if (status == APR_EOF)
-        break;
-      else if (status)
-        return svn_error_createf(status, 0, NULL, pool,
-                                 "error reading %s", path->data);
-
-      (*((const char **) apr_array_push (patterns))) = 
-        apr_pstrndup (pool, buf, sz);
-
-      sz = 100;
-    }
+  SVN_ERR(svn_wc__load_prop_file (file, props, pool));
 
+  list = (svn_stringbuf_t *) apr_hash_get (props, "svn:ignore", APR_HASH_KEY_STRING);
+  if (list != NULL)
+    {
+      char *walk = list->data;
+      do {
+        char *p = strchr (walk, '\n');
+        const char **ent = apr_array_push (patterns);
+        if (p != NULL)
+          *p++ = 0;
+        *ent = apr_pstrdup(pool, walk);
+	walk = p;
+      } while( walk );
+   }    
   return SVN_NO_ERROR;
-}                  
+}
 
 
 
@@ -1508,9 +1497,9 @@
   SVN_ERR (svn_wc_entries_read (&entries, full_path, subpool));
   SVN_ERR (svn_io_get_dirents (&dirents, full_path, subpool));
 
-  /* Try to load any '.svnignore' file that may be present. */
+  /* Try to load any 'svn:ignore' property that may be present. */
   patterns = apr_array_make (pool, 1, sizeof(const char *));
-  SVN_ERR (load_ignore_file (full_path->data, patterns, subpool));
+  SVN_ERR (load_ignore_property (full_path->data, patterns, subpool));
   add_default_ignores (patterns);
 
   /* Phase 1:  Print out every unrecognized (unversioned) object. */
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Oct 21 14:36:45 2006