Skip to content

Commit

Permalink
Merge branch 'lt/maint-gitdir-relative' into maint
Browse files Browse the repository at this point in the history
* lt/maint-gitdir-relative:
  Make git_dir a path relative to work_tree in setup_work_tree()
  • Loading branch information
Junio C Hamano committed Jun 25, 2008
2 parents 340a6b5 + 044bbbc commit 41cb0fc
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
1 change: 1 addition & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);
Expand Down
17 changes: 17 additions & 0 deletions path.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
3 changes: 2 additions & 1 deletion setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 41cb0fc

Please sign in to comment.