MinGW readdir reimplementation to support d_type
authorMarius Storm-Olsen <marius@trolltech.com>
Sun, 31 May 2009 16:15:22 +0000 (18:15 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 1 Jun 2009 07:25:54 +0000 (00:25 -0700)
commite16c60d9f98c66fd2c9bba64562b3439970c13f8
treeac682110cc4fc94da135be7e5f3033119e3e496e
parent36ad53ffee6ed5b7c277cde660f526fd8ce3d68f
MinGW readdir reimplementation to support d_type

The original readdir implementation was fast, but didn't
support the d_type. This means that git would do additional
lstats for each entry, to figure out if the entry was a
directory or not. This unneedingly slowed down many
operations, since Windows API provides this information
directly when walking the directories.

By running this implementation on Moe's repo structure:
  mkdir bummer && cd bummer; for ((i=0;i<100;i++)); do
    mkdir $i && pushd $i;
      for ((j=0;j<1000;j++)); do echo "$j" >$j; done;
    popd;
  done

We see the following speedups:
  git add .
  -------------------
  old: 00:00:23(.087)
  new: 00:00:21(.512) 1.07x

  git status
  -------------------
  old: 00:00:03(.306)
  new: 00:00:01(.684) 1.96x

  git clean -dxf
  -------------------
  old: 00:00:01(.918)
  new: 00:00:00(.295) 6.50x

Signed-off-by: Marius Storm-Olsen <marius@trolltech.com>
Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c
compat/mingw.h