properly handle nonexistent remote repository names given to 'got fetch' found by jrick ok naddy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
diff --git a/got/got.c b/got/got.c
index 9ff5486..138291e 100644
--- a/got/got.c
+++ b/got/got.c
@@ -2119,9 +2119,10 @@ cmd_fetch(int argc, char *argv[])
got_gotconfig_get_remotes(&nremotes, &remotes,
worktree_conf);
for (i = 0; i < nremotes; i++) {
- remote = &remotes[i];
- if (strcmp(remote->name, remote_name) == 0)
+ if (strcmp(remotes[i].name, remote_name) == 0) {
+ remote = &remotes[i];
break;
+ }
}
}
}
@@ -2131,18 +2132,20 @@ cmd_fetch(int argc, char *argv[])
got_gotconfig_get_remotes(&nremotes, &remotes,
repo_conf);
for (i = 0; i < nremotes; i++) {
- remote = &remotes[i];
- if (strcmp(remote->name, remote_name) == 0)
+ if (strcmp(remotes[i].name, remote_name) == 0) {
+ remote = &remotes[i];
break;
+ }
}
}
}
if (remote == NULL) {
got_repo_get_gitconfig_remotes(&nremotes, &remotes, repo);
for (i = 0; i < nremotes; i++) {
- remote = &remotes[i];
- if (strcmp(remote->name, remote_name) == 0)
+ if (strcmp(remotes[i].name, remote_name) == 0) {
+ remote = &remotes[i];
break;
+ }
}
}
if (remote == NULL) {
diff --git a/regress/cmdline/fetch.sh b/regress/cmdline/fetch.sh
index 059c1dc..3f5693e 100755
--- a/regress/cmdline/fetch.sh
+++ b/regress/cmdline/fetch.sh
@@ -978,6 +978,18 @@ remote "barbaz" {
repository "$testroot/does-not-exist"
}
EOF
+ echo "got: nonexistent: remote repository not found" \
+ > $testroot/stderr.expected
+ (cd $testroot/repo-clone && got fetch nonexistent \
+ > $testroot/stdout 2> $testroot/stderr)
+ ret="$?"
+ if [ "$ret" == "0" ]; then
+ echo "got fetch command succeeded unexpectedly" >&2
+ diff -u $testroot/stderr.expected $testroot/stderr
+ test_done "$testroot" "1"
+ return 1
+ fi
+
(cd $testroot/repo-clone && got fetch -l foobar \
> $testroot/stdout)
ret="$?"