Эх сурвалжийг харах

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.
Oswald Buddenhagen 12 жил өмнө
parent
commit
406e967430
2 өөрчлөгдсөн 24 нэмэгдсэн , 19 устгасан
  1. 20 19
      src/main.c
  2. 4 0
      src/mbsync.1

+ 20 - 19
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) {
 			const char *pat = cpat->string;
 			if (*pat != '!') {
-				int i;
-				char c;
-				static const char strinbox[] = "INBOX";
-				for (i = 0; ; i++) {
-					c = pat[i];
-					if (i == sizeof(strinbox) - 1)
-						break;
-					if (c != strinbox[i])
-						goto nextpat;
-				}
-				if (!c) {
-					flags |= LIST_INBOX;
-				} else if (c == '/') {
-					if (ctx->conf->flat_delim)
-						flags |= LIST_PATH;
-					else
+				/* Partial matches like "INB*" or even "*" are not considered,
+				 * except implicity when the INBOX lives under Path. */
+				if (!memcmp( pat, "INBOX", 5 )) {
+					char c = pat[5];
+					if (!c) {
+						/* User really wants the 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 {
-				  nextpat:
 					flags |= LIST_PATH;
-					if (c == '*' || c == '%')
-						flags |= LIST_INBOX;
 				}
 			}
 		}

+ 4 - 0
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
 (either by supplying multiple arguments or by using \fBPattern\fR multiple
 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"
 ..
 .TP