From 371599576a82b43ab30fe66feadcfb3045e649ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 28 Jun 2012 09:33:08 +0200 Subject: [PATCH] indexer: don't use '/objects/pack/' unconditionally Not everyone who indexes a packfile wants to put it in the standard git repository location. --- examples/network/Makefile | 2 +- examples/network/index-pack.c | 2 +- include/git2/indexer.h | 4 ++-- src/fetch.c | 9 +++++++-- src/indexer.c | 2 +- src/transports/http.c | 7 ++++++- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/examples/network/Makefile b/examples/network/Makefile index 298b1dc86..9afd49e5d 100644 --- a/examples/network/Makefile +++ b/examples/network/Makefile @@ -2,7 +2,7 @@ default: all CC = gcc CFLAGS += -g -CFLAGS += -I../../include -L../../build -lgit2 -lpthread +CFLAGS += -I../../include -L../../build -L../.. -lgit2 -lpthread OBJECTS = \ git2.o \ diff --git a/examples/network/index-pack.c b/examples/network/index-pack.c index 5824fc555..ef5a35957 100644 --- a/examples/network/index-pack.c +++ b/examples/network/index-pack.c @@ -25,7 +25,7 @@ int index_pack(git_repository *repo, int argc, char **argv) return EXIT_FAILURE; } - if (git_indexer_stream_new(&idx, ".git") < 0) { + if (git_indexer_stream_new(&idx, ".") < 0) { puts("bad idx"); return -1; } diff --git a/include/git2/indexer.h b/include/git2/indexer.h index 626377701..d300ba01a 100644 --- a/include/git2/indexer.h +++ b/include/git2/indexer.h @@ -29,9 +29,9 @@ typedef struct git_indexer_stream git_indexer_stream; * Create a new streaming indexer instance * * @param out where to store the indexer instance - * @param path to the gitdir (metadata directory) + * @param path to the directory where the packfile should be stored */ -GIT_EXTERN(int) git_indexer_stream_new(git_indexer_stream **out, const char *gitdir); +GIT_EXTERN(int) git_indexer_stream_new(git_indexer_stream **out, const char *path); /** * Add data to the indexer diff --git a/src/fetch.c b/src/fetch.c index 96b263faa..603284842 100644 --- a/src/fetch.c +++ b/src/fetch.c @@ -118,7 +118,8 @@ int git_fetch__download_pack( int recvd; char buff[1024]; gitno_buffer buf; - git_indexer_stream *idx; + git_buf path = GIT_BUF_INIT; + git_indexer_stream *idx = NULL; gitno_buffer_setup(t, &buf, buff, sizeof(buff)); @@ -127,9 +128,12 @@ int git_fetch__download_pack( return -1; } - if (git_indexer_stream_new(&idx, git_repository_path(repo)) < 0) + if (git_buf_joinpath(&path, git_repository_path(repo), "objects/pack") < 0) return -1; + if (git_indexer_stream_new(&idx, git_buf_cstr(&path)) < 0) + goto on_error; + memset(stats, 0, sizeof(git_indexer_stats)); if (git_indexer_stream_add(idx, buffered, buffered_size, stats) < 0) goto on_error; @@ -154,6 +158,7 @@ int git_fetch__download_pack( return 0; on_error: + git_buf_free(&path); git_indexer_stream_free(idx); return -1; } diff --git a/src/indexer.c b/src/indexer.c index 1b0a20321..b4312e15a 100644 --- a/src/indexer.c +++ b/src/indexer.c @@ -142,7 +142,7 @@ int git_indexer_stream_new(git_indexer_stream **out, const char *prefix) { git_indexer_stream *idx; git_buf path = GIT_BUF_INIT; - static const char suff[] = "/objects/pack/pack-received"; + static const char suff[] = "/pack"; int error; idx = git__calloc(1, sizeof(git_indexer_stream)); diff --git a/src/transports/http.c b/src/transports/http.c index 4139a2fa6..f25d639f3 100644 --- a/src/transports/http.c +++ b/src/transports/http.c @@ -545,6 +545,7 @@ static int http_download_pack(git_transport *transport, git_repository *repo, gi http_parser_settings settings; char buffer[1024]; gitno_buffer buf; + git_buf path = GIT_BUF_INIT; git_indexer_stream *idx = NULL; download_pack_cbdata data; @@ -555,7 +556,10 @@ static int http_download_pack(git_transport *transport, git_repository *repo, gi return -1; } - if (git_indexer_stream_new(&idx, git_repository_path(repo)) < 0) + if (git_buf_joinpath(&path, git_repository_path(repo), "objects/pack") < 0) + return -1; + + if (git_indexer_stream_new(&idx, git_buf_cstr(&path)) < 0) return -1; /* @@ -600,6 +604,7 @@ static int http_download_pack(git_transport *transport, git_repository *repo, gi on_error: git_indexer_stream_free(idx); + git_buf_free(&path); return -1; }