From e951ebca91d914e3fb579011c9218f59c67cf2fd Mon Sep 17 00:00:00 2001 From: Jeff King Date: Wed, 14 Dec 2016 09:26:55 -0500 Subject: [PATCH 1/4] Makefile: reformat FIND_SOURCE_FILES As we add to this in future commits, the formatting is going to make it harder and harder to read. Let's write it more as we would in a shell script, putting each logical block on its own line. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f53fcc90d7..f42b1953d8 100644 --- a/Makefile +++ b/Makefile @@ -2149,9 +2149,12 @@ endif po/build/locale/%/LC_MESSAGES/git.mo: po/%.po $(QUIET_MSGFMT)mkdir -p $(dir $@) && $(MSGFMT) -o $@ $< -FIND_SOURCE_FILES = ( git ls-files '*.[hcS]' 2>/dev/null || \ - $(FIND) . \( -name .git -type d -prune \) \ - -o \( -name '*.[hcS]' -type f -print \) ) +FIND_SOURCE_FILES = ( \ + git ls-files '*.[hcS]' 2>/dev/null || \ + $(FIND) . \ + \( -name .git -type d -prune \) \ + -o \( -name '*.[hcS]' -type f -print \) \ + ) $(ETAGS_TARGET): FORCE $(RM) $(ETAGS_TARGET) From e6fc85b11f402ababa4b46ec1121a662ce1fce8e Mon Sep 17 00:00:00 2001 From: Jeff King Date: Wed, 14 Dec 2016 09:28:04 -0500 Subject: [PATCH 2/4] Makefile: exclude test cruft from FIND_SOURCE_FILES The test directory may contain three types of files that match our patterns: 1. Helper programs in t/helper. 2. Sample data files (e.g., t/t4051/hello.c). 3. Untracked cruft in trash directories and t/perf/build. We want to match (1), but not the other two, as they just clutter up the list. For the ls-files method, we can drop (2) with a negative pathspec. We do not have to care about (3), since ls-files will not list untracked files. For `find`, we can match both cases with `-prune` patterns. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f42b1953d8..001126931d 100644 --- a/Makefile +++ b/Makefile @@ -2150,9 +2150,15 @@ po/build/locale/%/LC_MESSAGES/git.mo: po/%.po $(QUIET_MSGFMT)mkdir -p $(dir $@) && $(MSGFMT) -o $@ $< FIND_SOURCE_FILES = ( \ - git ls-files '*.[hcS]' 2>/dev/null || \ + git ls-files \ + '*.[hcS]' \ + ':!*[tp][0-9][0-9][0-9][0-9]*' \ + 2>/dev/null || \ $(FIND) . \ \( -name .git -type d -prune \) \ + -o \( -name '[tp][0-9][0-9][0-9][0-9]' -type d -prune \) \ + -o \( -name build -type d -prune \) \ + -o \( -name 'trash*' -type d -prune \) \ -o \( -name '*.[hcS]' -type f -print \) \ ) From 8fa2043293831402b84c3446efa62640c01c8121 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Wed, 14 Dec 2016 09:29:44 -0500 Subject: [PATCH 3/4] Makefile: match shell scripts in FIND_SOURCE_FILES We feed FIND_SOURCE_FILES to ctags to help developers navigate to particular functions, but we only feed C source code. The same feature can be helpful when working with shell scripts (especially the test suite). Modern versions of ctags know how to parse shell scripts; we just need to feed the filenames to it. This patch specifically avoids including the individual test scripts themselves. Those are unlikely to be of interest, and there are a lot of them to process. It does pick up test-lib.sh and test-lib-functions.sh. Note that our negative pathspec already excludes the individual scripts for the ls-files case, but we need to loosen the `find` rule to match it. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 001126931d..ef8de4a754 100644 --- a/Makefile +++ b/Makefile @@ -2152,14 +2152,16 @@ po/build/locale/%/LC_MESSAGES/git.mo: po/%.po FIND_SOURCE_FILES = ( \ git ls-files \ '*.[hcS]' \ + '*.sh' \ ':!*[tp][0-9][0-9][0-9][0-9]*' \ 2>/dev/null || \ $(FIND) . \ \( -name .git -type d -prune \) \ - -o \( -name '[tp][0-9][0-9][0-9][0-9]' -type d -prune \) \ + -o \( -name '[tp][0-9][0-9][0-9][0-9]*' -prune \) \ -o \( -name build -type d -prune \) \ -o \( -name 'trash*' -type d -prune \) \ -o \( -name '*.[hcS]' -type f -print \) \ + -o \( -name '*.sh' -type f -print \) \ ) $(ETAGS_TARGET): FORCE From 046e4c1c09aa4fa9865b1fd755aa99d8617465d2 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Wed, 14 Dec 2016 09:32:35 -0500 Subject: [PATCH 4/4] Makefile: exclude contrib from FIND_SOURCE_FILES When you're working on the git project, you're unlikely to care about random bits in contrib/ (e.g., you would not want to jump to the copy of xmalloc in the wincred credential helper). Nobody has really complained because there are relatively few C files in contrib. Now that we're matching shell scripts, too, we get quite a few more hits, especially in the obsolete contrib/examples directory. Looking for usage() should turn up the one in git-sh-setup, not in some long-dead version of git-clone. Let's just exclude all of contrib. Any specific projects there which are big enough to want tags can generate them separately. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index ef8de4a754..76267262c1 100644 --- a/Makefile +++ b/Makefile @@ -2154,10 +2154,12 @@ FIND_SOURCE_FILES = ( \ '*.[hcS]' \ '*.sh' \ ':!*[tp][0-9][0-9][0-9][0-9]*' \ + ':!contrib' \ 2>/dev/null || \ $(FIND) . \ \( -name .git -type d -prune \) \ -o \( -name '[tp][0-9][0-9][0-9][0-9]*' -prune \) \ + -o \( -name contrib -type d -prune \) \ -o \( -name build -type d -prune \) \ -o \( -name 'trash*' -type d -prune \) \ -o \( -name '*.[hcS]' -type f -print \) \