From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Jan Holesovsky <kendy@suse.cz>
Cc: git@vger.kernel.org, gitster@pobox.com
Subject: Re: [PATCH] RFC: git lazy clone proof-of-concept
Date: Fri, 8 Feb 2008 18:20:32 +0000 (GMT) [thread overview]
Message-ID: <alpine.LSU.1.00.0802081809270.11591@racer.site> (raw)
In-Reply-To: <200802081828.43849.kendy@suse.cz>
Hi,
On Fri, 8 Feb 2008, Jan Holesovsky wrote:
> +static void send_want(int fd[2], const char *remote, int full_info)
> +{
> + if (full_info)
> + packet_write(fd[1], "want %s%s%s%s%s%s%s%s%s\n",
> + remote,
> + (multi_ack ? " multi_ack" : ""),
> + (use_sideband == 2 ? " side-band-64k" : ""),
> + (use_sideband == 1 ? " side-band" : ""),
> + (args.use_thin_pack ? " thin-pack" : ""),
> + (args.no_progress ? " no-progress" : ""),
> + (args.commits_only ? " commits-only" : ""),
> + (args.exact_objects ? " exact-objects" : ""),
> + " ofs-delta");
> + else
> + packet_write(fd[1], "want %s\n", remote);
> +}
You might want to make the full_info static, and only send the options the
first time.
> @@ -523,11 +541,15 @@ static int get_pack(int xd[2], char **pack_lockfile)
> strcpy(keep_arg + s, "localhost");
> *av++ = keep_arg;
> }
> + if (args.exact_objects)
> + *av++ = "--ignore-remote-alternates";
> }
> else {
> *av++ = "unpack-objects";
> if (args.quiet)
> *av++ = "-q";
> + if (args.exact_objects)
> + *av++ = "--ignore-remote-alternates";
> }
You can move this outside of the if() instead of repeating yourself...
> @@ -556,6 +578,7 @@ static struct ref *do_fetch_pack(int fd[2],
> unsigned char sha1[20];
>
> get_remote_heads(fd[0], &ref, 0, NULL, 0);
> +
> if (is_repository_shallow() && !server_supports("shallow"))
> die("Server does not support shallow clients");
> if (server_supports("multi_ack")) {
Not strictly necessary, right? ;-)
> @@ -647,12 +686,72 @@ static void fetch_pack_setup(void)
> did_setup = 1;
> }
>
> +static void read_from_stdin(int *num, char ***records)
> +{
> + char buffer[4096];
> + size_t records_num, leftover;
> + ssize_t ret;
> +
> + *num = 0;
> + leftover = 0;
> +
> + records_num = 4096;
> + (*records) = xmalloc(records_num * sizeof(char *));
> +
> + do {
> + char *p, *last;
> +
> + ret = xread(0 /*stdin*/, buffer + leftover,
> + sizeof(buffer) - leftover);
> + if (ret < 0)
> + die("read error on input: %s", strerror(errno));
> +
> + last = buffer;
> + for (p = buffer; p < buffer + leftover + ret; p++)
> + if ((!*p || *p == '\n') && (p != last)) {
> + if (*num >= records_num) {
> + records_num *= 2;
> + (*records) = xrealloc(*records,
> + records_num * sizeof(char*));
> + }
> +
> + if (p - last > 0) {
> + (*records)[*num] =
> + strndup(last, p - last);
> + (*num)++;
> + }
> + last = p + 1;
> + }
> +
> + leftover = p - last;
> + if (leftover >= sizeof(buffer))
> + die("input line too long");
> + if (leftover < 0)
> + leftover = 0;
> +
> + memmove(buffer, last, leftover);
> + } while (ret > 0);
> +
> + if (leftover) {
> + if (*num >= records_num) {
> + records_num *= 2;
> + (*records) = xrealloc(*records,
> + records_num * sizeof(char*));
> + }
> +
> + (*records)[*num] = strndup(buffer, leftover);
> + (*num)++;
> + }
> +}
> +
This chunk could use ALLOC_GROW() quite nicely (would make it more
readable, and avoid errors). Also, I'd use alloc_nr() instead of the
doubling.
> int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
> {
> int i, ret, nr_heads;
> struct ref *ref;
> char *dest = NULL, **heads;
> + int from_stdin;
>
> + from_stdin = 0;
You can initialise it to 0 right away...
Unfortunately, I have to go now... so I will review the rest
(from builtin-fetch.c on) later.
It's great seeing that you work on this!
Thanks,
Dscho
next prev parent reply other threads:[~2008-02-08 18:21 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-08 17:28 [PATCH] RFC: git lazy clone proof-of-concept Jan Holesovsky
2008-02-08 18:03 ` Nicolas Pitre
2008-02-09 14:25 ` Jan Holesovsky
2008-02-09 22:05 ` Mike Hommey
2008-02-09 23:38 ` Nicolas Pitre
2008-02-10 7:23 ` Marco Costalba
2008-02-10 12:08 ` Johannes Schindelin
2008-02-10 16:46 ` David Symonds
2008-02-10 17:45 ` Johannes Schindelin
2008-02-10 19:45 ` Nicolas Pitre
2008-02-10 20:32 ` Johannes Schindelin
2008-02-08 18:14 ` Harvey Harrison
2008-02-09 14:27 ` Jan Holesovsky
2008-02-08 18:20 ` Johannes Schindelin [this message]
2008-02-08 18:49 ` Mike Hommey
2008-02-08 19:04 ` Johannes Schindelin
2008-02-09 15:06 ` Jan Holesovsky
2008-02-08 19:00 ` Jakub Narebski
2008-02-08 19:26 ` Jon Smirl
2008-02-08 20:09 ` Nicolas Pitre
2008-02-11 10:13 ` Andreas Ericsson
2008-02-12 2:55 ` [PATCH 1/2] pack-objects: Allow setting the #threads equal to #cpus automatically Brandon Casey
2008-02-12 5:53 ` Andreas Ericsson
[not found] ` <1202784078-23700-1-git-send-email-casey@nrlssc.navy.mil>
2008-02-12 2:59 ` [PATCH 2/2] pack-objects: Default to zero threads, meaning auto-assign to #cpus Brandon Casey
2008-02-12 4:57 ` Nicolas Pitre
2008-02-08 20:19 ` [PATCH] RFC: git lazy clone proof-of-concept Harvey Harrison
2008-02-08 20:24 ` Jon Smirl
2008-02-08 20:25 ` Harvey Harrison
2008-02-08 20:41 ` Jon Smirl
2008-02-09 15:27 ` Jan Holesovsky
2008-02-10 3:10 ` Nicolas Pitre
2008-02-10 4:59 ` Sean
2008-02-10 5:22 ` Nicolas Pitre
2008-02-10 5:35 ` Sean
2008-02-11 1:42 ` Jakub Narebski
2008-02-11 2:04 ` Nicolas Pitre
2008-02-11 10:11 ` Jakub Narebski
2008-02-10 9:34 ` Joachim B Haga
2008-02-10 16:43 ` Johannes Schindelin
2008-02-10 17:01 ` Jon Smirl
2008-02-10 17:36 ` Johannes Schindelin
2008-02-10 18:47 ` Johannes Schindelin
2008-02-10 19:42 ` Nicolas Pitre
2008-02-10 20:11 ` Jon Smirl
2008-02-12 20:37 ` Johannes Schindelin
2008-02-12 21:05 ` Nicolas Pitre
2008-02-12 21:08 ` Linus Torvalds
2008-02-12 21:36 ` Jon Smirl
2008-02-12 21:59 ` Linus Torvalds
2008-02-12 22:25 ` Linus Torvalds
2008-02-12 22:43 ` Jon Smirl
2008-02-12 23:39 ` Linus Torvalds
2008-02-12 21:25 ` Jon Smirl
2008-02-14 19:20 ` Johannes Schindelin
2008-02-14 20:05 ` Jakub Narebski
2008-02-14 20:16 ` Nicolas Pitre
2008-02-14 21:04 ` Johannes Schindelin
2008-02-14 21:59 ` Jakub Narebski
2008-02-14 23:38 ` Johannes Schindelin
2008-02-14 23:51 ` Brian Downing
2008-02-14 23:57 ` Brian Downing
2008-02-15 0:08 ` Johannes Schindelin
2008-02-15 1:41 ` Nicolas Pitre
2008-02-17 8:18 ` Shawn O. Pearce
2008-02-17 9:05 ` Junio C Hamano
2008-02-17 18:44 ` Nicolas Pitre
2008-02-15 1:07 ` Jakub Narebski
2008-02-15 9:43 ` Jan Holesovsky
2008-02-14 21:08 ` Brandon Casey
2008-02-15 9:34 ` Jan Holesovsky
2008-02-10 19:50 ` Nicolas Pitre
2008-02-14 19:41 ` Brandon Casey
2008-02-14 19:58 ` Johannes Schindelin
2008-02-14 20:11 ` Nicolas Pitre
2008-02-11 1:20 ` Jakub Narebski
2008-02-08 20:16 ` Johannes Schindelin
2008-02-08 21:35 ` Jakub Narebski
2008-02-08 21:52 ` Johannes Schindelin
2008-02-08 22:03 ` Mike Hommey
2008-02-08 22:34 ` Johannes Schindelin
2008-02-08 22:50 ` Mike Hommey
2008-02-08 23:14 ` Johannes Schindelin
2008-02-08 23:38 ` Mike Hommey
2008-02-09 21:20 ` Jan Hudec
2008-02-09 15:54 ` Jan Holesovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.LSU.1.00.0802081809270.11591@racer.site \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kendy@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).