git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] Make git_dir a path relative to work_tree in setup_work_tree()

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 19, 2008, 18:24 UTC
Message-ID
<7vod5xuvtj.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<alpine.LNX.1.00.0806182327090.19665@iabervon.org>
Daniel Barkalow <barkalow@iabervon.org> writes:
Show 14 quoted lines
> diff --git a/path.c b/path.c
> index b7c24a2..790d8d4 100644
> --- a/path.c
> +++ b/path.c
> @@ -294,6 +294,23 @@ int adjust_shared_perm(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;

This special case may help the specific caller you have below, but doesn't it make the function do more than it advertises with its name?

Other than that, I think the change is Ok, but as a "performance tweak", it should be backed by some numbers, please?

Show 30 quoted lines
> +	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];
> diff --git a/setup.c b/setup.c
> index d630e37..1643ee4 100644
> --- a/setup.c
> +++ b/setup.c
> @@ -292,7 +292,8 @@ 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));
> +		set_git_dir(make_relative_path(make_absolute_path(git_dir),
> +					       work_tree));
>  	if (!work_tree || chdir(work_tree))
>  		die("This operation must be run in a work tree");
>  	initialized = 1;
> -- 
> 1.5.4.5
Previous: Johannes SchindelinNext: Daniel Barkalow
Message 5 of 7 in “Make git_dir a path relative to work_tree in setup_work_tree()”
  1. Make git_dir a path relative to work_tree in setup_work_tree()Daniel Barkalow, Jun 19, 2008
  2. Johannes SchindelinJun 19, 2008
  3. Daniel BarkalowJun 19, 2008
  4. Johannes SchindelinJun 19, 2008
  5. Junio C HamanoJun 19, 2008
  6. Daniel BarkalowJun 19, 2008
  7. Linus TorvaldsJun 19, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.