Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15

Re: [PATCH] ls-tree: handle trailing slashes in the pathspec properly.

From: Linus Torvalds <torvalds@osdl.org>
Date: 2016-06-15 22:41:59

Possibly related (same subject, not in this thread)


On Tue, 31 May 2005, Junio C Hamano wrote:
I take it to mean that you took my other patch for diffcore-pathspec.
No, I did my own. Rather than add more code to handle '/' as a special 
case, I just removed it all, and fixed the compare logic.
Here is a fixed ls-tree, with a couple of new tests in an
existing test script, to catch this bug.
You seem to think that '/' at the end is a special case, and it really 
shouldn't be. It should just fall out as a natural special case of a 
zero-sized name (which is, btw, the same natural special case that the 
path of "" should have in &root_dir).

For some reason your ls-tree.c logic seems to think that zero-sized names
means "root entry", when the _natural_ thing to do is to pass in the "base
directory", and then a zero-sized name is that base.

IOW, it would make much more sense to have

	list_one(struct tree_entry_list *tree, const char *name)
	{
		const char *slash = strchr(name, '/');
		const char *next;
		int len;

		for (;;) {
			if (!slash) {
				len = strlen(name);
				next = NULL;
			} else {
				len = slash - name;
				next = slash+1;
			}
			newtree = tree;
			if (len)
				newtree = lookup(tree, name, len);
			if (!next)
				break;
			tree = newtree;
			name = next;
		}

		/* Ok, "newtree" is the last component */
		show_entry(newtree);
	}

and then call it with

	list_one(&root_entry, full_path)

and notice how the cases of an empty path "" and "xxx//yy" and "xx/"  
just fall out from the exact same logic - a zero-sized name is the same as
the directory it is in. No special cases for slashes or empty names.

		Linus
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help