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>
This commit is contained in:
parent
2122591b3b
commit
afb5f39e24
@ -571,9 +571,13 @@ int cmd_fetch__tool(int argc, const char **argv, const char *prefix)
|
||||
return parse_reflist(reflist);
|
||||
}
|
||||
if (!strcmp("pick-rref", argv[1])) {
|
||||
const char *ls_remote_result;
|
||||
if (argc != 4)
|
||||
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])) {
|
||||
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
|
||||
# connected to our repository's tips, in which
|
||||
# case we do not have to do any fetch.
|
||||
theirs=$(git-fetch--tool -s pick-rref \
|
||||
"$rref" "$ls_remote_result") &&
|
||||
theirs=$(echo "$ls_remote_result" | \
|
||||
git-fetch--tool -s pick-rref "$rref" "-") &&
|
||||
|
||||
# This will barf when $theirs reach an object that
|
||||
# we do not have in our repository. Otherwise,
|
||||
@ -198,7 +198,8 @@ fetch_all_at_once () {
|
||||
git-rev-list --objects $theirs --not --all \
|
||||
>/dev/null 2>/dev/null
|
||||
then
|
||||
git-fetch--tool pick-rref "$rref" "$ls_remote_result"
|
||||
echo "$ls_remote_result" | \
|
||||
git-fetch--tool pick-rref "$rref" "-"
|
||||
else
|
||||
git-fetch-pack --thin $exec $keep $shallow_depth \
|
||||
$quiet $no_progress "$remote" $rref ||
|
||||
@ -263,8 +264,8 @@ fetch_per_ref () {
|
||||
fi
|
||||
|
||||
# Find $remote_name from ls-remote output.
|
||||
head=$(git-fetch--tool -s pick-rref \
|
||||
"$remote_name" "$ls_remote_result")
|
||||
head=$(echo "$ls_remote_result" | \
|
||||
git-fetch--tool -s pick-rref "$remote_name" "-")
|
||||
expr "z$head" : "z$_x40\$" >/dev/null ||
|
||||
die "No such ref $remote_name at $remote"
|
||||
echo >&2 "Fetching $remote_name from $remote using $proto"
|
||||
|
Loading…
Reference in New Issue
Block a user