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:
commit
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_absolute_path(const char *path);
|
||||||
const char *make_nonrelative_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 */
|
/* Read and unpack a sha1 file into memory, write memory to a sha1 file */
|
||||||
extern int sha1_object_info(const unsigned char *, unsigned long *);
|
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. */
|
/* We allow "recursive" symbolic links. Only within reason, though. */
|
||||||
#define MAXDEPTH 5
|
#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)
|
const char *make_absolute_path(const char *path)
|
||||||
{
|
{
|
||||||
static char bufs[2][PATH_MAX + 1], *buf = bufs[0], *next_buf = bufs[1];
|
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();
|
work_tree = get_git_work_tree();
|
||||||
git_dir = get_git_dir();
|
git_dir = get_git_dir();
|
||||||
if (!is_absolute_path(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))
|
if (!work_tree || chdir(work_tree))
|
||||||
die("This operation must be run in a work tree");
|
die("This operation must be run in a work tree");
|
||||||
|
set_git_dir(make_relative_path(git_dir, work_tree));
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user