git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 0/8] fnmatch replacement step 1
Date: Sat, 22 Dec 2012 14:57:00 +0700	[thread overview]
Message-ID: <1356163028-29967-1-git-send-email-pclouds@gmail.com> (raw)

This series makes wildmatch compatible with fnmatch, at least for
FNM_CASEFOLD and FNM_PATHNAME. This makes it possible to use wildmatch
as a fnmatch replacement. The replacement is optional and turned on via
USE_WILDMATCH.

Step 2 would be turn USE_WILDMATCH by default and remove
compat/fnmatch. We can leave it for now until we are certain we don't
introduce any kind of regressions.

Measurement is performed to see how wildmatch compete with
fnmatch(es). I was surprised that my glibc version is even slower than
compat/fnmatch. For more details, see 5/8. wildmatch is faster (about
20%) in most cases. It is slower in '*/*/*' tests both with and without
FNM_PATHNAME. 7/8 and 8/8 fix that, making wildmatch fastest in all
(tested) cases.

I'd appreciate if people test it with more patterns (both weird and
commonly used) against different fnmatch versions and turn on
USE_WILDMATCH to see if we need to fix something else, both correctness
and performance. So far I'm convinced that the replacement is a good
thing to do.

The series requires nd/wildmatch, obviously.

Nguyễn Thái Ngọc Duy (8):
  compat/fnmatch: respect NO_FNMATCH* even on glibc
  wildmatch: rename constants and update prototype
  wildmatch: make dowild() take arbitrary flags
  wildmatch: support "no FNM_PATHNAME" mode
  test-wildmatch: add "perf" command to compare wildmatch and fnmatch
  Makefile: add USE_WILDMATCH to use wildmatch as fnmatch
  wildmatch: make a special case for "*/" with FNM_PATHNAME
  wildmatch: advance faster in <asterisk> + <literal> patterns

 Makefile                 |   6 +++
 compat/fnmatch/fnmatch.c |   3 +-
 dir.c                    |   3 +-
 git-compat-util.h        |  13 +++++
 t/t3070-wildmatch.sh     |  27 ++++++++++
 test-wildmatch.c         |  82 +++++++++++++++++++++++++++-
 wildmatch.c              | 137 +++++++++++++++++++++++++++++------------------
 wildmatch.h              |  23 +++++---
 8 files changed, 232 insertions(+), 62 deletions(-)

-- 
1.8.0.rc2.23.g1fb49df

             reply	other threads:[~2012-12-22  7:58 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-22  7:57 Nguyễn Thái Ngọc Duy [this message]
2012-12-22  7:57 ` [PATCH 1/8] compat/fnmatch: respect NO_FNMATCH* even on glibc Nguyễn Thái Ngọc Duy
2012-12-22  7:57 ` [PATCH 2/8] wildmatch: rename constants and update prototype Nguyễn Thái Ngọc Duy
2012-12-26 18:44   ` Junio C Hamano
2012-12-22  7:57 ` [PATCH 3/8] wildmatch: make dowild() take arbitrary flags Nguyễn Thái Ngọc Duy
2012-12-22  7:57 ` [PATCH 4/8] wildmatch: support "no FNM_PATHNAME" mode Nguyễn Thái Ngọc Duy
2012-12-28  6:24   ` Junio C Hamano
2012-12-28  7:15     ` Nguyen Thai Ngoc Duy
2012-12-22  7:57 ` [PATCH 5/8] test-wildmatch: add "perf" command to compare wildmatch and fnmatch Nguyễn Thái Ngọc Duy
2012-12-22  7:57 ` [PATCH 6/8] Makefile: add USE_WILDMATCH to use wildmatch as fnmatch Nguyễn Thái Ngọc Duy
2012-12-22  7:57 ` [PATCH 7/8] wildmatch: make a special case for "*/" with FNM_PATHNAME Nguyễn Thái Ngọc Duy
2012-12-22  7:57 ` [PATCH 8/8] wildmatch: advance faster in <asterisk> + <literal> patterns Nguyễn Thái Ngọc Duy
2012-12-28  6:24   ` Junio C Hamano
2012-12-28  6:56     ` Nguyen Thai Ngoc Duy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1356163028-29967-1-git-send-email-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).