Hi, On Sun, 25 Jan 2009, Lars Hjemli wrote: > The --submodules option uses the enhanced read_tree_recursive() to > enable inclusion of submodules in the generated archive. > > When invoked with `--submodules=all` all gitlink entries will be > traversed, and when invoked with --submodules=checkedout (the default > option) only gitlink entries with a git repo (i.e. checked out sub- > modules) will be traversed. In bare repositories, this means: none. My reasoning for "*" instead of "all" and "" instead for "checkedout" was that you could allow "<name1>,<name2>" at some stage, where <name> would first be interpreted as a submodule group, and if that fails, as submodule name. Thinking about that more, "" seems illogical, that should rather mean "none", i.e. the same as --no-submodules. The "checkedout" could be "." then, perhaps? As in "what we have checked out in ./, the current directory"? > When a gitlink has been selected for traversal, it is required that all > objects necessary to perform this traversal are available in either the > primary odb or through an alternate odb. To this end, git archive will > insert the object database of the selected gitlink (when checked out) > as an alternate odb, using the new function add_alt_odb(). > And since alternates now can be added after parsing of > objects/info/alternates, the error message in link_alt_odb_entry() has > been updated to not mention this file. Could you split that part into its own patch again, please? > @@ -91,6 +92,70 @@ static void setup_archive_check(struct git_attr_check *check) > check[1].attr = attr_export_subst; > } > > +static int include_repository(const char *path) > +{ > + struct stat st; > + const char *tmp; > + > + /* Return early if the path does not exist since it is OK to not > + * checkout submodules. > + */ > + if (stat(path, &st) && errno == ENOENT) > + return 1; > + > + tmp = read_gitfile_gently(path); This will leak memory, no? > + if (tmp) { > + path = tmp; > + if (stat(path, &st)) > + die("Unable to stat submodule gitdir %s: %s (%d)", > + path, strerror(errno), errno); > + } > + > + if (!S_ISDIR(st.st_mode)) > + die("Submodule gitdir %s is not a directory", path); > + > + if (add_alt_odb(mkpath("%s/objects", path))) > + die("submodule odb %s could not be added as an alternate", > + path); > + > + return 0; > +} Ciao, Dscho -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html