[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Global ignores

From: Ryan Schmidt <subversion-2010d_at_ryandesign.com>
Date: Thu, 7 Oct 2010 21:07:40 -0500

On Oct 7, 2010, at 15:29, Feldhacker, Chris wrote:

> Where can I find more complete information on global-ignores and the expected format/syntax of the patterns?
>
> The svnbook just indicates:
> The global-ignores option is a list of whitespace-delimited globs which describe the names of files and directories that Subversion should not display unless they are versioned.
> The default value is *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store

You must be reading an old version of the book; the current version shows "The default value is *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store ."

http://svnbook.red-bean.com/nightly/en/svn.advanced.confarea.html#id531554

> At first I assumed this just performed wild-card matching, but looking at the default list within the config file that was created on my machine (Windows) I see this:
>
> global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo
> *.rej *~ #*# .#* .*.swp .DS_Store
>
> Based on the presence of the "[0-9]" set, I assume something a bit more than just wild-card matching must be performed but apparently something less than full regular expressions...
>
> The wikipedia entry for "glob" indicates this is just a generic term that refers to a limited pattern-matching facility, which seems to vary by programming language or shell, and "there is no definite syntax for globs..."
>
>
> So, where can I find more complete information on the "glob" syntax that Subversion uses for the global-ignores option, and is it consistent across OSes?

I could not find documentation about the specifics of the glob format in the Subversion book, so I dove into the code. In subversion/libsvn/subr/svn_string.c I found the funciton svn_cstring_match_glob_list which just calls through to APR's apr_fnmatch function. And in APR's source file include/apr_fnmatch.h there is a long comment describing how it works:

/**
 * Try to match the string to the given pattern, return APR_SUCCESS if
 * match, else return APR_FNM_NOMATCH. Note that there is no such thing as
 * an illegal pattern.
 *
 * With all flags unset, a pattern is interpreted as such:
 *
 * PATTERN: Backslash followed by any character, including another
 * backslash.<br/>
 * MATCHES: That character exactly.
 *
 * <p>
 * PATTERN: ?<br/>
 * MATCHES: Any single character.
 * </p>
 *
 * <p>
 * PATTERN: *<br/>
 * MATCHES: Any sequence of zero or more characters. (Note that multiple
 * *s in a row are equivalent to one.)
 *
 * PATTERN: Any character other than \?*[ or a \ at the end of the pattern<br/>
 * MATCHES: That character exactly. (Case sensitive.)
 *
 * PATTERN: [ followed by a class description followed by ]<br/>
 * MATCHES: A single character described by the class description.
 * (Never matches, if the class description reaches until the
 * end of the string without a ].) If the first character of
 * the class description is ^ or !, the sense of the description
 * is reversed. The rest of the class description is a list of
 * single characters or pairs of characters separated by -. Any
 * of those characters can have a backslash in front of them,
 * which is ignored; this lets you use the characters ] and -
 * in the character class, as well as ^ and ! at the
 * beginning. The pattern matches a single character if it
 * is one of the listed characters or falls into one of the
 * listed ranges (inclusive, case sensitive). Ranges with
 * the first character larger than the second are legal but
 * never match. Edge cases: [] never matches, and [^] and [!]
 * always match without consuming a character.
 *
 * Note that these patterns attempt to match the entire string, not
 * just find a substring matching the pattern.
 *
 * @param pattern The pattern to match to
 * @param strings The string we are trying to match
 * @param flags flags to use in the match. Bitwise OR of:
 * <pre>
 * APR_FNM_NOESCAPE Disable backslash escaping
 * APR_FNM_PATHNAME Slash must be matched by slash
 * APR_FNM_PERIOD Period must be matched by period
 * APR_FNM_CASE_BLIND Compare characters case-insensitively.
 * </pre>
 */

In svn_cstring_match_glob_list, Subversion calls apr_fnmatch with no flags set.
Received on 2010-10-08 04:08:24 CEST

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.