Loading tools/aapt/AaptAssets.cpp +80 −43 Original line number Diff line number Diff line Loading @@ -56,55 +56,92 @@ static bool validateFileName(const char* fileName) return true; } // The default to use if no other ignore pattern is defined. const char * const gDefaultIgnoreAssets = "!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"; // The ignore pattern that can be passed via --ignore-assets in Main.cpp const char * gUserIgnoreAssets = NULL; static bool isHidden(const char *root, const char *path) { const char *ext = NULL; const char *type = NULL; // Patterns syntax: // - Delimiter is : // - Entry can start with the flag ! to avoid printing a warning // about the file being ignored. // - Entry can have the flag "<dir>" to match only directories // or <file> to match only files. Default is to match both. // - Entry can be a simplified glob "<prefix>*" or "*<suffix>" // where prefix/suffix must have at least 1 character (so that // we don't match a '*' catch-all pattern.) // - The special filenames "." and ".." are always ignored. // - Otherwise the full string is matched. // - match is not case-sensitive. // Skip all hidden files. if (path[0] == '.') { // Skip ., .. and .svn but don't chatter about it. if (strcmp(path, ".") == 0 || strcmp(path, "..") == 0 || strcmp(path, ".svn") == 0) { if (strcmp(path, ".") == 0 || strcmp(path, "..") == 0) { return true; } type = "hidden"; } else if (path[0] == '_') { // skip directories starting with _ (don't chatter about it) String8 subdirName(root); subdirName.appendPath(path); if (getFileType(subdirName.string()) == kFileTypeDirectory) { return true; const char *delim = ":"; const char *p = gUserIgnoreAssets; if (!p || !p[0]) { p = getenv("ANDROID_AAPT_IGNORE"); } } else if (strcmp(path, "CVS") == 0) { // Skip CVS but don't chatter about it. return true; } else if (strcasecmp(path, "thumbs.db") == 0 || strcasecmp(path, "picasa.ini") == 0) { // Skip suspected image indexes files. type = "index"; } else if (path[strlen(path)-1] == '~') { // Skip suspected emacs backup files. type = "backup"; } else if ((ext = strrchr(path, '.')) != NULL && strcmp(ext, ".scc") == 0) { // Skip VisualSourceSafe files and don't chatter about it return true; if (!p || !p[0]) { p = gDefaultIgnoreAssets; } char *patterns = strdup(p); bool ignore = false; bool chatty = true; char *matchedPattern = NULL; String8 fullPath(root); fullPath.appendPath(path); FileType type = getFileType(fullPath); int plen = strlen(path); // Note: we don't have strtok_r under mingw. for(char *token = strtok(patterns, delim); !ignore && token != NULL; token = strtok(NULL, delim)) { chatty = token[0] != '!'; if (!chatty) token++; // skip ! if (strncasecmp(token, "<dir>" , 5) == 0) { if (type != kFileTypeDirectory) continue; token += 5; } if (strncasecmp(token, "<file>", 6) == 0) { if (type != kFileTypeRegular) continue; token += 6; } matchedPattern = token; int n = strlen(token); if (token[0] == '*') { // Match *suffix token++; if (n <= plen) { ignore = strncasecmp(token, path + plen - n, n) == 0; } } else if (n > 1 && token[n - 1] == '*') { // Match prefix* ignore = strncasecmp(token, path, n - 1) == 0; } else { // Let everything else through. return false; ignore = strcasecmp(token, path) == 0; } } /* If we get this far, "type" should be set and the file * should be skipped. */ String8 subdirName(root); subdirName.appendPath(path); fprintf(stderr, " (skipping %s %s '%s')\n", type, getFileType(subdirName.string())==kFileTypeDirectory ? "dir":"file", subdirName.string()); if (ignore && chatty) { fprintf(stderr, " (skipping %s '%s' due to ANDROID_AAPT_IGNORE pattern '%s')\n", type == kFileTypeDirectory ? "dir" : "file", path, matchedPattern ? matchedPattern : ""); } return true; free(patterns); return ignore; } // ========================================================================= Loading tools/aapt/AaptAssets.h +4 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,10 @@ using namespace android; extern const char * const gDefaultIgnoreAssets; extern const char * gUserIgnoreAssets; bool valid_symbol_name(const String8& str); class AaptAssets; Loading tools/aapt/Main.cpp +15 −2 Original line number Diff line number Diff line Loading @@ -176,7 +176,11 @@ void usage(void) " --non-constant-id\n" " Make the resources ID non constant. This is required to make an R java class\n" " that does not contain the final value but is used to make reusable compiled\n" " libraries that need to access resources.\n"); " libraries that need to access resources.\n" " --ignore-assets\n" " Assets to be ignored. Default pattern is:\n" " %s\n", gDefaultIgnoreAssets); } /* Loading Loading @@ -551,6 +555,15 @@ int main(int argc, char* const argv[]) bundle.setNonConstantId(true); } else if (strcmp(cp, "-no-crunch") == 0) { bundle.setUseCrunchCache(true); } else if (strcmp(cp, "-ignore-assets") == 0) { argc--; argv++; if (!argc) { fprintf(stderr, "ERROR: No argument supplied for '--ignore-assets' option\n"); wantUsage = true; goto bail; } gUserIgnoreAssets = argv[0]; } else { fprintf(stderr, "ERROR: Unknown option '-%s'\n", cp); wantUsage = true; Loading Loading
tools/aapt/AaptAssets.cpp +80 −43 Original line number Diff line number Diff line Loading @@ -56,55 +56,92 @@ static bool validateFileName(const char* fileName) return true; } // The default to use if no other ignore pattern is defined. const char * const gDefaultIgnoreAssets = "!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"; // The ignore pattern that can be passed via --ignore-assets in Main.cpp const char * gUserIgnoreAssets = NULL; static bool isHidden(const char *root, const char *path) { const char *ext = NULL; const char *type = NULL; // Patterns syntax: // - Delimiter is : // - Entry can start with the flag ! to avoid printing a warning // about the file being ignored. // - Entry can have the flag "<dir>" to match only directories // or <file> to match only files. Default is to match both. // - Entry can be a simplified glob "<prefix>*" or "*<suffix>" // where prefix/suffix must have at least 1 character (so that // we don't match a '*' catch-all pattern.) // - The special filenames "." and ".." are always ignored. // - Otherwise the full string is matched. // - match is not case-sensitive. // Skip all hidden files. if (path[0] == '.') { // Skip ., .. and .svn but don't chatter about it. if (strcmp(path, ".") == 0 || strcmp(path, "..") == 0 || strcmp(path, ".svn") == 0) { if (strcmp(path, ".") == 0 || strcmp(path, "..") == 0) { return true; } type = "hidden"; } else if (path[0] == '_') { // skip directories starting with _ (don't chatter about it) String8 subdirName(root); subdirName.appendPath(path); if (getFileType(subdirName.string()) == kFileTypeDirectory) { return true; const char *delim = ":"; const char *p = gUserIgnoreAssets; if (!p || !p[0]) { p = getenv("ANDROID_AAPT_IGNORE"); } } else if (strcmp(path, "CVS") == 0) { // Skip CVS but don't chatter about it. return true; } else if (strcasecmp(path, "thumbs.db") == 0 || strcasecmp(path, "picasa.ini") == 0) { // Skip suspected image indexes files. type = "index"; } else if (path[strlen(path)-1] == '~') { // Skip suspected emacs backup files. type = "backup"; } else if ((ext = strrchr(path, '.')) != NULL && strcmp(ext, ".scc") == 0) { // Skip VisualSourceSafe files and don't chatter about it return true; if (!p || !p[0]) { p = gDefaultIgnoreAssets; } char *patterns = strdup(p); bool ignore = false; bool chatty = true; char *matchedPattern = NULL; String8 fullPath(root); fullPath.appendPath(path); FileType type = getFileType(fullPath); int plen = strlen(path); // Note: we don't have strtok_r under mingw. for(char *token = strtok(patterns, delim); !ignore && token != NULL; token = strtok(NULL, delim)) { chatty = token[0] != '!'; if (!chatty) token++; // skip ! if (strncasecmp(token, "<dir>" , 5) == 0) { if (type != kFileTypeDirectory) continue; token += 5; } if (strncasecmp(token, "<file>", 6) == 0) { if (type != kFileTypeRegular) continue; token += 6; } matchedPattern = token; int n = strlen(token); if (token[0] == '*') { // Match *suffix token++; if (n <= plen) { ignore = strncasecmp(token, path + plen - n, n) == 0; } } else if (n > 1 && token[n - 1] == '*') { // Match prefix* ignore = strncasecmp(token, path, n - 1) == 0; } else { // Let everything else through. return false; ignore = strcasecmp(token, path) == 0; } } /* If we get this far, "type" should be set and the file * should be skipped. */ String8 subdirName(root); subdirName.appendPath(path); fprintf(stderr, " (skipping %s %s '%s')\n", type, getFileType(subdirName.string())==kFileTypeDirectory ? "dir":"file", subdirName.string()); if (ignore && chatty) { fprintf(stderr, " (skipping %s '%s' due to ANDROID_AAPT_IGNORE pattern '%s')\n", type == kFileTypeDirectory ? "dir" : "file", path, matchedPattern ? matchedPattern : ""); } return true; free(patterns); return ignore; } // ========================================================================= Loading
tools/aapt/AaptAssets.h +4 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,10 @@ using namespace android; extern const char * const gDefaultIgnoreAssets; extern const char * gUserIgnoreAssets; bool valid_symbol_name(const String8& str); class AaptAssets; Loading
tools/aapt/Main.cpp +15 −2 Original line number Diff line number Diff line Loading @@ -176,7 +176,11 @@ void usage(void) " --non-constant-id\n" " Make the resources ID non constant. This is required to make an R java class\n" " that does not contain the final value but is used to make reusable compiled\n" " libraries that need to access resources.\n"); " libraries that need to access resources.\n" " --ignore-assets\n" " Assets to be ignored. Default pattern is:\n" " %s\n", gDefaultIgnoreAssets); } /* Loading Loading @@ -551,6 +555,15 @@ int main(int argc, char* const argv[]) bundle.setNonConstantId(true); } else if (strcmp(cp, "-no-crunch") == 0) { bundle.setUseCrunchCache(true); } else if (strcmp(cp, "-ignore-assets") == 0) { argc--; argv++; if (!argc) { fprintf(stderr, "ERROR: No argument supplied for '--ignore-assets' option\n"); wantUsage = true; goto bail; } gUserIgnoreAssets = argv[0]; } else { fprintf(stderr, "ERROR: Unknown option '-%s'\n", cp); wantUsage = true; Loading