From: Tay Ray Chuan <rctay89@gmail.com>
To: "Shawn O. Pearce" <spearce@spearce.org>
Cc: Junio C Hamano <gitster@pobox.com>, Johannes Sixt <j6t@kdbg.org>,
git@vger.kernel.org,
Ilari Liusvaara <ilari.liusvaara@elisanet.fi>,
Michael J Gruber <git@drmicha.warpmail.net>,
Christian Halstrick <christian.halstrick@gmail.com>,
jan.sievers@sap.com, Matthias Sohn <matthias.sohn@sap.com>
Subject: Re: [PATCH v2 6/6] http-fetch: Use temporary files for pack-*.idx until verified
Date: Fri, 16 Apr 2010 10:03:07 +0800 [thread overview]
Message-ID: <20100416100307.0000423f@unknown> (raw)
In-Reply-To: <1271366704-25262-2-git-send-email-spearce@spearce.org>
Hi
On Fri, Apr 16, 2010 at 5:25 AM, Shawn O. Pearce <spearce@spearce.org> wrote:
> [snip]
> diff --git a/pack-check.c b/pack-check.c
> index 166ca70..9baba12 100644
> --- a/pack-check.c
> +++ b/pack-check.c
> @@ -133,14 +133,13 @@ static int verify_packfile(struct packed_git *p,
> return err;
> }
>
> -int verify_pack(struct packed_git *p)
> +int verify_pack_index(struct packed_git *p)
> {
> off_t index_size;
> const unsigned char *index_base;
> git_SHA_CTX ctx;
> unsigned char sha1[20];
> int err = 0;
> - struct pack_window *w_curs = NULL;
>
> if (open_pack_index(p))
> return error("packfile %s index not opened", p->pack_name);
> @@ -154,9 +153,17 @@ int verify_pack(struct packed_git *p)
> if (hashcmp(sha1, index_base + index_size - 20))
> err = error("Packfile index for %s SHA1 mismatch",
> p->pack_name);
> + return err;
> +}
> +
> +int verify_pack(struct packed_git *p)
> +{
> + int err = 0;
> + struct pack_window *w_curs = NULL;
>
> - /* Verify pack file */
> - err |= verify_packfile(p, &w_curs);
> + err |= verify_pack_index(p);
> + if (!err)
> + err |= verify_packfile(p, &w_curs);
> unuse_pack(&w_curs);
>
> return err;
> diff --git a/pack.h b/pack.h
> index d268c01..bb27576 100644
> --- a/pack.h
> +++ b/pack.h
> @@ -57,6 +57,7 @@ struct pack_idx_entry {
>
> extern const char *write_idx_file(const char *index_name, struct pack_idx_entry **objects, int nr_objects, unsigned char *sha1);
> extern int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr);
> +extern int verify_pack_index(struct packed_git *);
> extern int verify_pack(struct packed_git *);
> extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);
> extern char *index_pack_lockfile(int fd);
These should probably go into a separate patch.
> diff --git a/http.c b/http.c
> index aa3e380..2d88034 100644
> --- a/http.c
> +++ b/http.c
> @@ -897,47 +897,65 @@ int http_fetch_ref(const char *base, struct ref *ref)
> }
>
> /* Helpers for fetching packs */
> -static int fetch_pack_index(unsigned char *sha1, const char *base_url)
> +static char *fetch_pack_index(unsigned char *sha1, const char *base_url)
> {
> - int ret = 0;
> - char *hex = xstrdup(sha1_to_hex(sha1));
> [snip]
> if (http_is_verbose)
> - fprintf(stderr, "Getting index for pack %s\n", hex);
> + fprintf(stderr, "Getting index for pack %s\n", sha1_to_hex(sha1));
>
> end_url_with_slash(&buf, base_url);
> - strbuf_addf(&buf, "objects/pack/pack-%s.idx", hex);
> + strbuf_addf(&buf, "objects/pack/pack-%s.idx", sha1_to_hex(sha1));
> url = strbuf_detach(&buf, NULL);
I think the replacing of "hex" with "sha1_to_hex(sha1)" is unrelated.
> - if (has_pack_index(sha1)) {
> - ret = 0;
> - goto cleanup;
> - }
> -
It probably should be mentioned in the commit message or elsewhere that
as fetch_and_setup_pack_index() now checks for the pack index locally
before fetching, we no longer need this check.
> static int fetch_and_setup_pack_index(struct packed_git **packs_head,
> unsigned char *sha1, const char *base_url)
> {
> [snip]
> + ret = verify_pack_index(new_pack);
> + if (!ret) {
> + close_pack_index(new_pack);
> + ret = move_temp_to_file(tmp_idx, sha1_pack_index_name(sha1));
> + }
> + free(tmp_idx);
> + if (ret)
> + return -1;
The conflation of "ret" as the result of both verify_pack_index() and
move_temp_to_file() is pretty confusing.
Also, perhaps the below could be squashed in to reduce if()'s on tmp_idx.
-- >8 --
diff --git a/http.c b/http.c
index 6b7b899..e5bb54a 100644
--- a/http.c
+++ b/http.c
@@ -945,35 +945,37 @@ static int fetch_and_setup_pack_index(struct packed_git **packs_head,
{
struct packed_git *new_pack;
char *tmp_idx = NULL;
+ int ret;
- if (!has_pack_index(sha1)) {
- tmp_idx = fetch_pack_index(sha1, base_url);
- if (!tmp_idx)
- return -1;
+ if (has_pack_index(sha1)) {
+ new_pack = parse_pack_index(sha1, NULL);
+ if (!new_pack)
+ return -1; /* parse_pack_index() already issued error message */
+ goto add_pack;
}
+ tmp_idx = fetch_pack_index(sha1, base_url);
+ if (!tmp_idx)
+ return -1;
+
new_pack = parse_pack_index(sha1, tmp_idx);
if (!new_pack) {
- if (tmp_idx) {
- unlink(tmp_idx);
- free(tmp_idx);
- }
+ unlink(tmp_idx);
+ free(tmp_idx);
+
return -1; /* parse_pack_index() already issued error message */
}
- if (tmp_idx) {
- int ret;
-
- ret = verify_pack_index(new_pack);
- if (!ret) {
- close_pack_index(new_pack);
- ret = move_temp_to_file(tmp_idx, sha1_pack_index_name(sha1));
- }
- free(tmp_idx);
- if (ret)
- return -1;
+ ret = verify_pack_index(new_pack);
+ if (!ret) {
+ close_pack_index(new_pack);
+ ret = move_temp_to_file(tmp_idx, sha1_pack_index_name(sha1));
}
+ free(tmp_idx);
+ if (ret)
+ return -1;
+add_pack:
new_pack->next = *packs_head;
*packs_head = new_pack;
return 0;
--
Cheers,
Ray Chuan
next prev parent reply other threads:[~2010-04-16 2:03 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-15 9:51 git fetch over http:// left my repo broken Christian Halstrick
2010-04-15 9:58 ` Michael J Gruber
2010-04-15 11:43 ` Ilari Liusvaara
2010-04-15 14:15 ` Shawn O. Pearce
2010-04-15 19:09 ` [PATCH 0/6] detect dumb HTTP pack file corruption Shawn O. Pearce
2010-04-17 17:56 ` Junio C Hamano
2010-04-17 19:11 ` Shawn O. Pearce
2010-04-15 19:09 ` [PATCH 1/6] http.c: Remove bad free of static block Shawn O. Pearce
2010-04-15 19:09 ` [PATCH 2/6] t5550-http-fetch: Use subshell for repository operations Shawn O. Pearce
2010-04-15 19:09 ` [PATCH 3/6] http.c: Tiny refactoring of finish_http_pack_request Shawn O. Pearce
2010-04-15 19:09 ` [PATCH 4/6] http.c: Drop useless != NULL test in finish_http_pack_request Shawn O. Pearce
2010-04-15 19:09 ` [PATCH 5/6] http-fetch: Use index-pack rather than verify-pack to check packs Shawn O. Pearce
2010-04-15 19:34 ` Johannes Sixt
2010-04-15 21:25 ` [PATCH v2 " Shawn O. Pearce
2010-04-16 2:55 ` Tay Ray Chuan
2010-04-17 19:30 ` Shawn O. Pearce
2010-04-15 21:25 ` [PATCH v2 6/6] http-fetch: Use temporary files for pack-*.idx until verified Shawn O. Pearce
2010-04-16 2:03 ` Tay Ray Chuan [this message]
2010-04-17 20:07 ` [PATCH v3 01/11] http.c: Remove bad free of static block Shawn O. Pearce
2010-04-17 20:07 ` [PATCH v3 02/11] t5550-http-fetch: Use subshell for repository operations Shawn O. Pearce
2010-04-17 20:07 ` [PATCH v3 03/11] http.c: Tiny refactoring of finish_http_pack_request Shawn O. Pearce
2010-04-17 20:07 ` [PATCH v3 04/11] http.c: Drop useless != NULL test in finish_http_pack_request Shawn O. Pearce
2010-04-17 20:07 ` [PATCH v3 05/11] http.c: Don't store destination name in request structures Shawn O. Pearce
2010-04-18 3:36 ` Tay Ray Chuan
2010-04-17 20:07 ` [PATCH v3 06/11] http.c: Remove unnecessary strdup of sha1_to_hex result Shawn O. Pearce
2010-04-18 3:14 ` Tay Ray Chuan
2010-04-17 20:07 ` [PATCH v3 07/11] Introduce close_pack_index to permit replacement Shawn O. Pearce
2010-04-17 20:07 ` [PATCH v3 08/11] Extract verify_pack_index for reuse from verify_pack Shawn O. Pearce
2010-04-17 20:07 ` [PATCH v3 09/11] Allow parse_pack_index on temporary files Shawn O. Pearce
2010-04-17 20:07 ` [PATCH v3 10/11] http-fetch: Use index-pack rather than verify-pack to check packs Shawn O. Pearce
2010-04-18 3:07 ` Tay Ray Chuan
2010-04-17 20:07 ` [PATCH v3 11/11] http-fetch: Use temporary files for pack-*.idx until verified Shawn O. Pearce
2010-04-18 3:57 ` Tay Ray Chuan
2010-04-19 14:23 ` [PATCH v4 00/11] Resend sp/maint-dumb-http-pack-reidx Shawn O. Pearce
2010-04-19 14:46 ` Tay Ray Chuan
2010-04-19 14:49 ` Shawn O. Pearce
2010-04-20 4:33 ` Tay Ray Chuan
2010-04-19 14:23 ` [PATCH v4 06/11] http.c: Remove unnecessary strdup of sha1_to_hex result Shawn O. Pearce
2010-04-19 14:23 ` [PATCH v4 07/11] Introduce close_pack_index to permit replacement Shawn O. Pearce
2010-04-19 14:23 ` [PATCH v4 08/11] Extract verify_pack_index for reuse from verify_pack Shawn O. Pearce
2010-04-19 14:23 ` [PATCH v4 09/11] Allow parse_pack_index on temporary files Shawn O. Pearce
2010-04-19 14:23 ` [PATCH v4 10/11] http-fetch: Use index-pack rather than verify-pack to check packs Shawn O. Pearce
2010-04-19 14:35 ` Tay Ray Chuan
2010-04-19 14:23 ` [PATCH v4 11/11] http-fetch: Use temporary files for pack-*.idx until verified Shawn O. Pearce
2010-04-15 19:09 ` [PATCH 6/6] " Shawn O. Pearce
2010-04-15 11:33 ` git fetch over http:// left my repo broken Ilari Liusvaara
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100416100307.0000423f@unknown \
--to=rctay89@gmail.com \
--cc=christian.halstrick@gmail.com \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=ilari.liusvaara@elisanet.fi \
--cc=j6t@kdbg.org \
--cc=jan.sievers@sap.com \
--cc=matthias.sohn@sap.com \
--cc=spearce@spearce.org \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.