From a0b5f7854c2302105e1029933df5d94a765cb89f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sun, 22 Dec 2013 15:39:54 +0000 Subject: [PATCH] clone: store the realpath when given a relative one A call like git_clone("./foo", "./foo1") writes origin's url as './foo', which makes it unusable, as they're relative to different things. Go with git's behaviour and store the realpath as the url. --- src/clone.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/clone.c b/src/clone.c index b66ba6b4c..b6f8c7e85 100644 --- a/src/clone.c +++ b/src/clone.c @@ -242,6 +242,15 @@ static int create_and_configure_origin( int error; git_remote *origin = NULL; const char *name; + char buf[GIT_PATH_MAX]; + + /* If the path exists and is a dir, the url should be the absolute path */ + if (git_path_root(url) < 0 && git_path_exists(url) && git_path_isdir(url)) { + if (p_realpath(url, buf) == NULL) + return -1; + + url = buf; + } name = options->remote_name ? options->remote_name : "origin"; if ((error = git_remote_create(&origin, repo, name, url)) < 0) @@ -372,7 +381,7 @@ int git_clone( return error; if (!(error = create_and_configure_origin(&origin, repo, url, &options))) { - if (git__prefixcmp(url, "file://")) { + if (git_path_exists(url) && git_path_isdir(url)) { error = git_clone_local_into( repo, origin, &options.checkout_opts, options.checkout_branch, options.signature);