You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Blair Zajac <bl...@orcaware.com> on 2002/07/25 17:43:24 UTC

svn status ignore svn:ignore

It would be handy to have svn status have a command line option
to ignore the svn:ignore setting.

This way you could see what cruft is in your tree to test make
distclean or get everything out of the tree that doesn't belong
there.

The other reason I could see to have it is to see which svn:ignore
regex's you could remove if the tree has changed significantly.
For example, our doc's directory had svn:ignore set on it which
no longer needed it because all the *.texi's are now in
subdirectories with their own svn:ignore.

Best,
Blair

-- 
Blair Zajac <bl...@orcaware.com>
Web and OS performance plots - http://www.orcaware.com/orca/

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: svn status ignore svn:ignore [PATCH]

Posted by Karl Fogel <kf...@newton.ch.collab.net>.
Blair Zajac <bl...@orcaware.com> writes:
> Could somebody review this?  I'll submit it myself to raise my
> score in the Karl Fogel commit race!

Oh dear me!  We don't want a commit race here...

I don't have time to review this right now, but I also promise to
refrain from further commits today, to give Blair a chance :-).

-K

> Add --no-ignore command line option to svn status to disregard svn's
> default ignore list and any svn:ignore properties.
> 
> * subversion/include/svn_wc.h (svn_wc_statuses):
>   New argument svn_boolean_t no_ignore.
> 
> * subversion/include/svn_client.h (svn_client_status):
>   New argument svn_boolean_t no_ignore.
> 
> * subversion/libsvn_wc/status.c
>   (add_unversioned_items):
>     New argument svn_boolean_t no_ignore and test it whether to use
>       default ignore regular expressions and svn:ignore properties.
>   (svn_wc_statuses):
>     New argument svn_boolean_t no_ignore and pass it to itself on
>       recursion and to add_unversioned_items.
> 
> * subversion/libsvn_client/delete.c
>   (svn_client__can_delete):
>     Pass FALSE for svn_wc_statuses new no_ignore argument.
> 
> * subversion/libsvn_client/status.c
>   (svn_client_status):
>     New argument svn_boolean_t no_ignore and pass down to
>       svn_wc_statuses.
> 
> * subversion/clients/cmdline/cl.h:
>   Add svn_cl__no_ignore_opt to svn_cl__longopt_t.
> 
> * subversion/clients/cmdline/status-cmd.c (svn_cl__status):
>   Pass no_ignore command line option setting down to
>     svn_client_status.
> 
> * subversion/clients/cmdline/main.c:
>   Add "no-ignore" to svn_cl__options and to valid 'status' command
>     line options.
>   (main): Set opt_state.no_ignore appropriately.
> 
> * subversion/clients/cmdline/status-cmd.c
>   (svn_cl__status):
>     Take command line option no_ignore flag and pass down to
>       svn_client_status.
> 
> * subversion/libsvn_client/status.c
>   (svn_client_status):
>     Take no_ignore flag and pass it down to svn_wc_statuses.
> 
> * doc/handbook/client.texi (Examine your changes):
>   List svn's default list of ignore regular expressions.
>   Document svn status' --no-ignore command line option.Index: ./subversion/include/svn_wc.h
> ===================================================================
> --- ./subversion/include/svn_wc.h
> +++ ./subversion/include/svn_wc.h	Fri Jul 26 15:31:23 2002
> @@ -505,17 +505,18 @@
>  /* Fill *STATUS for PATH, allocating in POOL, with the exception of
>     the repos_rev field, which is normally filled in by the caller. 
>  
>     Here are some things to note about the returned structure.  A quick
>     examination of the STATUS->text_status after a successful return of
>     this function can reveal the following things:
>  
>        svn_wc_status_none : PATH is not versioned, and is either not
> -                           present on disk, or is ignored by the
> +                           present on disk, or is ignored by svn's
> +                           default ignore regular expressions or the
>                             svn:ignore property setting for PATH's
>                             parent directory.
>  
>        svn_wc_status_absent : PATH is versioned, but is missing from
>                               the working copy.
>  
>        svn_wc_status_unversioned : PATH is not versioned, but is
>                                    present on disk and not being
> @@ -556,16 +557,17 @@
>   * If DESCEND is non-zero, statushash will contain statuses for PATH
>   * and everything below it, including subdirectories.  In other
>   * words, a full recursion.  */
>  svn_error_t *svn_wc_statuses (apr_hash_t *statushash,
>                                const char *path,
>                                svn_boolean_t descend,
>                                svn_boolean_t get_all,
>                                svn_boolean_t strict,
> +                              svn_boolean_t no_ignore,
>                                apr_pool_t *pool);
>  
>  
>  /* Set  *EDITOR and *EDIT_BATON to an editor that tweaks or adds
>     svn_wc_status_t structures to STATUSHASH to reflect repository
>     modifications that would be received on update, and that sets
>     *YOUNGEST to the youngest revision in the repository (the editor
>     also sets the repos_rev field in each svn_wc_status_t structure
> Index: ./subversion/include/svn_client.h
> ===================================================================
> --- ./subversion/include/svn_client.h
> +++ ./subversion/include/svn_client.h	Fri Jul 26 15:10:38 2002
> @@ -527,16 +527,17 @@
>  svn_error_t *
>  svn_client_status (apr_hash_t **statushash,
>                     svn_revnum_t *youngest,  /* only touched if `update' set */
>                     const char *path,
>                     svn_client_auth_baton_t *auth_baton,
>                     svn_boolean_t descend,
>                     svn_boolean_t get_all,
>                     svn_boolean_t update,
> +                   svn_boolean_t no_ignore,
>                     apr_pool_t *pool);
>  
>  
>  /* Invoke RECEIVER with RECEIVER_BATON on each log message from START
>     to END in turn, inclusive (but never invoke RECEIVER on a given log
>     message more than once).
>    
>     TARGETS contains all the working copy paths (as const char *'s)
> Index: ./subversion/libsvn_wc/status.c
> ===================================================================
> --- ./subversion/libsvn_wc/status.c
> +++ ./subversion/libsvn_wc/status.c	Fri Jul 26 15:51:59 2002
> @@ -284,30 +284,34 @@
>  
>  /* Add all items that are NOT in ENTRIES (which is a list of PATH's
>     versioned things) to the STATUSHASH as unversioned items,
>     allocating everything in POOL. */
>  static svn_error_t *
>  add_unversioned_items (const char *path, 
>                         apr_hash_t *entries,
>                         apr_hash_t *statushash,
> +                       svn_boolean_t no_ignore,
>                         apr_pool_t *pool)
>  {
>    apr_pool_t *subpool = svn_pool_create (pool);
>    apr_hash_t *dirents;
>    apr_hash_index_t *hi;
>    apr_array_header_t *patterns;
>  
>    /* Read PATH's dirents. */
>    SVN_ERR (svn_io_get_dirents (&dirents, path, subpool));
>  
> -  /* Try to load any '.svnignore' file that may be present. */
> +  /* Try to add any svn:ignore properties on the parent directory. */
>    patterns = apr_array_make (subpool, 1, sizeof(const char *));
> -  add_default_ignores (patterns);
> -  SVN_ERR (add_ignore_patterns (path, patterns, subpool));
> +  if (! no_ignore)
> +    {
> +      add_default_ignores (patterns);
> +      SVN_ERR (add_ignore_patterns (path, patterns, subpool));
> +    }
>  
>    /* Add empty status structures for each of the unversioned things. */
>    for (hi = apr_hash_first (subpool, dirents); hi; hi = apr_hash_next (hi))
>      {
>        const void *key;
>        apr_ssize_t klen;
>        void *val;
>        const char *keystring;
> @@ -389,16 +393,17 @@
>  
>  
>  svn_error_t *
>  svn_wc_statuses (apr_hash_t *statushash,
>                   const char *path,
>                   svn_boolean_t descend,
>                   svn_boolean_t get_all,
>                   svn_boolean_t strict,
> +                 svn_boolean_t no_ignore,
>                   apr_pool_t *pool)
>  {
>    enum svn_node_kind kind;
>    svn_wc_entry_t *entry;
>  
>    /* Is PATH a directory or file? */
>    SVN_ERR (svn_io_check_path (path, &kind, pool));
>    
> @@ -445,17 +450,18 @@
>          return svn_error_createf
>            (SVN_ERR_WC_NOT_DIRECTORY, 0, NULL, pool,
>             "svn_wc_statuses: %s is not a working copy directory", path);
>  
>        /* Load entries file for the directory into the requested pool. */
>        SVN_ERR (svn_wc_entries_read (&entries, path, FALSE, pool));
>  
>        /* Add the unversioned items to the status output. */
> -      SVN_ERR (add_unversioned_items (path, entries, statushash, pool));
> +      SVN_ERR (add_unversioned_items (path, entries, statushash,
> +                                      no_ignore, pool));
>  
>        /* Loop over entries hash */
>        for (hi = apr_hash_first (pool, entries); hi; hi = apr_hash_next (hi))
>          {
>            const void *key;
>            void *val;
>            const char *base_name;
>  
> @@ -503,18 +509,19 @@
>                       their full entry from their own THIS_DIR entry.
>                       svn_wc_entry does this for us if it can.  */
>                    svn_wc_entry_t *subdir;
>  
>                    SVN_ERR (svn_wc_entry (&subdir, fullpath, FALSE, pool));
>                    SVN_ERR (add_status_structure (statushash, fullpath,
>                                                   subdir, get_all, 
>                                                   strict, pool));
> -                  SVN_ERR (svn_wc_statuses (statushash, fullpath,
> -                                            descend, get_all, strict, pool)); 
> +                  SVN_ERR (svn_wc_statuses (statushash, fullpath, descend,
> +                                            get_all, strict, no_ignore,
> +                                            pool)); 
>                  }
>                else if ((kind == svn_node_file) || (kind == svn_node_none))
>                  {
>                    /* File entries are ... just fine! */
>                    SVN_ERR (add_status_structure (statushash, fullpath,
>                                                   entry, get_all, 
>                                                   strict, pool));
>                  }
> Index: ./subversion/libsvn_client/delete.c
> ===================================================================
> --- ./subversion/libsvn_client/delete.c
> +++ ./subversion/libsvn_client/delete.c	Fri Jul 26 14:57:23 2002
> @@ -37,17 +37,17 @@
>  
>  svn_error_t *
>  svn_client__can_delete (const char *path,
>                          apr_pool_t *pool)
>  {
>    apr_hash_t *hash = apr_hash_make (pool);
>    apr_hash_index_t *hi;
>  
> -  SVN_ERR (svn_wc_statuses (hash, path, TRUE, FALSE, TRUE, pool));
> +  SVN_ERR (svn_wc_statuses (hash, path, TRUE, FALSE, TRUE, FALSE, pool));
>    for (hi = apr_hash_first (pool, hash); hi; hi = apr_hash_next (hi))
>      {
>        const void *key;
>        void *val;
>        const char *name;
>        const svn_wc_status_t *statstruct;
>  
>        apr_hash_this (hi, &key, NULL, &val);
> Index: ./subversion/libsvn_client/status.c
> ===================================================================
> --- ./subversion/libsvn_client/status.c
> +++ ./subversion/libsvn_client/status.c	Fri Jul 26 15:59:43 2002
> @@ -141,16 +141,17 @@
>  svn_error_t *
>  svn_client_status (apr_hash_t **statushash,
>                     svn_revnum_t *youngest,
>                     const char *path,
>                     svn_client_auth_baton_t *auth_baton,
>                     svn_boolean_t descend,
>                     svn_boolean_t get_all,
>                     svn_boolean_t update,
> +                   svn_boolean_t no_ignore,
>                     apr_pool_t *pool)
>  {
>    apr_hash_t *hash = apr_hash_make (pool);
>    svn_boolean_t strict;
>  
>    /* If we're not updating, we might be getting new paths from the
>       repository, and we don't want svn_wc_statuses to error on these
>       paths. However, if we're not updating and we see a path that
> @@ -159,20 +160,21 @@
>      strict = FALSE;
>    else
>      strict = TRUE;
>  
>    /* Ask the wc to give us a list of svn_wc_status_t structures.
>       These structures contain nothing but information found in the
>       working copy.
>  
> -     Pass the GET_ALL and DESCEND flags;  this working copy function
> -     understands these flags too, and will return the correct set of
> -     structures.  */
> -  SVN_ERR (svn_wc_statuses (hash, path, descend, get_all, strict, pool));
> +     Pass the GET_ALL, DESCEND and NO_IGNORE flags;  this working copy
> +     function understands these flags too, and will return the correct
> +     set of structures.  */
> +  SVN_ERR (svn_wc_statuses (hash, path, descend, get_all,
> +                            strict, no_ignore, pool));
>  
>  
>    /* If the caller wants us to contact the repository also... */
>    if (update)    
>      /* Add "dry-run" update information to our existing structures.
>         (Pass the DESCEND flag here, since we may want to ignore update
>         info that is below PATH.)  */
>      SVN_ERR (add_update_info_to_status_hash (hash, youngest, path,
> Index: ./subversion/clients/cmdline/cl.h
> ===================================================================
> --- ./subversion/clients/cmdline/cl.h
> +++ ./subversion/clients/cmdline/cl.h	Fri Jul 26 15:36:46 2002
> @@ -46,17 +46,18 @@
>    svn_cl__ancestor_path_opt,
>    svn_cl__force_opt,
>    svn_cl__msg_encoding_opt,
>    svn_cl__version_opt,
>    svn_cl__auth_username_opt,
>    svn_cl__auth_password_opt,
>    svn_cl__targets_opt,
>    svn_cl__xml_opt,
> -  svn_cl__strict_opt
> +  svn_cl__strict_opt,
> +  svn_cl__no_ignore_opt,
>  } svn_cl__longopt_t;
>  
>  
>  
>  /*** Command dispatch. ***/
>  
>  /* Hold results of option processing that are shared by multiple
>     commands. */
> @@ -85,16 +86,17 @@
>    svn_stringbuf_t *filedata;     /* contents of file used as option data */
>    const char *filedata_encoding; /* the locale/encoding of the filedata*/
>    svn_boolean_t help;            /* print usage message */
>    const char *auth_username;     /* auth username */ /* UTF-8! */
>    const char *auth_password;     /* auth password */ /* UTF-8! */
>    const char *extensions;        /* subprocess extension args */ /* UTF-8! */
>    apr_array_header_t *targets;   /* target list from file */ /* UTF-8! */
>    svn_boolean_t xml;             /* output in xml, e.g., "svn log --xml" */
> +  svn_boolean_t no_ignore;       /* do not ignore any files */
>  
>  } svn_cl__opt_state_t;
>  
>  
>  /* All client command procedures conform to this prototype.  OPT_STATE
>   * likewise should hold the result of processing the options.  OS is a
>   * list of filenames and directories, a-la CVS (which really only
>   * becomes useful if you pass it into svn_cl__args_to_target_array()
> Index: ./subversion/clients/cmdline/status-cmd.c
> ===================================================================
> --- ./subversion/clients/cmdline/status-cmd.c
> +++ ./subversion/clients/cmdline/status-cmd.c	Fri Jul 26 15:09:49 2002
> @@ -59,25 +59,26 @@
>  
>        /* Retrieve a hash of status structures with the information
>           requested by the user.
>  
>           svn_client_status directly understands the three commandline
>           switches (-n, -u, -[vV]) : */
>  
>        SVN_ERR (svn_client_status (&statushash, &youngest, target, auth_baton,
> -                                  opt_state->nonrecursive ? 0 : 1,
> +                                  opt_state->nonrecursive ? FALSE : TRUE,
>                                    opt_state->verbose,
>                                    opt_state->update,
> +                                  opt_state->no_ignore,
>                                    pool));
>  
>        /* Now print the structures to the screen.
>           The flag we pass indicates whether to use the 'detailed'
>           output format or not. */
> -      svn_cl__print_status_list (statushash, 
> +      svn_cl__print_status_list (statushash,
>                                   youngest,
>                                   (opt_state->verbose || opt_state->update),
>                                   opt_state->verbose,
>                                   opt_state->quiet,
>                                   pool);
>      }
>  
>    return SVN_NO_ERROR;
> Index: ./subversion/clients/cmdline/main.c
> ===================================================================
> --- ./subversion/clients/cmdline/main.c
> +++ ./subversion/clients/cmdline/main.c	Fri Jul 26 15:37:48 2002
> @@ -70,16 +70,18 @@
>      {"show-updates",  'u', 0, "display update information"},
>      {"username",      svn_cl__auth_username_opt, 1, "specify a username ARG"},
>      {"password",      svn_cl__auth_password_opt, 1, "specify a password ARG"},
>      {"extensions",    'x', 1, "pass \"ARG\" as bundled options to GNU diff"},
>      {"targets",       svn_cl__targets_opt, 1,
>                        "pass contents of file \"ARG\" as additional args"},
>      {"xml",           svn_cl__xml_opt, 0, "output in xml"},
>      {"strict",        svn_cl__strict_opt, 0, "use strict semantics"},
> +    {"no-ignore",     svn_cl__no_ignore_opt, 0,
> +                      "disregard default and svn:ignore property ignores"},
>      {0,               0, 0}
>    };
>  
>  
>  /* The maximum number of options that can be accepted by a subcommand;
>     this is simply the number of unique switches that exist in the
>     table above.  */
>  #define SVN_CL__MAX_OPTS sizeof(svn_cl__options)/sizeof(svn_cl__options[0])
> @@ -371,17 +373,18 @@
>      "     '+' history scheduled with commit\n"
>      "\n"
>      "Decoding --verbose output:\n"
>      "Status| Out-of-date? | Local Rev | Last changed info |  Path\n"
>      "    _                    965       938     kfogel      ./autogen.sh\n"
>      "    _      *             965       970    sussman      ./build.conf\n"
>      "    M                    965       687        joe      ./buildcheck.sh\n",
>      { 'u', 'v', 'N', 'q',
> -      svn_cl__auth_username_opt, svn_cl__auth_password_opt } },
> +      svn_cl__auth_username_opt, svn_cl__auth_password_opt,
> +      svn_cl__no_ignore_opt } },
>    
>    { "switch", svn_cl__switch, {"sw"},
>      "Update working copy to mirror a new URL\n"
>      "usage: switch REPOS_URL [TARGET]\n\n"
>      "   Note:  this is the way to move a working copy to a new branch.\n",
>      {'r', 'D', 'N', svn_cl__auth_username_opt, svn_cl__auth_password_opt} },
>   
>    { "update", svn_cl__update, {"up"}, 
> @@ -1084,16 +1087,19 @@
>          opt_state.filedata_encoding = apr_pstrdup (pool, opt_arg);
>          break;
>        case svn_cl__xml_opt:
>          opt_state.xml = TRUE;
>          break;
>        case svn_cl__strict_opt:
>          opt_state.strict = TRUE;
>          break;
> +      case svn_cl__no_ignore_opt:
> +        opt_state.no_ignore = TRUE;
> +        break;
>        case 'x':
>          err = svn_utf_cstring_to_utf8 (&opt_state.extensions, opt_arg,
>                                         NULL, pool);
>          if (err) {
>            svn_handle_error (err, stderr, FALSE);
>            svn_pool_destroy (pool);
>            return EXIT_FAILURE;
>          }
> Index: ./doc/handbook/client.texi
> ===================================================================
> --- ./doc/handbook/client.texi
> +++ ./doc/handbook/.svn/tmp/client.texi.60812.00001.tmp	Fri Jul 26 16:02:34 2002
> @@ -317,16 +317,24 @@
>  item is part of a subtree scheduled for addition-with-history, i.e. some
>  parent got copied, and it's just coming along for the ride.  @samp{M @ @
>  +} means the item is part of a subtree scheduled for
>  addition-with-history, @emph{and} it has local mods.  When you commit,
>  first some parent will be added-with-history (copied), which means this
>  file will automatically exist in the copy.  Then the local mods will be
>  further uploaded into the copy.
>  
> +By default, @samp{svn status} ignores files matching the regular
> +expressions @samp{*.o}, @samp{*.lo}, @samp{*.la}, @samp{#*#},
> +@samp{*.rej}, @samp{*~}, and @samp{.#*}.  If you want additional files
> +ignored, set the @samp{svn:ignore} property on the parent directory.  If
> +you want to see the status of all the files in the repository
> +irrespective of @samp{svn status} and @samp{svn:ignore}'s regular
> +expressions, then use the @option{--no-ignore} command line option.
> +
>  If a single path is passed to the command, it will tell you about it:
>  
>  @example
>  $ svn status stuff/fish.c
>  D      stuff/fish.c
>  @end example
>  
>  This command also has a @option{--verbose} (@option{-v}) mode, which will
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: svn status ignore svn:ignore [PATCH]

Posted by Blair Zajac <bl...@orcaware.com>.
Ben Collins-Sussman wrote:
> 
> Blair Zajac <bl...@orcaware.com> writes:
> 
> > It would be handy to have svn status have a command line option
> > to ignore the svn:ignore setting.
> 
> +1.  Go for it.

Could somebody review this?  I'll submit it myself to raise my
score in the Karl Fogel commit race!

Best,
Blair

-- 
Blair Zajac <bl...@orcaware.com>
Web and OS performance plots - http://www.orcaware.com/orca/



Add --no-ignore command line option to svn status to disregard svn's
default ignore list and any svn:ignore properties.

* subversion/include/svn_wc.h (svn_wc_statuses):
  New argument svn_boolean_t no_ignore.

* subversion/include/svn_client.h (svn_client_status):
  New argument svn_boolean_t no_ignore.

* subversion/libsvn_wc/status.c
  (add_unversioned_items):
    New argument svn_boolean_t no_ignore and test it whether to use
      default ignore regular expressions and svn:ignore properties.
  (svn_wc_statuses):
    New argument svn_boolean_t no_ignore and pass it to itself on
      recursion and to add_unversioned_items.

* subversion/libsvn_client/delete.c
  (svn_client__can_delete):
    Pass FALSE for svn_wc_statuses new no_ignore argument.

* subversion/libsvn_client/status.c
  (svn_client_status):
    New argument svn_boolean_t no_ignore and pass down to
      svn_wc_statuses.

* subversion/clients/cmdline/cl.h:
  Add svn_cl__no_ignore_opt to svn_cl__longopt_t.

* subversion/clients/cmdline/status-cmd.c (svn_cl__status):
  Pass no_ignore command line option setting down to
    svn_client_status.

* subversion/clients/cmdline/main.c:
  Add "no-ignore" to svn_cl__options and to valid 'status' command
    line options.
  (main): Set opt_state.no_ignore appropriately.

* subversion/clients/cmdline/status-cmd.c
  (svn_cl__status):
    Take command line option no_ignore flag and pass down to
      svn_client_status.

* subversion/libsvn_client/status.c
  (svn_client_status):
    Take no_ignore flag and pass it down to svn_wc_statuses.

* doc/handbook/client.texi (Examine your changes):
  List svn's default list of ignore regular expressions.
  Document svn status' --no-ignore command line option.

Re: svn status ignore svn:ignore

Posted by Ben Collins-Sussman <su...@collab.net>.
Blair Zajac <bl...@orcaware.com> writes:

> It would be handy to have svn status have a command line option
> to ignore the svn:ignore setting.

+1.  Go for it.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org