<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/dir.h, branch v1.6.4</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/git/git.git/
</subtitle>
<id>https://git.shady.money/git/atom?h=v1.6.4</id>
<link rel='self' href='https://git.shady.money/git/atom?h=v1.6.4'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/'/>
<updated>2009-07-09T08:11:28Z</updated>
<entry>
<title>Simplify read_directory[_recursive]() arguments</title>
<updated>2009-07-09T08:11:28Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2009-07-09T02:24:39Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=dba2e2037f40685bffc87d3e7114a02c5bda1eff'/>
<id>urn:sha1:dba2e2037f40685bffc87d3e7114a02c5bda1eff</id>
<content type='text'>
Stop the insanity with separate 'path' and 'base' arguments that must
match.  We don't need that crazy interface any more, since we cleaned up
handling of 'path' in commit da4b3e8c28b1dc2b856d2555ac7bb47ab712598c.

Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Add 'fill_directory()' helper function for directory traversal</title>
<updated>2009-07-09T08:11:26Z</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2009-05-14T20:22:36Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=1d8842d921cc2695f155f4a10904eeffad085c77'/>
<id>urn:sha1:1d8842d921cc2695f155f4a10904eeffad085c77</id>
<content type='text'>
Most of the users of "read_directory()" actually want a much simpler
interface than the whole complex (but rather powerful) one.

In fact 'git add' had already largely abstracted out the core interface
issues into a private "fill_directory()" function that was largely
applicable almost as-is to a number of callers.  Yes, 'git add' wants to
do some extra work of its own, specific to the add semantics, but we can
easily split that out, and use the core as a generic function.

This function does exactly that, and now that much simplified
'fill_directory()' function can be shared with a number of callers,
while also ensuring that the rather more complex calling conventions of
read_directory() are used by fewer call-sites.

This also makes the 'common_prefix()' helper function private to dir.c,
since all callers are now in that file.

Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Turn the flags in struct dir_struct into a single variable</title>
<updated>2009-02-18T19:04:19Z</updated>
<author>
<name>Johannes Schindelin</name>
<email>Johannes.Schindelin@gmx.de</email>
</author>
<published>2009-02-16T12:20:25Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=7c4c97c0ac0cd66861d0c2b8bd7a47ed3c523ea7'/>
<id>urn:sha1:7c4c97c0ac0cd66861d0c2b8bd7a47ed3c523ea7</id>
<content type='text'>
By having flags represented as bits in the new member variable 'flags',
it will be easier to use parse_options when dir_struct is involved.

Signed-off-by: Johannes Schindelin &lt;johannes.schindelin@gmx.de&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Allow cloning to an existing empty directory</title>
<updated>2009-01-11T21:26:29Z</updated>
<author>
<name>Alexander Potashev</name>
<email>aspotashev@gmail.com</email>
</author>
<published>2009-01-11T12:19:12Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=55892d23981917aefdb387ad7d0429f90cbd446a'/>
<id>urn:sha1:55892d23981917aefdb387ad7d0429f90cbd446a</id>
<content type='text'>
The die() message updated accordingly.

The previous behaviour was to only allow cloning when the destination
directory doesn't exist.

[jc: added trivial tests]

Signed-off-by: Alexander Potashev &lt;aspotashev@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>add is_dot_or_dotdot inline function</title>
<updated>2009-01-11T21:21:57Z</updated>
<author>
<name>Alexander Potashev</name>
<email>aspotashev@gmail.com</email>
</author>
<published>2009-01-10T12:07:50Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=8ca12c0d62c0be4a4987c4a936467ea2a92e915a'/>
<id>urn:sha1:8ca12c0d62c0be4a4987c4a936467ea2a92e915a</id>
<content type='text'>
A new inline function is_dot_or_dotdot is used to check if the
directory name is either "." or "..". It returns a non-zero value if
the given string is "." or "..". It's applicable to a lot of Git
source code.

Signed-off-by: Alexander Potashev &lt;aspotashev@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>dir.c: make dir_add_name() and dir_add_ignored() static</title>
<updated>2008-10-03T00:46:09Z</updated>
<author>
<name>Nanako Shiraishi</name>
<email>nanako3@lavabit.com</email>
</author>
<published>2008-10-02T10:14:23Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=159b3212705f0f98c79a5565c0f9eff07234c1c7'/>
<id>urn:sha1:159b3212705f0f98c79a5565c0f9eff07234c1c7</id>
<content type='text'>
These functions are not used by any other file.

Signed-off-by: Nanako Shiraishi &lt;nanako3@lavabit.com&gt;
Signed-off-by: Shawn O. Pearce &lt;spearce@spearce.org&gt;
</content>
</entry>
<entry>
<title>Add remove_path: a function to remove as much as possible of a path</title>
<updated>2008-09-29T15:37:07Z</updated>
<author>
<name>Alex Riesen</name>
<email>raa.lkml@gmail.com</email>
</author>
<published>2008-09-26T22:56:46Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=4a92d1bfb784b09641180d164e7d719080165dc4'/>
<id>urn:sha1:4a92d1bfb784b09641180d164e7d719080165dc4</id>
<content type='text'>
The function has two potential users which both managed to get wrong
their implementations (the one in builtin-rm.c one has a memleak, and
builtin-merge-recursive.c scribles over its const argument).

Signed-off-by: Alex Riesen &lt;raa.lkml@gmail.com&gt;
Signed-off-by: Shawn O. Pearce &lt;spearce@spearce.org&gt;
</content>
</entry>
<entry>
<title>gitignore: lazily find dtype</title>
<updated>2008-02-05T08:46:49Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2008-02-01T04:23:25Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=6831a88ac03759a8133f10ffd52ad235a081a8a3'/>
<id>urn:sha1:6831a88ac03759a8133f10ffd52ad235a081a8a3</id>
<content type='text'>
When we process "foo/" entries in gitignore files on a system
that does not have d_type member in "struct dirent", the earlier
implementation ran lstat(2) separately when matching with
entries that came from the command line, in-tree .gitignore
files, and $GIT_DIR/info/excludes file.

This optimizes it by delaying the lstat(2) call until it becomes
absolutely necessary.

The initial idea for this change was by Jeff King, but I
optimized it further to pass pointers to around.

Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>gitignore(5): Allow "foo/" in ignore list to match directory "foo"</title>
<updated>2008-02-05T08:46:49Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2008-01-31T09:17:48Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=d6b8fc303b389b026f2bf9918f6f83041488989b'/>
<id>urn:sha1:d6b8fc303b389b026f2bf9918f6f83041488989b</id>
<content type='text'>
A pattern "foo/" in the exclude list did not match directory
"foo", but a pattern "foo" did.  This attempts to extend the
exclude mechanism so that it would while not matching a regular
file or a symbolic link "foo".  In order to differentiate a
directory and non directory, this passes down the type of path
being checked to excluded() function.

A downside is that the recursive directory walk may need to run
lstat(2) more often on systems whose "struct dirent" do not give
the type of the entry; earlier it did not have to do so for an
excluded path, but we now need to figure out if a path is a
directory before deciding to exclude it.  This is especially bad
because an idea similar to the earlier CE_UPTODATE optimization
to reduce number of lstat(2) calls would by definition not apply
to the codepaths involved, as (1) directories will not be
registered in the index, and (2) excluded paths will not be in
the index anyway.

Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>per-directory-exclude: lazily read .gitignore files</title>
<updated>2007-11-29T10:19:14Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2007-11-29T10:17:44Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=63d285c8494d03a08600bb4453fcce077ecdd517'/>
<id>urn:sha1:63d285c8494d03a08600bb4453fcce077ecdd517</id>
<content type='text'>
Operations that walk directories or trees, which potentially need to
consult the .gitignore files, used to always try to open the .gitignore
file every time they entered a new directory, even when they ended up
not needing to call excluded() function to see if a path in the
directory is ignored.  This was done by push/pop exclude_per_directory()
functions that managed the data in a stack.

This changes the directory walking API to remove the need to call these
two functions.  Instead, the directory walk data structure caches the
data used by excluded() function the last time, and lazily reuses it as
much as possible.  Among the data the last check used, the ones from
deeper directories that the path we are checking is outside are
discarded, data from the common leading directories are reused, and then
the directories between the common directory and the directory the path
being checked is in are checked for .gitignore file.  This is very
similar to the way gitattributes are handled.

This API change also fixes "ls-files -c -i", which called excluded()
without setting up the gitignore data via the old push/pop functions.

Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
</feed>
