# [PATCH] get_tree_entry: map blank requested entry to tree root

7 messages from 2007-01-09 to 2007-01-10. Participants: Jeff King, Johannes Schindelin, Junio C Hamano.
Thread: https://gitlist.dev/t/6308

## Jeff King, 2007-01-09 16:11

Subject: [PATCH] get_tree_entry: map blank requested entry to tree root
Message-ID: <20070109161147.GA9313@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20070109161147.GA9313%40coredump.intra.peff.net

```
This means that
  git show HEAD:
will now return HEAD^{tree}, which is logically consistent with
  git show HEAD:Documentation

Signed-off-by: Jeff King <peff@peff.net>
---
 tree-walk.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/tree-walk.c b/tree-walk.c
index 22f4550..70f8999 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -199,10 +199,17 @@ int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned ch
 	int retval;
 	void *tree;
 	struct tree_desc t;
+	unsigned char root[20];
 
-	tree = read_object_with_reference(tree_sha1, tree_type, &t.size, NULL);
+	tree = read_object_with_reference(tree_sha1, tree_type, &t.size, root);
 	if (!tree)
 		return -1;
+
+	if (name[0] == '\0') {
+		hashcpy(sha1, root);
+		return 0;
+	}
+
 	t.buf = tree;
 	retval = find_tree_entry(&t, name, sha1, mode);
 	free(tree);
-- 
1.4.4.4.g9612-dirty

```

## Johannes Schindelin, 2007-01-09 16:15

Subject: Re: [PATCH] get_tree_entry: map blank requested entry to tree root
Message-ID: <Pine.LNX.4.63.0701091715040.22628@wbgn013.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.63.0701091715040.22628%40wbgn013.biozentrum.uni-wuerzburg.de
In-Reply-To: <20070109161147.GA9313@coredump.intra.peff.net>

```
Hi,

On Tue, 9 Jan 2007, Jeff King wrote:

> This means that
>   git show HEAD:
> will now return HEAD^{tree}, which is logically consistent with
>   git show HEAD:Documentation

Good idea!

Ciao,
Dscho

```

## Junio C Hamano, 2007-01-09 23:48

Subject: Re: [PATCH] get_tree_entry: map blank requested entry to tree root
Message-ID: <7vk5zviwxa.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vk5zviwxa.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20070109161147.GA9313@coredump.intra.peff.net>

```
Makes sense, although I somewhat worry about changing the
behaviour and potentially breaking the expectation of callers
of get_tree_entry() other than "git show".

```

## Jeff King, 2007-01-10 00:46

Subject: Re: [PATCH] get_tree_entry: map blank requested entry to tree root
Message-ID: <20070110004633.GA14345@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20070110004633.GA14345%40coredump.intra.peff.net
In-Reply-To: <7vk5zviwxa.fsf@assigned-by-dhcp.cox.net>

```
On Tue, Jan 09, 2007 at 03:48:33PM -0800, Junio C Hamano wrote:

> Makes sense, although I somewhat worry about changing the
> behaviour and potentially breaking the expectation of callers
> of get_tree_entry() other than "git show".

Previously, trying to get an empty name would always return -1. Most of
the users besides sha1_name are getting the paths by enumerating the
index or an existing tree, so they will never be blank. The exceptions
are:
 - git-blame ''; this fails in both the root and a subdir (though with
   different errors); behavior is unchanged with my patch
 - git-archive feeds the 'prefix' variable to get_tree_entry; it works
   fine in the root with or without the patch. I seem to be getting an
   error, with or without my patch, when doing a git-archive from a
   subdirectory:
     $ git-archive --format=tar origin >/dev/null
     $ cd Documentation
     $ git-archive --format=tar origin >/dev/null
     fatal: cannot read c87c61af00c6d2cd7212240e260809000000aaab
   but I haven't been able to track it down further. It's clearly
   unrelated to my patch, though.

The main difference is that looking up a ref through sha1_name used to
fail to match 'HEAD:'; now it does. So if you were trying to match a
file 'HEAD:' without using '--', you're out of luck.

-Peff

```

## Junio C Hamano, 2007-01-10 00:57

Subject: Re: [PATCH] get_tree_entry: map blank requested entry to tree root
Message-ID: <7vac0rhf6g.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vac0rhf6g.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20070110004633.GA14345@coredump.intra.peff.net>

```
Jeff King <peff@peff.net> writes:

>  - git-archive feeds the 'prefix' variable to get_tree_entry; it works
>    fine in the root with or without the patch. I seem to be getting an
>    error, with or without my patch, when doing a git-archive from a
>    subdirectory:
>      $ git-archive --format=tar origin >/dev/null
>      $ cd Documentation
>      $ git-archive --format=tar origin >/dev/null
>      fatal: cannot read c87c61af00c6d2cd7212240e260809000000aaab
>    but I haven't been able to track it down further. It's clearly
>    unrelated to my patch, though.

I've noticed this while looking at your patch and fixed it in my
tree already.

```

## Jeff King, 2007-01-10 00:57

Subject: Re: [PATCH] get_tree_entry: map blank requested entry to tree root
Message-ID: <20070110005750.GA18242@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20070110005750.GA18242%40coredump.intra.peff.net
In-Reply-To: <7vac0rhf6g.fsf@assigned-by-dhcp.cox.net>

```
On Tue, Jan 09, 2007 at 04:57:11PM -0800, Junio C Hamano wrote:

> I've noticed this while looking at your patch and fixed it in my
> tree already.

Thanks, I will stop looking, then. :)

-Peff

```

## Junio C Hamano, 2007-01-10 01:04

Subject: Re: [PATCH] get_tree_entry: map blank requested entry to tree root
Message-ID: <7v64bfheuk.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7v64bfheuk.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20070110005750.GA18242@coredump.intra.peff.net>

```
Jeff King <peff@peff.net> writes:

> On Tue, Jan 09, 2007 at 04:57:11PM -0800, Junio C Hamano wrote:
>
>> I've noticed this while looking at your patch and fixed it in my
>> tree already.
>
> Thanks, I will stop looking, then. :)

-- >8 --
[PATCH] builtin-archive: do not free a tree held by the object layer.

Found by running "git archive --format=tar HEAD" in Documentation/
directory.

It's surprising that nobody has noticed this from the beginning...

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 builtin-archive.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/builtin-archive.c b/builtin-archive.c
index 391cf43..32737d3 100644
--- a/builtin-archive.c
+++ b/builtin-archive.c
@@ -137,7 +137,6 @@ void parse_treeish_arg(const char **argv, struct archiver_args *ar_args,
 		if (err || !S_ISDIR(mode))
 			die("current working directory is untracked");
 
-		free(tree);
 		tree = parse_tree_indirect(tree_sha1);
 	}
 	ar_args->tree = tree;

```
