Daniel Shahaf wrote on Tue, Jan 04, 2011 at 22:22:18 +0200:
> It's hacky, but:
> svn commit --changelist :glob:'*.foo'
> where the "changelist" is then interpreted as a glob pattern
> (let's say apr_fnmatch()).
That wasn't hard:
% $svn st -q
% $svn st -q --cl ':glob:*.c'
(still want to hear if people think it's actually a useful addition)
--- subversion/libsvn_wc/adm_ops.c (revision 1054438)
+++ subversion/libsvn_wc/adm_ops.c (working copy)
@@ -2175,6 +2175,31 @@ svn_wc__set_file_external_location(svn_wc_context_
+match_globs(const char *local_abspath,
+ apr_hash_t *clhash,
+ apr_pool_t *scratch_pool)
+ /* ### copy-paste of svn_hash_keys(). Just revv it instead. */
+ apr_hash_index_t *hi;
+ apr_array_header_t *globs;
+ globs = apr_array_make(scratch_pool, apr_hash_count(clhash), sizeof(const char *));
+ for (hi = apr_hash_first(scratch_pool, clhash); hi; hi = apr_hash_next(hi))
+ const char *changelist = svn__apr_hash_index_key(hi);
+ if (!strncmp(changelist, ":glob:", 6))
+ APR_ARRAY_PUSH(globs, const char *) = changelist + 6;
+ /* Add more pseudo-changelist types here. */
+ return svn_cstring_match_glob_list(svn_dirent_basename(local_abspath, NULL),
const char *local_abspath,
@@ -2200,8 +2225,10 @@ svn_wc__internal_changelist_match(svn_wc__db_t *db
- return (changelist
- && apr_hash_get(clhash, changelist, APR_HASH_KEY_STRING) != NULL);
+ if (changelist && apr_hash_get(clhash, changelist, APR_HASH_KEY_STRING) != NULL)
+ return TRUE;
+ return match_globs(local_abspath, clhash, scratch_pool);
> Ed Avis wrote on Tue, Jan 04, 2011 at 14:48:21 +0000:
> > Hi, this is a feature request for the command-line svn client. I am posting it
> > here rather than in the issue tracker directly. It is slightly related to the
> > earlier thread
> > <http://article.gmane.org/gmane.comp.version-control.subversion.user/36113>
> > but not exactly the same issue.
> > If you remove some files and then commit them, then the 'svn rm' command can
> > take a wildcard but 'svn commit' cannot, for example
> > % svn rm *.foo
> > D a.foo
> > D b.foo
> > % svn commit *.foo
> > svn: Commit failed (details follow):
> > svn: '/some/where/*.foo' is not under version control
> > Before a dozen people jump in to reply, I understand that in Unix-like systems
> > wildcard expansion is done by the shell, that there are good reasons why it is
> > done this way, and that the above behaviour is therefore not a bug. (I am using
> > bash on Linux.)
> > However, as a convenience to the user, I wonder if it would be more helpful for
> > svn to expand wildcards relative to known files in the repository. Then in the
> > above case, when '*.foo' does not match any files and the wildcard is passed
> > through unchanged by the shell, svn would expand it and the result would be what
> > the user intended.
> > I can see that things could get interesting in the case where just some of the
> > files have been removed:
> > % svn rm a.foo
> > % echo hello >>b.foo
> > % svn commit *.foo # will commit only b.foo
> > However, this is arguably not any more surprising than the current behaviour.
> > In fact, it is the current behaviour. If svn had wildcard support, you would
> > be able to force committing both files by saying
> > % svn commit '*.foo' # get svn to expand the wildcard itself
> > As an additional safety catch, when svn expands a wildcard, the user could be
> > prompted that the resulting list of filenames is what was intended.
> > Wildcard support like this would also make some operations easier; see the FAQ
> > for examples.
> > If this feature has already been considered by the developers and rejected,
> > I apologize. I didn't see anything when searching the issue tracker.
> > --
> > Ed Avis <eda_at_waniasset.com>
Received on 2011-01-04 21:51:24 CET