зеркало из https://github.com/microsoft/git.git
Merge branch 'lt/maint-gitdir-relative'
* lt/maint-gitdir-relative: Make git_dir a path relative to work_tree in setup_work_tree()
This commit is contained in:
Коммит
8bcff62baf
1
cache.h
1
cache.h
|
@ -525,6 +525,7 @@ static inline int is_absolute_path(const char *path)
|
|||
}
|
||||
const char *make_absolute_path(const char *path);
|
||||
const char *make_nonrelative_path(const char *path);
|
||||
const char *make_relative_path(const char *abs, const char *base);
|
||||
|
||||
/* Read and unpack a sha1 file into memory, write memory to a sha1 file */
|
||||
extern int sha1_object_info(const unsigned char *, unsigned long *);
|
||||
|
|
17
path.c
17
path.c
|
@ -330,6 +330,23 @@ const char *make_nonrelative_path(const char *path)
|
|||
/* We allow "recursive" symbolic links. Only within reason, though. */
|
||||
#define MAXDEPTH 5
|
||||
|
||||
const char *make_relative_path(const char *abs, const char *base)
|
||||
{
|
||||
static char buf[PATH_MAX + 1];
|
||||
int baselen;
|
||||
if (!base)
|
||||
return abs;
|
||||
baselen = strlen(base);
|
||||
if (prefixcmp(abs, base))
|
||||
return abs;
|
||||
if (abs[baselen] == '/')
|
||||
baselen++;
|
||||
else if (base[baselen - 1] != '/')
|
||||
return abs;
|
||||
strcpy(buf, abs + baselen);
|
||||
return buf;
|
||||
}
|
||||
|
||||
const char *make_absolute_path(const char *path)
|
||||
{
|
||||
static char bufs[2][PATH_MAX + 1], *buf = bufs[0], *next_buf = bufs[1];
|
||||
|
|
3
setup.c
3
setup.c
|
@ -292,9 +292,10 @@ void setup_work_tree(void)
|
|||
work_tree = get_git_work_tree();
|
||||
git_dir = get_git_dir();
|
||||
if (!is_absolute_path(git_dir))
|
||||
set_git_dir(make_absolute_path(git_dir));
|
||||
git_dir = make_absolute_path(git_dir);
|
||||
if (!work_tree || chdir(work_tree))
|
||||
die("This operation must be run in a work tree");
|
||||
set_git_dir(make_relative_path(git_dir, work_tree));
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче