mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
Merge branch 'nd/maint-clone-gitdir'
* nd/maint-clone-gitdir: clone: allow to clone from .git file read_gitfile_gently(): rename misnamed function to read_gitfile()
This commit is contained in:
commit
2730f55527
|
@ -113,9 +113,26 @@ static char *get_repo_path(const char *repo, int *is_bundle)
|
||||||
for (i = 0; i < ARRAY_SIZE(suffix); i++) {
|
for (i = 0; i < ARRAY_SIZE(suffix); i++) {
|
||||||
const char *path;
|
const char *path;
|
||||||
path = mkpath("%s%s", repo, suffix[i]);
|
path = mkpath("%s%s", repo, suffix[i]);
|
||||||
if (is_directory(path)) {
|
if (stat(path, &st))
|
||||||
|
continue;
|
||||||
|
if (S_ISDIR(st.st_mode)) {
|
||||||
*is_bundle = 0;
|
*is_bundle = 0;
|
||||||
return xstrdup(absolute_path(path));
|
return xstrdup(absolute_path(path));
|
||||||
|
} else if (S_ISREG(st.st_mode) && st.st_size > 8) {
|
||||||
|
/* Is it a "gitfile"? */
|
||||||
|
char signature[8];
|
||||||
|
int len, fd = open(path, O_RDONLY);
|
||||||
|
if (fd < 0)
|
||||||
|
continue;
|
||||||
|
len = read_in_full(fd, signature, 8);
|
||||||
|
close(fd);
|
||||||
|
if (len != 8 || strncmp(signature, "gitdir: ", 8))
|
||||||
|
continue;
|
||||||
|
path = read_gitfile(path);
|
||||||
|
if (path) {
|
||||||
|
*is_bundle = 0;
|
||||||
|
return xstrdup(absolute_path(path));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -347,7 +347,7 @@ static void separate_git_dir(const char *git_dir)
|
||||||
const char *src;
|
const char *src;
|
||||||
|
|
||||||
if (S_ISREG(st.st_mode))
|
if (S_ISREG(st.st_mode))
|
||||||
src = read_gitfile_gently(git_link);
|
src = read_gitfile(git_link);
|
||||||
else if (S_ISDIR(st.st_mode))
|
else if (S_ISDIR(st.st_mode))
|
||||||
src = git_link;
|
src = git_link;
|
||||||
else
|
else
|
||||||
|
|
2
cache.h
2
cache.h
|
@ -438,7 +438,7 @@ extern int set_git_dir(const char *path);
|
||||||
extern const char *get_git_namespace(void);
|
extern const char *get_git_namespace(void);
|
||||||
extern const char *strip_namespace(const char *namespaced_ref);
|
extern const char *strip_namespace(const char *namespaced_ref);
|
||||||
extern const char *get_git_work_tree(void);
|
extern const char *get_git_work_tree(void);
|
||||||
extern const char *read_gitfile_gently(const char *path);
|
extern const char *read_gitfile(const char *path);
|
||||||
extern void set_git_work_tree(const char *tree);
|
extern void set_git_work_tree(const char *tree);
|
||||||
|
|
||||||
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
||||||
|
|
|
@ -117,7 +117,7 @@ static void setup_git_env(void)
|
||||||
git_dir = getenv(GIT_DIR_ENVIRONMENT);
|
git_dir = getenv(GIT_DIR_ENVIRONMENT);
|
||||||
git_dir = git_dir ? xstrdup(git_dir) : NULL;
|
git_dir = git_dir ? xstrdup(git_dir) : NULL;
|
||||||
if (!git_dir) {
|
if (!git_dir) {
|
||||||
git_dir = read_gitfile_gently(DEFAULT_GIT_DIR_ENVIRONMENT);
|
git_dir = read_gitfile(DEFAULT_GIT_DIR_ENVIRONMENT);
|
||||||
git_dir = git_dir ? xstrdup(git_dir) : NULL;
|
git_dir = git_dir ? xstrdup(git_dir) : NULL;
|
||||||
}
|
}
|
||||||
if (!git_dir)
|
if (!git_dir)
|
||||||
|
|
2
path.c
2
path.c
|
@ -139,7 +139,7 @@ char *git_path_submodule(const char *path, const char *fmt, ...)
|
||||||
strbuf_addch(&buf, '/');
|
strbuf_addch(&buf, '/');
|
||||||
strbuf_addstr(&buf, ".git");
|
strbuf_addstr(&buf, ".git");
|
||||||
|
|
||||||
git_dir = read_gitfile_gently(buf.buf);
|
git_dir = read_gitfile(buf.buf);
|
||||||
if (git_dir) {
|
if (git_dir) {
|
||||||
strbuf_reset(&buf);
|
strbuf_reset(&buf);
|
||||||
strbuf_addstr(&buf, git_dir);
|
strbuf_addstr(&buf, git_dir);
|
||||||
|
|
2
refs.c
2
refs.c
|
@ -451,7 +451,7 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *re
|
||||||
memcpy(gitdir + len, "/.git", 6);
|
memcpy(gitdir + len, "/.git", 6);
|
||||||
len += 5;
|
len += 5;
|
||||||
|
|
||||||
tmp = read_gitfile_gently(gitdir);
|
tmp = read_gitfile(gitdir);
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
free(gitdir);
|
free(gitdir);
|
||||||
len = strlen(tmp);
|
len = strlen(tmp);
|
||||||
|
|
6
setup.c
6
setup.c
|
@ -379,7 +379,7 @@ static int check_repository_format_gently(const char *gitdir, int *nongit_ok)
|
||||||
* Try to read the location of the git directory from the .git file,
|
* Try to read the location of the git directory from the .git file,
|
||||||
* return path to git directory if found.
|
* return path to git directory if found.
|
||||||
*/
|
*/
|
||||||
const char *read_gitfile_gently(const char *path)
|
const char *read_gitfile(const char *path)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
char *dir;
|
char *dir;
|
||||||
|
@ -441,7 +441,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
|
||||||
if (PATH_MAX - 40 < strlen(gitdirenv))
|
if (PATH_MAX - 40 < strlen(gitdirenv))
|
||||||
die("'$%s' too big", GIT_DIR_ENVIRONMENT);
|
die("'$%s' too big", GIT_DIR_ENVIRONMENT);
|
||||||
|
|
||||||
gitfile = (char*)read_gitfile_gently(gitdirenv);
|
gitfile = (char*)read_gitfile(gitdirenv);
|
||||||
if (gitfile) {
|
if (gitfile) {
|
||||||
gitfile = xstrdup(gitfile);
|
gitfile = xstrdup(gitfile);
|
||||||
gitdirenv = gitfile;
|
gitdirenv = gitfile;
|
||||||
|
@ -665,7 +665,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)
|
||||||
if (one_filesystem)
|
if (one_filesystem)
|
||||||
current_device = get_device_or_die(".", NULL);
|
current_device = get_device_or_die(".", NULL);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
gitfile = (char*)read_gitfile_gently(DEFAULT_GIT_DIR_ENVIRONMENT);
|
gitfile = (char*)read_gitfile(DEFAULT_GIT_DIR_ENVIRONMENT);
|
||||||
if (gitfile)
|
if (gitfile)
|
||||||
gitdirenv = gitfile = xstrdup(gitfile);
|
gitdirenv = gitfile = xstrdup(gitfile);
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -32,7 +32,7 @@ static int add_submodule_odb(const char *path)
|
||||||
const char *git_dir;
|
const char *git_dir;
|
||||||
|
|
||||||
strbuf_addf(&objects_directory, "%s/.git", path);
|
strbuf_addf(&objects_directory, "%s/.git", path);
|
||||||
git_dir = read_gitfile_gently(objects_directory.buf);
|
git_dir = read_gitfile(objects_directory.buf);
|
||||||
if (git_dir) {
|
if (git_dir) {
|
||||||
strbuf_reset(&objects_directory);
|
strbuf_reset(&objects_directory);
|
||||||
strbuf_addstr(&objects_directory, git_dir);
|
strbuf_addstr(&objects_directory, git_dir);
|
||||||
|
@ -479,7 +479,7 @@ int fetch_populated_submodules(int num_options, const char **options,
|
||||||
strbuf_addf(&submodule_path, "%s/%s", work_tree, ce->name);
|
strbuf_addf(&submodule_path, "%s/%s", work_tree, ce->name);
|
||||||
strbuf_addf(&submodule_git_dir, "%s/.git", submodule_path.buf);
|
strbuf_addf(&submodule_git_dir, "%s/.git", submodule_path.buf);
|
||||||
strbuf_addf(&submodule_prefix, "%s%s/", prefix, ce->name);
|
strbuf_addf(&submodule_prefix, "%s%s/", prefix, ce->name);
|
||||||
git_dir = read_gitfile_gently(submodule_git_dir.buf);
|
git_dir = read_gitfile(submodule_git_dir.buf);
|
||||||
if (!git_dir)
|
if (!git_dir)
|
||||||
git_dir = submodule_git_dir.buf;
|
git_dir = submodule_git_dir.buf;
|
||||||
if (is_directory(git_dir)) {
|
if (is_directory(git_dir)) {
|
||||||
|
@ -517,7 +517,7 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
|
||||||
const char *git_dir;
|
const char *git_dir;
|
||||||
|
|
||||||
strbuf_addf(&buf, "%s/.git", path);
|
strbuf_addf(&buf, "%s/.git", path);
|
||||||
git_dir = read_gitfile_gently(buf.buf);
|
git_dir = read_gitfile(buf.buf);
|
||||||
if (!git_dir)
|
if (!git_dir)
|
||||||
git_dir = buf.buf;
|
git_dir = buf.buf;
|
||||||
if (!is_directory(git_dir)) {
|
if (!is_directory(git_dir)) {
|
||||||
|
|
|
@ -202,6 +202,10 @@ test_expect_success 'clone separate gitdir: output' '
|
||||||
test_cmp expected dst/.git
|
test_cmp expected dst/.git
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'clone from .git file' '
|
||||||
|
git clone dst/.git dst2
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'clone separate gitdir where target already exists' '
|
test_expect_success 'clone separate gitdir where target already exists' '
|
||||||
rm -rf dst &&
|
rm -rf dst &&
|
||||||
test_must_fail git clone --separate-git-dir realgitdir src dst
|
test_must_fail git clone --separate-git-dir realgitdir src dst
|
||||||
|
|
Loading…
Reference in a new issue