Shourya Shukla <shouryashukla.oo@xxxxxxxxx> writes: > if test -z "$force" > then > git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 && > die "$(eval_gettext "'\$sm_path' already exists in the index")" > else > git ls-files -s "$sm_path" | sane_grep -v "^160000" > /dev/null 2>&1 && > die "$(eval_gettext "'\$sm_path' already exists in the index and is not a submodule")" > fi Hmph. So, - if we are not being 'force'd, we see if there is anything in the index for the path and error out, whether it is a gitlink or not. - if there is 'force' option, we see what the given path is in the index, and if it is already a gitlink, then die. That sort of makes sense, as long as the remainder of the code deals with the path that is not a submodule in a sensible way. > This is what I have done in C: > > if (!force) { > if (is_directory(path) && submodule_from_path(the_repository, &null_oid, path)) > die(_("'%s' already exists in the index"), path); The shell version would error out with anything in the index, so I'd expect that a faithful conversion would not call is_directory() nor submodule_from_path() at all---it would just look path up in the_index and complains if anything is found. For example, the quoted part in the original above is what gives the error message when I do $ git submodule add ./Makefile 'Makefile' already exists in the index. I think. And the above code won't trigger the "already exists" at all because 'path' is not a directory. > } else { > int err; > if (index_name_pos(&the_index, path, strlen(path)) >= 0 && > !is_submodule_populated_gently(path, &err)) > die(_("'%s' already exists in the index and is not a " > "submodule"), path); Likewise. The above does much more than the original. The original was checking if the found cache entry has 160000 mode bit, so the second test would not be is_submodule_populated_gently() but more like !S_ISGITLINK(ce->ce_mode) Now it is a different question if the original is correct to begin with ;-). > } > > Is this part correct? I am not very sure about this. This particular > part is not covered in any test or test script, so, I do not have a > solid method of knowing the correctness of this segment. > Feedback and reviews are appreciated.