Browse Source

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
maint
Junio C Hamano 19 years ago
parent
commit
84138845c5
  1. 1
      .gitignore
  2. 9
      Documentation/git-cat-file.txt
  3. 16
      fetch-pack.c
  4. 10
      git-ls-remote.sh

1
.gitignore vendored

@ -116,6 +116,7 @@ git-update-index
git-update-ref git-update-ref
git-update-server-info git-update-server-info
git-upload-pack git-upload-pack
git-upload-tar
git-var git-var
git-verify-pack git-verify-pack
git-verify-tag git-verify-tag

9
Documentation/git-cat-file.txt

@ -8,12 +8,12 @@ git-cat-file - Provide content or type information for repository objects


SYNOPSIS SYNOPSIS
-------- --------
'git-cat-file' [-t | -s | -e | <type>] <object> 'git-cat-file' [-t | -s | -e | -p | <type>] <object>


DESCRIPTION DESCRIPTION
----------- -----------
Provides content or type of objects in the repository. The type 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. or '-s' is used to find the object size.


OPTIONS OPTIONS
@ -33,6 +33,9 @@ OPTIONS
Suppress all output; instead exit with zero status if <object> Suppress all output; instead exit with zero status if <object>
exists and is a valid object. exists and is a valid object.


-p::
Pretty-print the contents of <object> based on its type.

<type>:: <type>::
Typically this matches the real type of <object> but asking Typically this matches the real type of <object> but asking
for a type that can trivially be dereferenced from the given 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 '-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 Otherwise the raw (though uncompressed) contents of the <object> will
be returned. be returned.



16
fetch-pack.c

@ -18,6 +18,12 @@ static const char *exec = "git-upload-pack";
#define SEEN (1U << 3) #define SEEN (1U << 3)
#define POPPED (1U << 4) #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 struct commit_list *rev_list = NULL;
static int non_common_revs = 0, multi_ack = 0, use_thin_pack = 0; 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 fetching;
int count = 0, flushes = 0, retval; int count = 0, flushes = 0, retval;
const unsigned char *sha1; const unsigned char *sha1;
unsigned in_vain = 0;
int got_continue = 0;


for_each_ref(rev_list_insert_ref); 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)); packet_write(fd[1], "have %s\n", sha1_to_hex(sha1));
if (verbose) if (verbose)
fprintf(stderr, "have %s\n", sha1_to_hex(sha1)); fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
in_vain++;
if (!(31 & ++count)) { if (!(31 & ++count)) {
int ack; int ack;


@ -200,9 +209,16 @@ static int find_common(int fd[2], unsigned char *result_sha1,
lookup_commit(result_sha1); lookup_commit(result_sha1);
mark_common(commit, 0, 1); mark_common(commit, 0, 1);
retval = 0; retval = 0;
in_vain = 0;
got_continue = 1;
} }
} while (ack); } while (ack);
flushes--; flushes--;
if (got_continue && MAX_IN_VAIN < in_vain) {
if (verbose)
fprintf(stderr, "giving up\n");
break; /* give up */
}
} }
} }
done: done:

10
git-ls-remote.sh

@ -58,11 +58,19 @@ http://* | https://* )
;; ;;


rsync://* ) rsync://* )
mkdir $tmpdir mkdir $tmpdir &&
rsync -rlq "$peek_repo/HEAD" $tmpdir &&
rsync -rq "$peek_repo/refs" $tmpdir || { rsync -rq "$peek_repo/refs" $tmpdir || {
echo "failed slurping" echo "failed slurping"
exit 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) | (cd $tmpdir && find refs -type f) |
while read path while read path
do do

Loading…
Cancel
Save