From 8bf476ac31f77ad27646d43a5d498992ddf4c5df Mon Sep 17 00:00:00 2001 From: Graham Dennis Date: Sun, 19 Jan 2014 16:24:58 +1100 Subject: [PATCH] Factor out code to convert local "url" into a path. Previously this code was shared between `local_push` and `local_connect`. --- src/transports/local.c | 48 ++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/src/transports/local.c b/src/transports/local.c index bd756c48a..26ada48e6 100644 --- a/src/transports/local.c +++ b/src/transports/local.c @@ -156,6 +156,24 @@ on_error: return -1; } +static int path_from_url_or_path(git_buf *local_path_out, const char *url_or_path) +{ + int error; + + /* If url_or_path begins with file:// treat it as a URL */ + if (!git__prefixcmp(url_or_path, "file://")) { + if ((error = git_path_fromurl(local_path_out, url_or_path)) < 0) { + return error; + } + } else { /* We assume url_or_path is already a path */ + if ((error = git_buf_sets(local_path_out, url_or_path)) < 0) { + return error; + } + } + + return 0; +} + /* * Try to open the url as a git directory. The direction doesn't * matter in this case because we're calulating the heads ourselves. @@ -181,17 +199,12 @@ static int local_connect( t->direction = direction; t->flags = flags; - /* The repo layer doesn't want the prefix */ - if (!git__prefixcmp(t->url, "file://")) { - if (git_path_fromurl(&buf, t->url) < 0) { - git_buf_free(&buf); - return -1; - } - path = git_buf_cstr(&buf); - - } else { /* We assume transport->url is already a path */ - path = t->url; + /* 'url' may be a url or path; convert to a path */ + if ((error = path_from_url_or_path(&buf, url)) < 0) { + git_buf_free(&buf); + return error; } + path = git_buf_cstr(&buf); error = git_repository_open(&repo, path); @@ -350,17 +363,12 @@ static int local_push( unsigned int i; size_t j; - /* The repo layer doesn't want the prefix */ - if (!git__prefixcmp(push->remote->url, "file://")) { - if (git_path_fromurl(&buf, push->remote->url) < 0) { - git_buf_free(&buf); - return -1; - } - path = git_buf_cstr(&buf); - - } else { /* We assume push->remote->url is already a path */ - path = push->remote->url; + /* 'push->remote->url' may be a url or path; convert to a path */ + if ((error = path_from_url_or_path(&buf, push->remote->url)) < 0) { + git_buf_free(&buf); + return error; } + path = git_buf_cstr(&buf); error = git_repository_open(&remote_repo, path);