commit 56d0a75325a6ada09ad4f1c586f7fde7971b52f6 from: Stefan Sperling date: Wed Jan 20 21:07:46 2021 UTC let 'got clone' write gitconfig directives that match the generated got.conf commit - 1fddf795d370eab80e6b2a3e502a6e7e89c9e963 commit + 56d0a75325a6ada09ad4f1c586f7fde7971b52f6 blob - 588f144e15210cef646e4d3b143f8cb74e7e5abe blob + 47e8801b98449d0d980a504de018d37c45183fc7 --- got/got.c +++ got/got.c @@ -1277,7 +1277,7 @@ create_gitconfig(const char *git_url, const char *defa char *gitconfig = NULL; FILE *gitconfig_file = NULL; char *branches = NULL, *refs = NULL; - const char *branchname, *mirror = NULL; + const char *branchname; ssize_t n; /* Create a config file Git can understand. */ @@ -1291,16 +1291,15 @@ create_gitconfig(const char *git_url, const char *defa err = got_error_from_errno2("fopen", gitconfig_path); goto done; } - if (mirror_references) { - mirror = "\tmirror = true\n"; - branches = strdup("\tfetch = +refs/*:refs/*\n"); - if (branches == NULL) { - err = got_error_from_errno("strdup"); - goto done; - } - } else if (fetch_all_branches) { - if (asprintf(&branches, - "\tfetch = +refs/heads/*:refs/remotes/%s/*\n", + if (fetch_all_branches) { + if (mirror_references) { + if (asprintf(&branches, + "\tfetch = refs/heads/*:refs/heads/*\n") == -1) { + err = got_error_from_errno("asprintf"); + goto done; + } + } else if (asprintf(&branches, + "\tfetch = refs/heads/*:refs/remotes/%s/*\n", GOT_FETCH_DEFAULT_REMOTE_NAME) == -1) { err = got_error_from_errno("asprintf"); goto done; @@ -1312,8 +1311,16 @@ create_gitconfig(const char *git_url, const char *defa branchname = pe->path; if (strncmp(branchname, "refs/heads/", 11) == 0) branchname += 11; - if (asprintf(&s, - "%s\tfetch = +refs/heads/%s:refs/remotes/%s/%s\n", + if (mirror_references) { + if (asprintf(&s, + "%s\tfetch = refs/heads/%s:refs/heads/%s\n", + branches ? branches : "", + branchname, branchname) == -1) { + err = got_error_from_errno("asprintf"); + goto done; + } + } else if (asprintf(&s, + "%s\tfetch = refs/heads/%s:refs/remotes/%s/%s\n", branches ? branches : "", branchname, GOT_FETCH_DEFAULT_REMOTE_NAME, branchname) == -1) { @@ -1334,23 +1341,37 @@ create_gitconfig(const char *git_url, const char *defa branchname += 11; } else branchname = "*"; /* fall back to all branches */ - if (asprintf(&branches, - "\tfetch = +refs/heads/%s:refs/remotes/%s/%s\n", + if (mirror_references) { + if (asprintf(&branches, + "\tfetch = refs/heads/%s:refs/heads/%s\n", + branchname, branchname) == -1) { + err = got_error_from_errno("asprintf"); + goto done; + } + } else if (asprintf(&branches, + "\tfetch = refs/heads/%s:refs/remotes/%s/%s\n", branchname, GOT_FETCH_DEFAULT_REMOTE_NAME, branchname) == -1) { err = got_error_from_errno("asprintf"); goto done; } } - if (!mirror_references && !TAILQ_EMPTY(wanted_refs)) { + if (!TAILQ_EMPTY(wanted_refs)) { struct got_pathlist_entry *pe; TAILQ_FOREACH(pe, wanted_refs, entry) { char *s; const char *refname = pe->path; if (strncmp(refname, "refs/", 5) == 0) refname += 5; - if (asprintf(&s, - "%s\tfetch = +refs/%s:refs/remotes/%s/%s\n", + if (mirror_references) { + if (asprintf(&s, + "%s\tfetch = refs/%s:refs/%s\n", + refs ? refs : "", refname, refname) == -1) { + err = got_error_from_errno("asprintf"); + goto done; + } + } else if (asprintf(&s, + "%s\tfetch = refs/%s:refs/remotes/%s/%s\n", refs ? refs : "", refname, GOT_FETCH_DEFAULT_REMOTE_NAME, refname) == -1) { @@ -1367,9 +1388,9 @@ create_gitconfig(const char *git_url, const char *defa "\turl = %s\n" "%s" "%s" - "%s", + "\tfetch = refs/tags/*:refs/tags/*\n", GOT_FETCH_DEFAULT_REMOTE_NAME, git_url, branches ? branches : "", - refs ? refs : "", mirror ? mirror : "") == -1) { + refs ? refs : "") == -1) { err = got_error_from_errno("asprintf"); goto done; } blob - 44c5e030d3c0d68974cecd35b85f6edabc096ee3 blob + 0e24ae3c91470f97788ef2e7a418a85ac613d339 --- regress/cmdline/clone.sh +++ regress/cmdline/clone.sh @@ -114,7 +114,8 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/heads/master:refs/remotes/origin/master + fetch = refs/heads/master:refs/remotes/origin/master + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -214,7 +215,8 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/heads/foo:refs/remotes/origin/foo + fetch = refs/heads/foo:refs/remotes/origin/foo + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -290,7 +292,8 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/heads/*:refs/remotes/origin/* + fetch = refs/heads/*:refs/remotes/origin/* + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -362,8 +365,8 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/*:refs/* - mirror = true + fetch = refs/heads/master:refs/heads/master + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -435,8 +438,8 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/*:refs/* - mirror = true + fetch = refs/heads/*:refs/heads/* + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -512,8 +515,9 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/heads/master:refs/remotes/origin/master - fetch = +refs/hoo:refs/remotes/origin/hoo + fetch = refs/heads/master:refs/remotes/origin/master + fetch = refs/hoo:refs/remotes/origin/hoo + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -587,8 +591,9 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/heads/foo:refs/remotes/origin/foo - fetch = +refs/hoo/boo/zoo:refs/remotes/origin/hoo/boo/zoo + fetch = refs/heads/foo:refs/remotes/origin/foo + fetch = refs/hoo/boo/zoo:refs/remotes/origin/hoo/boo/zoo + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -660,8 +665,9 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/*:refs/* - mirror = true + fetch = refs/heads/master:refs/heads/master + fetch = refs/hoo:refs/hoo + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?" @@ -731,8 +737,9 @@ EOF [remote "origin"] url = ssh://127.0.0.1$testroot/repo - fetch = +refs/heads/foo:refs/remotes/origin/foo - fetch = +refs/heads/bar:refs/remotes/origin/bar + fetch = refs/heads/foo:refs/remotes/origin/foo + fetch = refs/heads/bar:refs/remotes/origin/bar + fetch = refs/tags/*:refs/tags/* EOF cmp -s $testroot/repo-clone/config $testroot/config.expected ret="$?"