From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH 2/2] bundle: keep a copy of bundle file name in the in-core bundle header
Date: Tue, 01 Mar 2016 15:36:26 -0800 [thread overview]
Message-ID: <xmqqr3ft6a9x.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <xmqqvb556abd.fsf@gitster.mtv.corp.google.com> (Junio C. Hamano's message of "Tue, 01 Mar 2016 15:35:34 -0800")
This will be necessary when we start reading from a split bundle
where the header and the thin-pack data live in different files.
The in-core bundle header will read from a file that has the header,
and will record the path to that file. We would find the name of
the file that hosts the thin-pack data from the header, and we would
take that name as relative to the file we read the header from.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
builtin/bundle.c | 5 +++--
bundle.c | 21 +++++++++++----------
bundle.h | 3 ++-
transport.c | 3 ++-
4 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/builtin/bundle.c b/builtin/bundle.c
index 4883a43..e63388d 100644
--- a/builtin/bundle.c
+++ b/builtin/bundle.c
@@ -36,8 +36,9 @@ int cmd_bundle(int argc, const char **argv, const char *prefix)
}
memset(&header, 0, sizeof(header));
- if (strcmp(cmd, "create") && (bundle_fd =
- read_bundle_header(bundle_file, &header)) < 0)
+ header.bundle_file = bundle_file;
+ if (strcmp(cmd, "create") &&
+ (bundle_fd = read_bundle_header(&header)) < 0)
return 1;
if (!strcmp(cmd, "verify")) {
diff --git a/bundle.c b/bundle.c
index 9c5a6f0..efe19e0 100644
--- a/bundle.c
+++ b/bundle.c
@@ -21,8 +21,7 @@ static void add_to_ref_list(const unsigned char *sha1, const char *name,
list->nr++;
}
-static int parse_bundle_header(int fd, struct bundle_header *header,
- const char *report_path)
+static int parse_bundle_header(int fd, struct bundle_header *header, int quiet)
{
struct strbuf buf = STRBUF_INIT;
int status = 0;
@@ -30,9 +29,9 @@ static int parse_bundle_header(int fd, struct bundle_header *header,
/* The bundle header begins with the signature */
if (strbuf_getwholeline_fd(&buf, fd, '\n') ||
strcmp(buf.buf, bundle_signature)) {
- if (report_path)
+ if (!quiet)
error(_("'%s' does not look like a v2 bundle file"),
- report_path);
+ header->bundle_file);
status = -1;
goto abort;
}
@@ -57,7 +56,7 @@ static int parse_bundle_header(int fd, struct bundle_header *header,
if (get_sha1_hex(buf.buf, sha1) ||
(buf.len > 40 && !isspace(buf.buf[40])) ||
(!is_prereq && buf.len <= 40)) {
- if (report_path)
+ if (!quiet)
error(_("unrecognized header: %s%s (%d)"),
(is_prereq ? "-" : ""), buf.buf, (int)buf.len);
status = -1;
@@ -79,13 +78,13 @@ static int parse_bundle_header(int fd, struct bundle_header *header,
return fd;
}
-int read_bundle_header(const char *path, struct bundle_header *header)
+int read_bundle_header(struct bundle_header *header)
{
- int fd = open(path, O_RDONLY);
+ int fd = open(header->bundle_file, O_RDONLY);
if (fd < 0)
- return error(_("could not open '%s'"), path);
- return parse_bundle_header(fd, header, path);
+ return error(_("could not open '%s'"), header->bundle_file);
+ return parse_bundle_header(fd, header, 0);
}
int is_bundle(const char *path, int quiet)
@@ -96,7 +95,7 @@ int is_bundle(const char *path, int quiet)
if (fd < 0)
return 0;
memset(&header, 0, sizeof(header));
- fd = parse_bundle_header(fd, &header, quiet ? NULL : path);
+ fd = parse_bundle_header(fd, &header, quiet);
if (fd >= 0)
close(fd);
return (fd >= 0);
@@ -112,6 +111,8 @@ void release_bundle_header(struct bundle_header *header)
for (i = 0; i < header->references.nr; i++)
free(header->references.list[i].name);
free(header->references.list);
+
+ free((void *)header->bundle_file);
}
static int list_refs(struct ref_list *r, int argc, const char **argv)
diff --git a/bundle.h b/bundle.h
index f7ce23b..cf771df 100644
--- a/bundle.h
+++ b/bundle.h
@@ -10,12 +10,13 @@ struct ref_list {
};
struct bundle_header {
+ const char *bundle_file;
struct ref_list prerequisites;
struct ref_list references;
};
int is_bundle(const char *path, int quiet);
-int read_bundle_header(const char *path, struct bundle_header *header);
+int read_bundle_header(struct bundle_header *header);
int create_bundle(struct bundle_header *header, const char *path,
int argc, const char **argv);
int verify_bundle(struct bundle_header *header, int verbose);
diff --git a/transport.c b/transport.c
index 08e15c5..03ce149 100644
--- a/transport.c
+++ b/transport.c
@@ -81,7 +81,8 @@ static struct ref *get_refs_from_bundle(struct transport *transport, int for_pus
if (data->fd > 0)
close(data->fd);
- data->fd = read_bundle_header(transport->url, &data->header);
+ data->header.bundle_file = xstrdup(transport->url);
+ data->fd = read_bundle_header(&data->header);
if (data->fd < 0)
die ("Could not read bundle '%s'.", transport->url);
for (i = 0; i < data->header.references.nr; i++) {
--
2.8.0-rc0-114-g0b3e5e5
next prev parent reply other threads:[~2016-03-01 23:36 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 23:35 [PATCH 1/2] bundle: plug resource leak Junio C Hamano
2016-03-01 23:36 ` Junio C Hamano [this message]
2016-03-02 9:01 ` [PATCH 2/2] bundle: keep a copy of bundle file name in the in-core bundle header Jeff King
2016-03-02 18:15 ` Junio C Hamano
2016-03-02 20:32 ` [PATCH v2 0/4] "split bundle" preview Junio C Hamano
2016-03-02 20:32 ` [PATCH v2 1/4] bundle doc: 'verify' is not about verifying the bundle Junio C Hamano
2016-03-02 20:32 ` [PATCH v2 2/4] bundle: plug resource leak Junio C Hamano
2016-03-02 20:32 ` [PATCH v2 3/4] bundle: keep a copy of bundle file name in the in-core bundle header Junio C Hamano
2016-03-02 20:49 ` Jeff King
2016-03-02 20:32 ` [PATCH v2 4/4] bundle v3: the beginning Junio C Hamano
2016-03-03 1:36 ` Duy Nguyen
2016-03-03 2:57 ` Junio C Hamano
2016-03-03 5:15 ` Duy Nguyen
2016-05-20 12:39 ` Christian Couder
2016-05-31 12:43 ` Duy Nguyen
2016-05-31 13:18 ` Christian Couder
2016-06-01 13:37 ` Duy Nguyen
2016-06-07 14:49 ` Christian Couder
2016-06-01 14:00 ` Duy Nguyen
2016-06-07 8:46 ` Christian Couder
2016-06-07 8:53 ` Mike Hommey
2016-06-07 10:22 ` Duy Nguyen
2016-06-07 19:23 ` Junio C Hamano
2016-06-07 20:23 ` Jeff King
2016-06-08 10:44 ` Duy Nguyen
2016-06-08 16:19 ` Jeff King
2016-06-09 8:53 ` Duy Nguyen
2016-06-09 17:23 ` Jeff King
2016-06-08 18:05 ` Junio C Hamano
2016-06-08 19:00 ` Jeff King
2016-05-31 22:23 ` Jeff King
2016-05-31 22:31 ` Jeff King
2016-06-07 13:19 ` Christian Couder
2016-06-07 20:35 ` Jeff King
2016-03-02 8:54 ` [PATCH 1/2] bundle: plug resource leak Jeff King
2016-03-02 9:00 ` Junio C Hamano
2016-03-02 9:02 ` Jeff King
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=xmqqr3ft6a9x.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.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.
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).