Lars Hjemli <hje...@gmail.com> writes:

> +static struct option builtin_all_options[] = {
> +     OPT_BOOLEAN('c', "clean", &only_clean, N_("only show clean 
> repositories")),
> +     OPT_BOOLEAN('d', "dirty", &only_dirty, N_("only show dirty 
> repositories")),
> +     OPT_END(),
> +};

If you were to go in the OPT_SET_INT route, that would give users
the usual "last one wins" semantics, e.g.

        $ git for-each-repo --clean --dirty

will look for only dirty repositories.  For completeness, we would
probably want "all" to defeat either of them, i.e.

        $ git for-each-repo --clean --all

> +static int walk(struct strbuf *path, int argc, const char **argv)
> +{
> +     DIR *dir;
> +     struct dirent *ent;
> +     size_t len;
> +
> +     dir = opendir(path->buf);
> +     if (!dir)
> +             return errno;
> +     strbuf_addstr(path, "/");
> +     len = path->len;
> +     while ((ent = readdir(dir))) {
> +             if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, ".."))
> +                     continue;
> +             if (!strcmp(ent->d_name, ".git")) {

This only looks for the top of working tree.  Have you considered if
this "iterate over directories and list git repositories in them"
may be useful for collection of bare repositories, and if it is, how
to go about implementing the discovery process?

> +             if (ent->d_type != DT_DIR)
> +                     continue;

I think this is wrong.

On platforms that need a NO_D_TYPE_IN_DIRENT build, your compilation
may fail here (you would need to lstat() it yourself).  See how
dir.c does this without ugly #ifdef's in the code, especially around
the use of get_dtype() and DTYPE() macro.

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to