Esempio n. 1
0
int path_ignore_search(const ignores *ig, const char *path, const char *filename) {
    char *temp;

    if (filename_ignore_search(ig, filename)) {
        return 1;
    }
    ag_asprintf(&temp, "%s/%s", path, filename);
    int rv = filename_ignore_search(ig, temp);
    free(temp);
    return rv;
}
Esempio n. 2
0
/* This function is REALLY HOT. It gets called for every file */
int filename_filter(const char *path, const struct dirent *dir, void *baton) {
    const char *filename = dir->d_name;
    size_t i;
    ignores *ig = (ignores*) baton;

    if (!opts.follow_symlinks && is_symlink(path, dir)) {
        log_debug("File %s ignored becaused it's a symlink", dir->d_name);
        return 0;
    }

    for (i = 0; evil_hardcoded_ignore_files[i] != NULL; i++) {
        if (strcmp(filename, evil_hardcoded_ignore_files[i]) == 0) {
            return 0;
        }
    }

    if (!opts.search_hidden_files && filename[0] == '.') {
        return 0;
    }
    if (opts.search_all_files && !opts.path_to_agignore) {
        return 1;
    }
    if (filename_ignore_search(ig, filename)) {
        return 0;
    }

    if (is_directory(path, dir) && filename[strlen(filename) - 1] != '/') {
        char *temp;
        asprintf(&temp, "%s/", filename);
        int rv = filename_ignore_search(ig, temp);
        free(temp);
        if (rv) {
            return 0;
        }
    }

    if (ig->parent != NULL) {
        return filename_filter(path, dir, (void *)(ig->parent));
    }

    return 1;
}
Esempio n. 3
0
static int path_ignore_search(const ignores *ig, const char *path, const char *filename, int level) {
    char *temp, *index;
    int rv = 0;

    ag_asprintf(&temp, "%s/%s", path, filename);
    if ('/' == temp[strlen(temp) - 1]) level++;

    for (index = temp + strlen(temp) - 1, level++; level > 0 && (!rv); index--) {
        if ('/' == *index) {
            rv = filename_ignore_search(ig, index + 1);
            if (! --level) {
                /* Cater for .gitignore patterns beginning with a slash */
                rv += filename_ignore_search(ig, index);
            }
        }
    }

    free(temp);
    return rv;
}