Browse Source

submodule init: fail gracefully with a missing .gitmodules file

When there is no .gitmodules file availabe to initialize a submodule
from, `submodule_from_path` just returns NULL. We need to check for
that and abort gracefully. When `submodule init` was implemented in shell,
a missing .gitmodules file would result in an error message

    No url found for submodule path '%s' in .gitmodules

Replicate that error message for now.

When the .gitmodules file is missing we can probably fail even earlier
for all of the submodules with an improved error message.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Stefan Beller 9 years ago committed by Junio C Hamano
parent
commit
d92028a575
  1. 10
      builtin/submodule--helper.c
  2. 8
      t/t7400-submodule-basic.sh

10
builtin/submodule--helper.c

@ -314,13 +314,17 @@ static void init_submodule(const char *path, const char *prefix, int quiet) @@ -314,13 +314,17 @@ static void init_submodule(const char *path, const char *prefix, int quiet)
/* Only loads from .gitmodules, no overlay with .git/config */
gitmodules_config();

sub = submodule_from_path(null_sha1, path);

if (prefix) {
strbuf_addf(&sb, "%s%s", prefix, path);
displaypath = strbuf_detach(&sb, NULL);
} else
displaypath = xstrdup(sub->path);
displaypath = xstrdup(path);

sub = submodule_from_path(null_sha1, path);

if (!sub)
die(_("No url found for submodule path '%s' in .gitmodules"),
displaypath);

/*
* Copy url setting when it is not set yet.

8
t/t7400-submodule-basic.sh

@ -18,6 +18,14 @@ test_expect_success 'setup - initial commit' ' @@ -18,6 +18,14 @@ test_expect_success 'setup - initial commit' '
git branch initial
'

test_expect_success 'submodule init aborts on missing .gitmodules file' '
test_when_finished "git update-index --remove sub" &&
git update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub &&
# missing the .gitmodules file here
test_must_fail git submodule init 2>actual &&
test_i18ngrep "No url found for submodule path" actual
'

test_expect_success 'configuration parsing' '
test_when_finished "rm -f .gitmodules" &&
cat >.gitmodules <<-\EOF &&

Loading…
Cancel
Save