Browse Source

Merge branch 'lt/maint-gitdir-relative'

* lt/maint-gitdir-relative:
  Make git_dir a path relative to work_tree in setup_work_tree()
maint
Junio C Hamano 17 years ago
parent
commit
8bcff62baf
  1. 1
      cache.h
  2. 17
      path.c
  3. 3
      setup.c

1
cache.h

@ -525,6 +525,7 @@ static inline int is_absolute_path(const char *path) @@ -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

@ -330,6 +330,23 @@ const char *make_nonrelative_path(const char *path) @@ -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

@ -292,9 +292,10 @@ void setup_work_tree(void) @@ -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;
}


Loading…
Cancel
Save