From: Mike Hommey <mh@glandium.org>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>
Subject: [PATCH 4/4] Add support for URLs to git-apply
Date: Sun, 9 Dec 2007 18:05:00 +0100 [thread overview]
Message-ID: <1197219900-19334-4-git-send-email-mh@glandium.org> (raw)
In-Reply-To: <1197219900-19334-3-git-send-email-mh@glandium.org>
Instead of doing several "wget -O - url | git-apply -" in a raw, you now
can just git-apply url1 url2 ...
Signed-off-by: Mike Hommey <mh@glandium.org>
---
Documentation/git-apply.txt | 3 +-
builtin-apply.c | 58 ++++++++++++++++++++++++++++++++++++------
2 files changed, 51 insertions(+), 10 deletions(-)
diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt
index bae3e7b..2d5d725 100644
--- a/Documentation/git-apply.txt
+++ b/Documentation/git-apply.txt
@@ -25,7 +25,8 @@ OPTIONS
-------
<patch>...::
The files to read patch from. '-' can be used to read
- from the standard input.
+ from the standard input. They can also be http, https or
+ ftp URLs.
--stat::
Instead of applying the patch, output diffstat for the
diff --git a/builtin-apply.c b/builtin-apply.c
index 8c8162a..59834f0 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -12,6 +12,9 @@
#include "blob.h"
#include "delta.h"
#include "builtin.h"
+#ifndef NO_CURL
+#include "http.h"
+#endif
/*
* --check turns on checking that the working tree matches the
@@ -182,12 +185,47 @@ static void say_patch_name(FILE *output, const char *pre,
#define CHUNKSIZE (8192)
#define SLOP (16)
-static void read_patch_file(struct strbuf *sb, const char *filename)
+#ifndef NO_CURL
+static int used_http;
+
+static void read_patch_url(struct strbuf *sb, const char *url)
+{
+ struct active_request_slot *slot;
+ struct slot_results results;
+
+ if (! used_http) {
+ http_init();
+ used_http = 1;
+ }
+
+ slot = get_active_slot();
+ slot->results = &results;
+ curl_easy_setopt(slot->curl, CURLOPT_FILE, sb);
+ curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_buffer);
+ curl_easy_setopt(slot->curl, CURLOPT_URL, url);
+ curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, NULL);
+
+ if (start_active_slot(slot)) {
+ run_active_slot(slot);
+ if (results.curl_result != CURLE_OK)
+ die("git-apply: could not open %s", url);
+ }
+}
+#endif
+
+static void read_patch(struct strbuf *sb, const char *filename)
{
int fd;
if (!strcmp(filename, "-")) {
fd = 0;
+#ifndef NO_CURL
+ } else if (!strncmp(filename, "http://", 7) ||
+ !strncmp(filename, "https://", 8) ||
+ !strncmp(filename, "ftp://", 6)) {
+ read_patch_url(sb, filename);
+ return;
+#endif
} else {
fd = open(filename, O_RDONLY);
if (fd < 0)
@@ -199,13 +237,6 @@ static void read_patch_file(struct strbuf *sb, const char *filename)
die("git-apply: read returned %s", strerror(errno));
close(fd);
- /*
- * Make sure that we have some slop in the buffer
- * so that we can do speculative "memcmp" etc, and
- * see to it that it is NUL-filled.
- */
- strbuf_grow(sb, SLOP);
- memset(sb->buf + sb->len, 0, SLOP);
}
static unsigned long linelen(const char *buffer, unsigned long size)
@@ -2726,7 +2757,14 @@ static int apply_patch(const char *filename, int inaccurate_eof)
strbuf_init(&buf, 0);
patch_input_file = filename;
- read_patch_file(&buf, filename);
+ read_patch(&buf, filename);
+ /*
+ * Make sure that we have some slop in the buffer
+ * so that we can do speculative "memcmp" etc, and
+ * see to it that it is NUL-filled.
+ */
+ strbuf_grow(&buf, SLOP);
+ memset(buf.buf + buf.len, 0, SLOP);
offset = 0;
while (offset < buf.len) {
struct patch *patch;
@@ -2926,6 +2964,8 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
set_default_whitespace_mode(whitespace_option);
errs |= apply_patch(arg, inaccurate_eof);
}
+ if (used_http)
+ http_cleanup();
set_default_whitespace_mode(whitespace_option);
if (read_stdin)
errs |= apply_patch("-", inaccurate_eof);
--
1.5.3.7
next prev parent reply other threads:[~2007-12-09 17:05 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-09 17:04 [PATCH 1/4] Cleanup variables in http.[ch] Mike Hommey
2007-12-09 17:04 ` [PATCH 2/4] Use strbuf in http code Mike Hommey
2007-12-09 17:04 ` [PATCH 3/4] Move the file read logic to read_patch_file() in builtin-apply.c Mike Hommey
2007-12-09 17:05 ` Mike Hommey [this message]
2007-12-10 9:06 ` [Replacement PATCH 4/4] Add support for URLs to git-apply Mike Hommey
2007-12-09 18:27 ` [PATCH 3/4] Move the file read logic to read_patch_file() in builtin-apply.c Junio C Hamano
2007-12-09 18:15 ` [PATCH 2/4] Use strbuf in http code Junio C Hamano
2007-12-09 18:24 ` Mike Hommey
2007-12-09 18:36 ` Junio C Hamano
2007-12-09 19:30 ` [Resend PATCH " Mike Hommey
2007-12-11 6:04 ` Junio C Hamano
2007-12-11 6:16 ` Mike Hommey
2007-12-11 6:25 ` [Replacement " Mike Hommey
2007-12-09 17:17 ` [PATCH] git-send-email.perl: Really add angle brackets to In-Reply-To if necessary Mike Hommey
2007-12-09 17:38 ` Mike Hommey
2007-12-09 18:09 ` Junio C Hamano
2007-12-09 18:14 ` Mike Hommey
2007-12-09 18:21 ` David Kastrup
2007-12-09 18:53 ` Randal L. Schwartz
2007-12-09 19:46 ` David Kastrup
2007-12-09 19:51 ` Randal L. Schwartz
2007-12-09 19:58 ` [Resend PATCH] " Mike Hommey
2007-12-09 18:21 ` [PATCH 1/4] Cleanup variables in http.[ch] Junio C Hamano
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=1197219900-19334-4-git-send-email-mh@glandium.org \
--to=mh@glandium.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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).