Browse Source

don't let wildcards match INBOX, unless it lives under Path

it's counter-intuitive to have '*' match the (always present) INBOX
when the rest of the mailboxes lives in a different namespace.
wip/maildir-uid-dupes-test
Oswald Buddenhagen 12 years ago
parent
commit
406e967430
  1. 39
      src/main.c
  2. 4
      src/mbsync.1

39
src/main.c

@ -706,28 +706,29 @@ store_opened( store_t *ctx, void *aux )
for (flags = 0, cpat = mvars->chan->patterns; cpat; cpat = cpat->next) { for (flags = 0, cpat = mvars->chan->patterns; cpat; cpat = cpat->next) {
const char *pat = cpat->string; const char *pat = cpat->string;
if (*pat != '!') { if (*pat != '!') {
int i; /* Partial matches like "INB*" or even "*" are not considered,
char c; * except implicity when the INBOX lives under Path. */
static const char strinbox[] = "INBOX"; if (!memcmp( pat, "INBOX", 5 )) {
for (i = 0; ; i++) { char c = pat[5];
c = pat[i]; if (!c) {
if (i == sizeof(strinbox) - 1) /* User really wants the INBOX. */
break;
if (c != strinbox[i])
goto nextpat;
}
if (!c) {
flags |= LIST_INBOX;
} else if (c == '/') {
if (ctx->conf->flat_delim)
flags |= LIST_PATH;
else
flags |= LIST_INBOX; flags |= LIST_INBOX;
} else if (c == '/') {
/* Flattened sub-folders of INBOX actually end up in Path. */
if (ctx->conf->flat_delim)
flags |= LIST_PATH;
else
flags |= LIST_INBOX;
} else {
/* User may not want the INBOX after all ... */
flags |= LIST_PATH;
/* ... but maybe he does.
* The flattened sub-folder case is implicitly covered by the previous line. */
if (c == '*' || c == '%')
flags |= LIST_INBOX;
}
} else { } else {
nextpat:
flags |= LIST_PATH; flags |= LIST_PATH;
if (c == '*' || c == '%')
flags |= LIST_INBOX;
} }
} }
} }

4
src/mbsync.1

@ -370,6 +370,10 @@ and \fB%\fR matches anything up to the next hierarchy delimiter. Prepending
\fB!\fR to a pattern makes it an exclusion. Multiple patterns can be specified \fB!\fR to a pattern makes it an exclusion. Multiple patterns can be specified
(either by supplying multiple arguments or by using \fBPattern\fR multiple (either by supplying multiple arguments or by using \fBPattern\fR multiple
times); later matches take precedence. times); later matches take precedence.
.br
Note that \fBINBOX\fR is not matched by wildcards, unless it lives under
\fBPath\fR.
.br
Example: "\fBPatterns\fR\ \fI%\ !Trash\fR" Example: "\fBPatterns\fR\ \fI%\ !Trash\fR"
.. ..
.TP .TP

Loading…
Cancel
Save