Merge branch 'nd/maint-clone-gitdir' into maint
* 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
406c1c4dd4
@ -101,9 +101,26 @@ static char *get_repo_path(const char *repo, int *is_bundle)
|
||||
for (i = 0; i < ARRAY_SIZE(suffix); i++) {
|
||||
const char *path;
|
||||
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;
|
||||
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;
|
||||
|
||||
if (S_ISREG(st.st_mode))
|
||||
src = read_gitfile_gently(git_link);
|
||||
src = read_gitfile(git_link);
|
||||
else if (S_ISDIR(st.st_mode))
|
||||
src = git_link;
|
||||
else
|
||||
|
2
cache.h
2
cache.h
@ -434,7 +434,7 @@ extern char *get_index_file(void);
|
||||
extern char *get_graft_file(void);
|
||||
extern int set_git_dir(const char *path);
|
||||
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);
|
||||
|
||||
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
||||
|
@ -91,7 +91,7 @@ static void setup_git_env(void)
|
||||
git_dir = getenv(GIT_DIR_ENVIRONMENT);
|
||||
git_dir = git_dir ? xstrdup(git_dir) : NULL;
|
||||
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;
|
||||
}
|
||||
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_addstr(&buf, ".git");
|
||||
|
||||
git_dir = read_gitfile_gently(buf.buf);
|
||||
git_dir = read_gitfile(buf.buf);
|
||||
if (git_dir) {
|
||||
strbuf_reset(&buf);
|
||||
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);
|
||||
len += 5;
|
||||
|
||||
tmp = read_gitfile_gently(gitdir);
|
||||
tmp = read_gitfile(gitdir);
|
||||
if (tmp) {
|
||||
free(gitdir);
|
||||
len = strlen(tmp);
|
||||
|
6
setup.c
6
setup.c
@ -375,7 +375,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,
|
||||
* 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 *dir;
|
||||
@ -437,7 +437,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
|
||||
if (PATH_MAX - 40 < strlen(gitdirenv))
|
||||
die("'$%s' too big", GIT_DIR_ENVIRONMENT);
|
||||
|
||||
gitfile = (char*)read_gitfile_gently(gitdirenv);
|
||||
gitfile = (char*)read_gitfile(gitdirenv);
|
||||
if (gitfile) {
|
||||
gitfile = xstrdup(gitfile);
|
||||
gitdirenv = gitfile;
|
||||
@ -661,7 +661,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok)
|
||||
if (one_filesystem)
|
||||
current_device = get_device_or_die(".", NULL);
|
||||
for (;;) {
|
||||
gitfile = (char*)read_gitfile_gently(DEFAULT_GIT_DIR_ENVIRONMENT);
|
||||
gitfile = (char*)read_gitfile(DEFAULT_GIT_DIR_ENVIRONMENT);
|
||||
if (gitfile)
|
||||
gitdirenv = gitfile = xstrdup(gitfile);
|
||||
else {
|
||||
|
@ -32,7 +32,7 @@ static int add_submodule_odb(const char *path)
|
||||
const char *git_dir;
|
||||
|
||||
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) {
|
||||
strbuf_reset(&objects_directory);
|
||||
strbuf_addstr(&objects_directory, git_dir);
|
||||
@ -483,7 +483,7 @@ int fetch_populated_submodules(int num_options, const char **options,
|
||||
strbuf_addf(&submodule_path, "%s/%s", work_tree, ce->name);
|
||||
strbuf_addf(&submodule_git_dir, "%s/.git", submodule_path.buf);
|
||||
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)
|
||||
git_dir = submodule_git_dir.buf;
|
||||
if (is_directory(git_dir)) {
|
||||
@ -521,7 +521,7 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
|
||||
const char *git_dir;
|
||||
|
||||
strbuf_addf(&buf, "%s/.git", path);
|
||||
git_dir = read_gitfile_gently(buf.buf);
|
||||
git_dir = read_gitfile(buf.buf);
|
||||
if (!git_dir)
|
||||
git_dir = buf.buf;
|
||||
if (!is_directory(git_dir)) {
|
||||
|
@ -202,6 +202,10 @@ test_expect_success 'clone separate gitdir: output' '
|
||||
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' '
|
||||
rm -rf dst &&
|
||||
test_must_fail git clone --separate-git-dir realgitdir src dst
|
||||
|
Loading…
Reference in New Issue
Block a user