git-fetch: Fix "argument list too long"
If $ls_remote_result was too long, git-fetch--tool -s pick-rref "$rref" "$ls_remote_result" in git-fetch will fail with "argument list too long". This patch fixes git-fetch--tool and git-fetch by passing $ls_remote_result via stdin. Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
parent
2122591b3b
commit
afb5f39e24
|
@ -571,9 +571,13 @@ int cmd_fetch__tool(int argc, const char **argv, const char *prefix)
|
||||||
return parse_reflist(reflist);
|
return parse_reflist(reflist);
|
||||||
}
|
}
|
||||||
if (!strcmp("pick-rref", argv[1])) {
|
if (!strcmp("pick-rref", argv[1])) {
|
||||||
|
const char *ls_remote_result;
|
||||||
if (argc != 4)
|
if (argc != 4)
|
||||||
return error("pick-rref takes 2 args");
|
return error("pick-rref takes 2 args");
|
||||||
return pick_rref(sopt, argv[2], argv[3]);
|
ls_remote_result = argv[3];
|
||||||
|
if (!strcmp(ls_remote_result, "-"))
|
||||||
|
ls_remote_result = get_stdin();
|
||||||
|
return pick_rref(sopt, argv[2], ls_remote_result);
|
||||||
}
|
}
|
||||||
if (!strcmp("expand-refs-wildcard", argv[1])) {
|
if (!strcmp("expand-refs-wildcard", argv[1])) {
|
||||||
const char *reflist;
|
const char *reflist;
|
||||||
|
|
11
git-fetch.sh
11
git-fetch.sh
|
@ -189,8 +189,8 @@ fetch_all_at_once () {
|
||||||
# See if all of what we are going to fetch are
|
# See if all of what we are going to fetch are
|
||||||
# connected to our repository's tips, in which
|
# connected to our repository's tips, in which
|
||||||
# case we do not have to do any fetch.
|
# case we do not have to do any fetch.
|
||||||
theirs=$(git-fetch--tool -s pick-rref \
|
theirs=$(echo "$ls_remote_result" | \
|
||||||
"$rref" "$ls_remote_result") &&
|
git-fetch--tool -s pick-rref "$rref" "-") &&
|
||||||
|
|
||||||
# This will barf when $theirs reach an object that
|
# This will barf when $theirs reach an object that
|
||||||
# we do not have in our repository. Otherwise,
|
# we do not have in our repository. Otherwise,
|
||||||
|
@ -198,7 +198,8 @@ fetch_all_at_once () {
|
||||||
git-rev-list --objects $theirs --not --all \
|
git-rev-list --objects $theirs --not --all \
|
||||||
>/dev/null 2>/dev/null
|
>/dev/null 2>/dev/null
|
||||||
then
|
then
|
||||||
git-fetch--tool pick-rref "$rref" "$ls_remote_result"
|
echo "$ls_remote_result" | \
|
||||||
|
git-fetch--tool pick-rref "$rref" "-"
|
||||||
else
|
else
|
||||||
git-fetch-pack --thin $exec $keep $shallow_depth \
|
git-fetch-pack --thin $exec $keep $shallow_depth \
|
||||||
$quiet $no_progress "$remote" $rref ||
|
$quiet $no_progress "$remote" $rref ||
|
||||||
|
@ -263,8 +264,8 @@ fetch_per_ref () {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Find $remote_name from ls-remote output.
|
# Find $remote_name from ls-remote output.
|
||||||
head=$(git-fetch--tool -s pick-rref \
|
head=$(echo "$ls_remote_result" | \
|
||||||
"$remote_name" "$ls_remote_result")
|
git-fetch--tool -s pick-rref "$remote_name" "-")
|
||||||
expr "z$head" : "z$_x40\$" >/dev/null ||
|
expr "z$head" : "z$_x40\$" >/dev/null ||
|
||||||
die "No such ref $remote_name at $remote"
|
die "No such ref $remote_name at $remote"
|
||||||
echo >&2 "Fetching $remote_name from $remote using $proto"
|
echo >&2 "Fetching $remote_name from $remote using $proto"
|
||||||
|
|
Loading…
Reference in New Issue