summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Martín Nieto <carlos@cmartin.tk>2011-08-03 22:03:57 +0200
committerVicent Marti <tanoku@gmail.com>2011-08-18 02:34:08 +0200
commit44daec422950e0227a863021b6bf4fb8554b6c9c (patch)
treea5d4fd1811200714072b6c63a83df5a5b7a26afd /src
parentda2902204b12e4ba2ad218590f0826a8b8c1badc (diff)
downloadlibgit2-44daec422950e0227a863021b6bf4fb8554b6c9c.tar.gz
Bind the configuration and remotes to a repository
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 <carlos@cmartin.tk>
Diffstat (limited to 'src')
-rw-r--r--src/config.h2
-rw-r--r--src/fetch.c10
-rw-r--r--src/remote.c1
-rw-r--r--src/remote.h1
-rw-r--r--src/repository.c1
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: