Merge branch 'jc/fetchupload' into next
* jc/fetchupload: fetch-pack: give up after getting too many "ack continue" cat-file: document -p option Built git-upload-tar should be ignored. ls-remote: fix rsync:// to report HEAD
This commit is contained in:
commit
84138845c5
1
.gitignore
vendored
1
.gitignore
vendored
@ -116,6 +116,7 @@ git-update-index
|
||||
git-update-ref
|
||||
git-update-server-info
|
||||
git-upload-pack
|
||||
git-upload-tar
|
||||
git-var
|
||||
git-verify-pack
|
||||
git-verify-tag
|
||||
|
@ -8,12 +8,12 @@ git-cat-file - Provide content or type information for repository objects
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-cat-file' [-t | -s | -e | <type>] <object>
|
||||
'git-cat-file' [-t | -s | -e | -p | <type>] <object>
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Provides content or type of objects in the repository. The type
|
||||
is required unless '-t' is used to find the object type,
|
||||
is required unless '-t' or '-p' is used to find the object type,
|
||||
or '-s' is used to find the object size.
|
||||
|
||||
OPTIONS
|
||||
@ -33,6 +33,9 @@ OPTIONS
|
||||
Suppress all output; instead exit with zero status if <object>
|
||||
exists and is a valid object.
|
||||
|
||||
-p::
|
||||
Pretty-print the contents of <object> based on its type.
|
||||
|
||||
<type>::
|
||||
Typically this matches the real type of <object> but asking
|
||||
for a type that can trivially be dereferenced from the given
|
||||
@ -49,6 +52,8 @@ If '-s' is specified, the size of the <object> in bytes.
|
||||
|
||||
If '-e' is specified, no output.
|
||||
|
||||
If '-p' is specified, the contents of <object> are pretty-printed.
|
||||
|
||||
Otherwise the raw (though uncompressed) contents of the <object> will
|
||||
be returned.
|
||||
|
||||
|
16
fetch-pack.c
16
fetch-pack.c
@ -18,6 +18,12 @@ static const char *exec = "git-upload-pack";
|
||||
#define SEEN (1U << 3)
|
||||
#define POPPED (1U << 4)
|
||||
|
||||
/*
|
||||
* After sending this many "have"s if we do not get any new ACK , we
|
||||
* give up traversing our history.
|
||||
*/
|
||||
#define MAX_IN_VAIN 256
|
||||
|
||||
static struct commit_list *rev_list = NULL;
|
||||
static int non_common_revs = 0, multi_ack = 0, use_thin_pack = 0;
|
||||
|
||||
@ -134,6 +140,8 @@ static int find_common(int fd[2], unsigned char *result_sha1,
|
||||
int fetching;
|
||||
int count = 0, flushes = 0, retval;
|
||||
const unsigned char *sha1;
|
||||
unsigned in_vain = 0;
|
||||
int got_continue = 0;
|
||||
|
||||
for_each_ref(rev_list_insert_ref);
|
||||
|
||||
@ -172,6 +180,7 @@ static int find_common(int fd[2], unsigned char *result_sha1,
|
||||
packet_write(fd[1], "have %s\n", sha1_to_hex(sha1));
|
||||
if (verbose)
|
||||
fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
|
||||
in_vain++;
|
||||
if (!(31 & ++count)) {
|
||||
int ack;
|
||||
|
||||
@ -200,9 +209,16 @@ static int find_common(int fd[2], unsigned char *result_sha1,
|
||||
lookup_commit(result_sha1);
|
||||
mark_common(commit, 0, 1);
|
||||
retval = 0;
|
||||
in_vain = 0;
|
||||
got_continue = 1;
|
||||
}
|
||||
} while (ack);
|
||||
flushes--;
|
||||
if (got_continue && MAX_IN_VAIN < in_vain) {
|
||||
if (verbose)
|
||||
fprintf(stderr, "giving up\n");
|
||||
break; /* give up */
|
||||
}
|
||||
}
|
||||
}
|
||||
done:
|
||||
|
@ -58,11 +58,19 @@ http://* | https://* )
|
||||
;;
|
||||
|
||||
rsync://* )
|
||||
mkdir $tmpdir
|
||||
mkdir $tmpdir &&
|
||||
rsync -rlq "$peek_repo/HEAD" $tmpdir &&
|
||||
rsync -rq "$peek_repo/refs" $tmpdir || {
|
||||
echo "failed slurping"
|
||||
exit
|
||||
}
|
||||
head=$(cat "$tmpdir/HEAD") &&
|
||||
case "$head" in
|
||||
ref:' '*)
|
||||
head=$(expr "z$head" : 'zref: \(.*\)') &&
|
||||
head=$(cat "$tmpdir/$head") || exit
|
||||
esac &&
|
||||
echo "$head HEAD"
|
||||
(cd $tmpdir && find refs -type f) |
|
||||
while read path
|
||||
do
|
||||
|
Loading…
Reference in New Issue
Block a user