From: Daniel Barkalow <barkalow@iabervon.org>
To: Petr Baudis <pasky@ucw.cz>
Cc: git@vger.kernel.org, Linus Torvalds <torvalds@osdl.org>
Subject: [PATCH 3/4] Pull refs by HTTP
Date: Fri, 13 May 2005 02:57:58 -0400 (EDT) [thread overview]
Message-ID: <Pine.LNX.4.21.0505130256150.30848-100000@iabervon.org> (raw)
In-Reply-To: <Pine.LNX.4.21.0505130245260.30848-100000@iabervon.org>
Adds support for pulling refs by HTTP, and an option for writing the
pulled ref to a file.
Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Index: http-pull.c
===================================================================
--- 90e05f81df7b7fd2c39d252b6f9a2374d4dd0cf5/http-pull.c (mode:100644 sha1:af4e82fdf9c58a15564d40bef85d57e9f6626727)
+++ 4931f2d8b9c2ab83718f6446d5ef3af5fa320b3f/http-pull.c (mode:100644 sha1:6e8dc48ddd0ea1ae89074f6ae0d89c54303895b7)
@@ -7,6 +7,8 @@
#include <errno.h>
#include <stdio.h>
+#include "refs.h"
+
#include "pull.h"
#include <curl/curl.h>
@@ -45,6 +47,23 @@
return size;
}
+struct buffer
+{
+ size_t posn;
+ size_t size;
+ void *buffer;
+};
+
+static size_t fwrite_buffer(void *ptr, size_t eltsize, size_t nmemb,
+ struct buffer *buffer) {
+ size_t size = eltsize * nmemb;
+ if (size > buffer->size - buffer->posn)
+ size = buffer->size - buffer->posn;
+ memcpy(buffer->buffer + buffer->posn, ptr, size);
+ buffer->posn += size;
+ return size;
+}
+
int fetch(unsigned char *sha1)
{
char *hex = sha1_to_hex(sha1);
@@ -93,14 +112,42 @@
unlink(filename);
return error("File %s has bad hash\n", hex);
}
-
pull_say("got %s\n", hex);
return 0;
}
int fetch_ref(char *dir, char *name, unsigned char *sha1)
{
- return -1;
+ char *url, *posn;
+ char hex[42];
+ struct buffer buffer;
+ buffer.size = 41;
+ buffer.posn = 0;
+ buffer.buffer = hex;
+ hex[41] = '\0';
+
+ curl_easy_setopt(curl, CURLOPT_FILE, &buffer);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite_buffer);
+
+ url = xmalloc(strlen(base) + 7 + strlen(dir) + strlen(name));
+ strcpy(url, base);
+ posn = url + strlen(base);
+ strcpy(posn, "refs/");
+ posn += 5;
+ strcpy(posn, dir);
+ posn += strlen(dir);
+ *(posn++) = '/';
+ strcpy(posn, name);
+
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+
+ if (curl_easy_perform(curl))
+ return error("Couldn't get %s for %s/%s\n", url,
+ dir, name);
+
+ hex[40] = '\0';
+ get_sha1_hex(hex, sha1);
+ return 0;
}
int main(int argc, char **argv)
@@ -120,6 +167,10 @@
get_history = 1;
} else if (argv[arg][1] == 'v') {
get_verbosely = 1;
+ } else if (argv[arg][1] == 'w') {
+ char *write_ref = argv[arg + 1];
+ split_ref(&write_ref_dir, &write_ref_name, write_ref);
+ arg++;
}
arg++;
}
next prev parent reply other threads:[~2005-05-13 6:50 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-13 6:49 [PATCH 0/4] Pulling refs files Daniel Barkalow
2005-05-13 6:53 ` [PATCH 1/4] Support for refs directory Daniel Barkalow
2005-05-13 6:56 ` [PATCH 2/4] Generic support for pulling refs Daniel Barkalow
2005-05-13 6:57 ` Daniel Barkalow [this message]
2005-05-13 11:15 ` [PATCH 3/4] Pull refs by HTTP Edgar Toernig
2005-05-13 7:01 ` [PATCH 4/4] Pulling refs by ssh Daniel Barkalow
2005-05-13 18:59 ` H. Peter Anvin
2005-05-15 15:48 ` Daniel Barkalow
2005-05-13 22:19 ` [PATCH 0/4] Pulling refs files Petr Baudis
2005-05-13 23:14 ` Daniel Barkalow
2005-05-13 23:37 ` Petr Baudis
2005-05-15 3:23 ` Daniel Barkalow
2005-05-17 20:14 ` Petr Baudis
2005-05-17 21:20 ` Daniel Barkalow
2005-05-17 21:45 ` Petr Baudis
2005-05-17 22:20 ` Daniel Barkalow
2005-05-18 21:35 ` Petr Baudis
2005-05-19 3:19 ` Daniel Barkalow
2005-05-19 6:52 ` Petr Baudis
2005-05-19 16:00 ` Daniel Barkalow
2005-05-15 5:33 ` Junio C Hamano
2005-05-15 15:40 ` Daniel Barkalow
2005-05-16 7:55 ` 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=Pine.LNX.4.21.0505130256150.30848-100000@iabervon.org \
--to=barkalow@iabervon.org \
--cc=git@vger.kernel.org \
--cc=pasky@ucw.cz \
--cc=torvalds@osdl.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).