{"thread":{"id":"28667","subject":"[PATCH 0/1] transport: Use is_bundle instead of !is_gitfile","startedAt":"2011-10-13T20:26:01Z","lastAt":"2011-10-13T20:26:02Z","messageCount":2,"participants":["Phil Hord"],"isPatch":true,"patchVersion":1,"patchTotal":1},"messages":[{"id":"177592","messageId":"1318537562-18581-1-git-send-email-hordp@cisco.com","threadId":"28667","inReplyTo":null,"subject":"[PATCH 0/1] transport: Use is_bundle instead of !is_gitfile","fromName":"Phil Hord","fromEmail":"hordp@cisco.com","sentAt":"2011-10-13T20:26:01Z","receivedAt":"2011-10-13T20:26:01Z","isPatch":true,"sender":{"key":"phil.hord@gmail.com","avatar":"https://avatars.githubusercontent.com/u/123908?v=4"},"body":"I'm not sure where this patch should go now since I see my\noriginal patchset on both next and pu.  Should I re-roll the\noriginal series with this one merged in, or just submit this\none isolated, as I am doing here?\n\nPardon my newbieness.\n\nPhil Hord (1):\n  transport: Add is_bundle() to detect bundle urls\n\n bundle.c    |   16 ++++++++++++++++\n bundle.h    |    1 +\n transport.c |   10 +---------\n 3 files changed, 18 insertions(+), 9 deletions(-)\n\n-- \n1.7.7.334.g311c9.dirty\n"},{"id":"177593","messageId":"1318537562-18581-2-git-send-email-hordp@cisco.com","threadId":"28667","inReplyTo":"1318537562-18581-1-git-send-email-hordp@cisco.com","subject":"[PATCH 1/1] transport: Add is_bundle() to detect bundle urls","fromName":"Phil Hord","fromEmail":"hordp@cisco.com","sentAt":"2011-10-13T20:26:02Z","receivedAt":"2011-10-13T20:26:02Z","isPatch":true,"sender":{"key":"phil.hord@gmail.com","avatar":"https://avatars.githubusercontent.com/u/123908?v=4"},"body":"Transport decides that any local url which is a file\nmust be a bundle.  This is wrong if the local url is a\ngitfile. Teach transport to verify the file is\nreally a bundle instead of just assuming it is so.\n\nSuggested-by: Junio C Hamano <gitster@pobox.com>\nSigned-off-by: Phil Hord <hordp@cisco.com>\n---\n bundle.c    |   16 ++++++++++++++++\n bundle.h    |    1 +\n transport.c |   10 +---------\n 3 files changed, 18 insertions(+), 9 deletions(-)\n\ndiff --git a/bundle.c b/bundle.c\nindex f82baae..cc0624d 100644\n--- a/bundle.c\n+++ b/bundle.c\n@@ -23,6 +23,22 @@ static void add_to_ref_list(const unsigned char *sha1, const char *name,\n \tlist->nr++;\n }\n \n+int is_bundle(const char *path)\n+{\n+\tchar buffer[100];\n+\tFILE *ffd = fopen(path, \"rb\");\n+\tint ret=1;\n+\n+\tif (!ffd)\n+\t\treturn 0;\n+\n+\tif (!fgets(buffer, sizeof(buffer), ffd) ||\n+\t\t\tstrcmp(buffer, bundle_signature))\n+\t\tret=0;\n+\tfclose(ffd);\n+\treturn ret;\n+}\n+\n /* returns an fd */\n int read_bundle_header(const char *path, struct bundle_header *header)\n {\ndiff --git a/bundle.h b/bundle.h\nindex c5a22c8..35aa0eb 100644\n--- a/bundle.h\n+++ b/bundle.h\n@@ -14,6 +14,7 @@ struct bundle_header {\n \tstruct ref_list references;\n };\n \n+int is_bundle(const char *path);\n int read_bundle_header(const char *path, struct bundle_header *header);\n int create_bundle(struct bundle_header *header, const char *path,\n \t\tint argc, const char **argv);\ndiff --git a/transport.c b/transport.c\nindex 57138d9..c76f5b7 100644\n--- a/transport.c\n+++ b/transport.c\n@@ -881,14 +881,6 @@ static int is_gitfile(const char *url)\n \treturn !prefixcmp(buf, \"gitdir: \");\n }\n \n-static int is_file(const char *url)\n-{\n-\tstruct stat buf;\n-\tif (stat(url, &buf))\n-\t\treturn 0;\n-\treturn S_ISREG(buf.st_mode);\n-}\n-\n static int external_specification_len(const char *url)\n {\n \treturn strchr(url, ':') - url;\n@@ -929,7 +921,7 @@ struct transport *transport_get(struct remote *remote, const char *url)\n \t\tret->fetch = fetch_objs_via_rsync;\n \t\tret->push = rsync_transport_push;\n \t\tret->smart_options = NULL;\n-\t} else if (is_local(url) && is_file(url) && !is_gitfile(url)) {\n+\t} else if (is_local(url) && is_bundle(url)) {\n \t\tstruct bundle_transport_data *data = xcalloc(1, sizeof(*data));\n \t\tret->data = data;\n \t\tret->get_refs_list = get_refs_from_bundle;\n-- \n1.7.7.334.g311c9.dirty\n"}]}