git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v5 1/1] config: add conditional include

From
Duy Nguyen <pclouds@gmail.com>
Date
Feb 24, 2017, 09:37 UTC
Message-ID
<CACsJy8CerU-=PF6wqzUAM02jkrVVGJ5MA0NgL6z9bHn5KM6jiw@mail.gmail.com>
In-Reply-To
<xmqqwpcg7k6r.fsf@gitster.mtv.corp.google.com>
On Fri, Feb 24, 2017 at 2:59 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 6 quoted lines
> The variable is obviously not treated the same way as include.path ;-)
>
>     When includeIf.<condition>.path variable is set in a
>     configuration file, the configuration file named by that
>     variable is included (in a way similar to how include.path
>     works) only if the <condition> holds true.

Yeah. I was thinking "value" and writing "variable" instead (or perhaps I meant to write "variable value" and accidentally'd the last word again).

Show 9 quoted lines
>> +     /* TODO: maybe support ~user/ too */
>> +     if (pat->buf[0] == '~' && is_dir_sep(pat->buf[1])) {
>> +             const char *home = getenv("HOME");
>> +
>> +             if (!home)
>> +                     return error(_("$HOME is not defined"));
>
> Instead of half-duplicating it here yourself, can't we let
> expand_user_path() do its thing?

This comment came up in previous iterations. I perform explicit expansion to make sure we don't apply wildcards on the expanded "~". But I guess going with expand_user_path() is better (less confusion for future readers). We can come back to it when that "don't apply wildcards" concern becomes real.

Show 21 quoted lines
>> +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);
>
> This may be OK for now, but it should be trivial to start from a
> table with two entries, i.e.
>
>         struct include_cond {
>                 const char *keyword;
>                 int (*fn)(const char *, size_t);
>         };
>
> and will show a better way to do things to those who follow your
> footsteps.

Yeah I don't see a third include coming soon and did not go with that. Let's way for it and refactor then.

-- 
Duy
Previous: Junio C HamanoNext: Junio C Hamano
Message 4 of 39 in “Conditional config include”
  1. 0/1 Conditional config includeNguyễn Thái Ngọc Duy, Feb 23, 2017
  2. 1/1 config: add conditional includeNguyễn Thái Ngọc Duy, Feb 23, 2017
  3. Junio C HamanoFeb 23, 2017
  4. Duy NguyenFeb 24, 2017
  5. Junio C HamanoFeb 24, 2017
  6. Jeff KingFeb 26, 2017
  7. Junio C HamanoFeb 27, 2017
  8. Stefan BellerMar 6, 2017
  9. Jeff KingMar 7, 2017
  10. Stefan BellerMar 7, 2017
  11. 0/1 Conditional config includeNguyễn Thái Ngọc Duy, Feb 24, 2017
  12. 1/1 config: add conditional includeNguyễn Thái Ngọc Duy, Feb 24, 2017
  13. Junio C HamanoFeb 24, 2017
  14. Ramsay JonesFeb 24, 2017
  15. Philip OakleyFeb 24, 2017
  16. Duy NguyenFeb 26, 2017
  17. Philip OakleyFeb 26, 2017
  18. 0/1 Conditional config includeNguyễn Thái Ngọc Duy, Feb 24, 2017
  19. Duy NguyenFeb 24, 2017
  20. 1/1 config: add conditional includeNguyễn Thái Ngọc Duy, Feb 24, 2017
  21. Jeff KingFeb 26, 2017
  22. 0/3 Conditional config includeNguyễn Thái Ngọc Duy, Mar 1, 2017
  23. 1/3 config.txt: clarify multiple key values in include.pathNguyễn Thái Ngọc Duy, Mar 1, 2017
  24. Junio C HamanoMar 1, 2017
  25. 2/3 config.txt: reflow the second include.path paragraphNguyễn Thái Ngọc Duy, Mar 1, 2017
  26. 3/3 config: add conditional includeNguyễn Thái Ngọc Duy, Mar 1, 2017
  27. Ramsay JonesMar 1, 2017
  28. Junio C HamanoMar 1, 2017
  29. Jeff KingMar 3, 2017
  30. Junio C HamanoMar 3, 2017
  31. Jeff KingMar 3, 2017
  32. Junio C HamanoMar 1, 2017
  33. Jeff KingMar 3, 2017
  34. Duy NguyenMar 3, 2017
  35. Junio C HamanoMar 3, 2017
  36. Junio C HamanoMar 3, 2017
  37. Junio C HamanoMar 3, 2017
  38. Jeff KingMar 3, 2017
  39. Junio C HamanoMar 3, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.