v7 changes:

 - typo fix here and there
 - delete a dead TODO comment
 - delete the error on unrecognized condition (we probably want a
   better, general mechanism for troubleshooting config keys anyway)
 - some fix up on include.path document because the "one or many"
   confusion started from there

I don't have a good answer for Jeff's PS about includeIf ugliness. I
agree that includeif is ugly but includeIf looks a bit better. I don't
see a better option (if only "include" does not start or end with a
vowel...). Maybe includewith? Suggestions are welcome.

Interdiff below (just on patch 3, not the first two)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index aab3df04fb..2a41e84bab 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -93,9 +93,11 @@ was found.  See below for examples.
 Conditional includes
 ~~~~~~~~~~~~~~~~~~~~
 
-You can include one config file from another conditionally by setting
-a `includeIf.<condition>.path` variable to the name of the file to be
-included. The variable's value is treated the same way as `include.path`.
+You can include a config file from another conditionally by setting a
+`includeIf.<condition>.path` variable to the name of the file to be
+included. The variable's value is treated the same way as
+`include.path`. `includeIf.<condition>path` supports multiple key
+values.
 
 The condition starts with a keyword followed by a colon and some data
 whose format and meaning depends on the keyword. Supported keywords
@@ -104,13 +106,14 @@ are:
 `gitdir`::
 
        The data that follows the keyword `gitdir:` is used as a glob
-       pattern. If the location of the .git directory match the
+       pattern. If the location of the .git directory matches the
        pattern, the include condition is met.
 +
-The .git location which may be auto-discovered, or come from
-`$GIT_DIR` environment variable. If the repository auto discovered via
-a .git file (e.g. from submodules, or a linked worktree), the .git
-location would be the final location, not where the .git file is.
+The .git location may be auto-discovered, or come from `$GIT_DIR`
+environment variable. If the repository is auto discovered via a .git
+file (e.g. from submodules, or a linked worktree), the .git location
+would be the final location where the .git directory is, not where the
+.git file is.
 +
 The pattern can contain standard globbing wildcards and two additional
 ones, `**/` and `/**`, that can match multiple path components. Please
@@ -169,15 +172,15 @@ Example
                path = ~/foo ; expand "foo" in your `$HOME` directory
 
        ; include if $GIT_DIR is /path/to/foo/.git
-       [include-if "gitdir:/path/to/foo/.git"]
+       [includeIf "gitdir:/path/to/foo/.git"]
                path = /path/to/foo.inc
 
        ; include for all repositories inside /path/to/group
-       [include-if "gitdir:/path/to/group/"]
+       [includeIf "gitdir:/path/to/group/"]
                path = /path/to/foo.inc
 
        ; include for all repositories inside $HOME/to/group
-       [include-if "gitdir:~/to/group/"]
+       [includeIf "gitdir:~/to/group/"]
                path = /path/to/foo.inc
 
 Values
diff --git a/config.c b/config.c
index ad16802c8a..0dac0f4cb2 100644
--- a/config.c
+++ b/config.c
@@ -191,7 +191,6 @@ static int prepare_include_condition_pattern(struct strbuf 
*pat)
                        return error(_("relative config include "
                                       "conditionals must come from files"));
 
-               /* TODO: escape wildcards */
                strbuf_add_absolute_path(&path, cf->path);
                slash = find_last_dir_sep(path.buf);
                if (!slash)
@@ -245,16 +244,12 @@ static int include_by_gitdir(const char *cond, size_t 
cond_len, int icase)
 
 static int include_condition_is_true(const char *cond, size_t cond_len)
 {
-       /* no condition (i.e., "include.path") is always true */
-       if (!cond)
-               return 1;
 
        if (skip_prefix_mem(cond, cond_len, "gitdir:", &cond, &cond_len))
                return include_by_gitdir(cond, cond_len, 0);
        else if (skip_prefix_mem(cond, cond_len, "gitdir/i:", &cond, &cond_len))
                return include_by_gitdir(cond, cond_len, 1);
 
-       error(_("unrecognized include condition: %.*s"), (int)cond_len, cond);
        /* unknown conditionals are always false */
        return 0;
 }
@@ -278,7 +273,7 @@ int git_config_include(const char *var, const char *value, 
void *data)
                ret = handle_path_include(value, inc);
 
        if (!parse_config_key(var, "includeif", &cond, &cond_len, &key) &&
-           include_condition_is_true(cond, cond_len) &&
+           (cond && include_condition_is_true(cond, cond_len)) &&
            !strcmp(key, "path"))
                ret = handle_path_include(value, inc);

Nguyễn Thái Ngọc Duy (3):
  config.txt: clarify multiple key values in include.path
  config.txt: reflow the second include.path paragraph
  config: add conditional include

 Documentation/config.txt  | 77 +++++++++++++++++++++++++++++++++++----
 config.c                  | 92 +++++++++++++++++++++++++++++++++++++++++++++++
 t/t1305-config-include.sh | 56 +++++++++++++++++++++++++++++
 3 files changed, 218 insertions(+), 7 deletions(-)

-- 
2.11.0.157.gd943d85

Reply via email to