From 44daec422950e0227a863021b6bf4fb8554b6c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 3 Aug 2011 22:03:57 +0200 Subject: [PATCH] Bind the configuration and remotes to a repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configurations when taken from a repository and remotes should be identifiable as coming from a particular repository. This allows us to reduce the amount of variables that the user has to keep track of. Signed-off-by: Carlos Martín Nieto --- src/config.h | 2 ++ src/fetch.c | 10 ++++++---- src/remote.c | 1 + src/remote.h | 1 + src/repository.c | 1 + 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/config.h b/src/config.h index 673887e39..e2f301bf1 100644 --- a/src/config.h +++ b/src/config.h @@ -4,12 +4,14 @@ #include "git2.h" #include "git2/config.h" #include "vector.h" +#include "repository.h" #define GIT_CONFIG_FILENAME ".gitconfig" #define GIT_CONFIG_FILENAME_INREPO "config" struct git_config { git_vector files; + git_repository *repo; }; #endif diff --git a/src/fetch.c b/src/fetch.c index 522625ef0..5dc044065 100644 --- a/src/fetch.c +++ b/src/fetch.c @@ -48,11 +48,12 @@ static int whn_cmp(const void *a, const void *b) * FIXME: we assume that the transport has been connected, enforce * that somehow, we also want to be called from _negotiate */ -int git_fetch_list_want(git_headarray *whn_list, git_repository *repo, git_remote *remote) +int git_fetch_list_want(git_headarray *whn_list, git_remote *remote) { git_vector list; git_headarray refs; git_transport *t = remote->transport; + git_repository *repo = remote->repo; const git_refspec *spec; int error; unsigned int i; @@ -136,13 +137,14 @@ cleanup: * them out. When we get an ACK we hide that commit and continue * traversing until we're done */ -int git_fetch_negotiate(git_headarray *list, git_repository *repo, git_remote *remote) +int git_fetch_negotiate(git_headarray *list, git_remote *remote) { git_revwalk *walk; int error; unsigned int i; git_reference *ref; git_strarray refs; + git_repository *repo = remote->repo; git_oid oid; /* Don't try to negotiate when we don't want anything */ @@ -195,7 +197,7 @@ cleanup: return error; } -int git_fetch_download_pack(git_remote *remote, git_repository *repo) +int git_fetch_download_pack(git_remote *remote) { - return git_transport_download_pack(remote->transport, repo); + return git_transport_download_pack(remote->transport, remote->repo); } diff --git a/src/remote.c b/src/remote.c index 2812f5de6..809bfbb57 100644 --- a/src/remote.c +++ b/src/remote.c @@ -110,6 +110,7 @@ int git_remote_get(git_remote **out, git_config *cfg, const char *name) goto cleanup; } + remote->repo = cfg->repo; remote->url = git__strdup(val); if (remote->url == NULL) { error = GIT_ENOMEM; diff --git a/src/remote.h b/src/remote.h index 129671fd2..b94193c8f 100644 --- a/src/remote.h +++ b/src/remote.h @@ -11,6 +11,7 @@ struct git_remote { struct git_refspec fetch; struct git_refspec push; git_transport *transport; + git_repository *repo; }; #endif diff --git a/src/repository.c b/src/repository.c index cb62d9eb6..c0e99bb24 100644 --- a/src/repository.c +++ b/src/repository.c @@ -317,6 +317,7 @@ int git_repository_config( goto cleanup; } + (*out)->repo = repo; return GIT_SUCCESS; cleanup: