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

Re: [PATCHv4] Read (but not write) from XDG configuration, XDG attributes and XDG ignore files

From
Nnguyenhu@minatec.inpg.fr <nguyenhu@minatec.inpg.fr>
Date
Jun 2, 2012, 15:52 UTC
Message-ID
<20120602175209.Horde.QpN5M3wdC4BPyjaps7w1bMA@webmail.minatec.grenoble-inp.fr>
In-Reply-To
<vpq7gvq9czb.fsf@bauges.imag.fr>
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> a écrit :
> I'd prefer having two separate patches for the config file and for the
> two others. If ignore and attributes are simple enough, they may go to
> the same patch, but ideally, there would be two separate patches again.
We will separate this patch in three different patches.
> No doc for core.excludesfile and core.attributesfile change :-(.
It will be done for the next patch ;)
Show 52 quoted lines
>> --- a/attr.c
>> +++ b/attr.c
>> @@ -497,6 +497,9 @@ static int git_attr_system(void)
>>  static void bootstrap_attr_stack(void)
>>  {
>>  	struct attr_stack *elem;
>> +	char *xdg_attributes_file;
>> +
>> +	home_config_paths(NULL, &xdg_attributes_file, "attributes");
>>
>>  	if (attr_stack)
>>  		return;
>> @@ -522,6 +525,13 @@ static void bootstrap_attr_stack(void)
>>  			elem->prev = attr_stack;
>>  			attr_stack = elem;
>>  		}
>> +	} else if (!access(xdg_attributes_file, R_OK)) {
>> +		elem = read_attr_from_file(xdg_attributes_file, 1);
>> +		if (elem) {
>> +			elem->origin = NULL;
>> +			elem->prev = attr_stack;
>> +			attr_stack = elem;
>> +		}
>>  	}
>>
>>  	if (!is_bare_repository() || direction == GIT_ATTR_INDEX) {
>
> The logic seems overly complex, and you duplicate the if() uselessly.
>
> Why not just set the variable git_attributes_file before entering the
> if? Something like this:
>
> diff --git a/attr.c b/attr.c
> index 303751f..71dc472 100644
> --- a/attr.c
> +++ b/attr.c
> @@ -515,6 +515,9 @@ static void bootstrap_attr_stack(void)
>  		}
>  	}
>
> +	if (!git_attributes_file)
> +		git_attributes_file = "foo";
> +
>  	if (git_attributes_file) {
>  		elem = read_attr_from_file(git_attributes_file, 1);
>  		if (elem) {
>
> (obviously replacing "foo" by the actual code involving
> home_config_paths(..., "attributes")).
>
> Doing so, you may even get rid of the "if (git_attributes_file)" on the
> next line.

We first thought to use an "else if" in order not to pointlessly check the existence of the xdg_attributes_file (or double checking git_attributes_file) if git_attributes_file exists. BTW after checking the code more closely, we do not need to verify the existence of the xdg_attributes_file so it is indeed more clean to use your version, Thank.

Show 27 quoted lines
>> --- a/dir.c
>> +++ b/dir.c
>> @@ -1234,13 +1234,17 @@ int remove_dir_recursively(struct strbuf  
>> *path, int flag)
>>  void setup_standard_excludes(struct dir_struct *dir)
>>  {
>>  	const char *path;
>> +	char *xdg_path;
>>
>>  	dir->exclude_per_dir = ".gitignore";
>>  	path = git_path("info/exclude");
>> +	home_config_paths(NULL, &xdg_path, "ignore");
>>  	if (!access(path, R_OK))
>>  		add_excludes_from_file(dir, path);
>>  	if (excludes_file && !access(excludes_file, R_OK))
>>  		add_excludes_from_file(dir, excludes_file);
>> +	else if (!access(xdg_path, R_OK))
>> +		add_excludes_from_file(dir, xdg_path);
>>  }
> Same remark here. Look at the patch I sent earlier to give a default
> value:
>
> http://thread.gmane.org/gmane.comp.version-control.git/133343/focus=133415
>
> For example, you version reads from XDG file if core.excludesfile is
> set, but the file it points to doesn't exist. I don't think this is
> expected.

Actually, it's the opposite. Our version only read from XDG file if core.excludesfile is not set. After checking your patch, it may be more logical to inialize the default value of excludes_file to the xdg_path as done for the attributes file.

Show 5 quoted lines
>> +	echo foo >to_be_excluded &&
>> +	git add to_be_excluded &&
>> +	git rm --cached to_be_excluded &&
>
> Err, why add and remove it? You just need to create it, right?

It was to check if to_be_excluded is indeed not ignored at the beginning of the test before ignoring it but that's seem a bit over-testing, I'll remove it.

Show 10 quoted lines
>> +	cd .. &&
>> +	mkdir -p .config/git/ &&
>
> I don't like these relative references to $HOME. If you mean $HOME, why
> not say
>
> mkdir -p $HOME/.config/git/
> echo "f attr_f" >$HOME/.config/git/
>
> ?

It will be fixed but BTW where the tests are executed, $HOME has a weird behaviour:

echo $HOME and echo "$HOME"
      both returns /.../t/trash directory.t1306-read-xdg-config-file
but   echo foo >$HOME   writes in ../t/trash
while echo foo >"$HOME" writes in t/trash directory.t1306-read-xdg-config-file
so "$HOME" is needed for the tests to work.
Previous: Matthieu MoyNext: Matthieu Moy
Message 8 of 88 in “[PATCHv2] Possibility to read both from ~/.gitconfig and from $XDG_CONFIG_HOME/git/config”
  1. Huynh Khoi Nguyen NGUYENMay 30, 2012
  2. Junio C HamanoMay 30, 2012
  3. Ramsay JonesMay 31, 2012
  4. [PATCHv3] Read from XDG configuration file, not writeHuynh Khoi Nguyen NGUYEN, May 31, 2012
  5. Junio C HamanoMay 31, 2012
  6. [PATCHv4] Read (but not write) from XDG configuration, XDG attributes and XDG ignore filesHuynh Khoi Nguyen NGUYEN, Jun 1, 2012
  7. Matthieu MoyJun 2, 2012
  8. nguyenhu@minatec.inpg.frJun 2, 2012
  9. Matthieu MoyJun 2, 2012
  10. 1/4 Read (but not write) from $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  11. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  12. Matthieu MoyJun 4, 2012
  13. nguyenhu@minatec.inpg.frJun 5, 2012
  14. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributesHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  15. 4/4 Write to $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  16. Matthieu MoyJun 4, 2012
  17. nguyenhu@minatec.inpg.frJun 5, 2012
  18. 1/4 Read (but not write) from $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  19. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  20. Junio C HamanoJun 7, 2012
  21. Matthieu MoyJun 8, 2012
  22. nguyenhu@minatec.inpg.frJun 8, 2012
  23. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributesHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  24. 4/4 Write to $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  25. David AguilarJun 9, 2012
  26. Junio C HamanoJun 9, 2012
  27. David AguilarJun 9, 2012
  28. Matthieu MoyJun 10, 2012
  29. nguyenhu@minatec.inpg.frJun 11, 2012
  30. Junio C HamanoJun 7, 2012
  31. nguyenhu@minatec.inpg.frJun 8, 2012
  32. Ramsay JonesJun 12, 2012
  33. nguyenhu@minatec.inpg.frJun 8, 2012
  34. Erik Faye-LundJun 8, 2012
  35. nguyenhu@minatec.inpg.frJun 8, 2012
  36. Erik Faye-LundJun 8, 2012
  37. Junio C HamanoJun 8, 2012
  38. nguyenhu@minatec.inpg.frJun 9, 2012
  39. Junio C HamanoJun 10, 2012
  40. nguyenhu@minatec.inpg.frJun 10, 2012
  41. Erik Faye-LundJun 10, 2012
  42. nguyenhu@minatec.inpg.frJun 10, 2012
  43. Erik Faye-LundJun 10, 2012
  44. Junio C HamanoJun 11, 2012
  45. nguyenhu@minatec.inpg.frJun 11, 2012
  46. nguyenhu@minatec.inpg.frJun 11, 2012
  47. Erik Faye-LundJun 11, 2012
  48. 1/4 Read (but not write) from $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  49. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  50. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributesHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  51. 4/4 Write to $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  52. Ramsay JonesJun 14, 2012
  53. Matthieu MoyJun 21, 2012
  54. Junio C HamanoJun 21, 2012
  55. 0/4 Git configuration directoryMatthieu Moy, Jun 22, 2012
  56. 1/4 config: read (but not write) from $XDG_CONFIG_HOME/git/config fileMatthieu Moy, Jun 22, 2012
  57. Thomas RastJul 12, 2012
  58. config: fix several access(NULL) callsMatthieu Moy, Jul 12, 2012
  59. Thomas RastJul 12, 2012
  60. Junio C HamanoJul 12, 2012
  61. Matthieu MoyJul 12, 2012
  62. Junio C HamanoJul 12, 2012
  63. Matthieu MoyJul 13, 2012
  64. config: fix several access(NULL) callsMatthieu Moy, Jul 13, 2012
  65. Jeff KingJul 13, 2012
  66. Matthieu MoyJul 13, 2012
  67. Thomas RastJul 13, 2012
  68. Matthieu MoyJul 13, 2012
  69. Junio C HamanoJul 13, 2012
  70. Matthieu MoyJul 16, 2012
  71. Junio C HamanoJul 16, 2012
  72. Matthieu MoyJul 16, 2012
  73. Junio C HamanoJul 16, 2012
  74. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreMatthieu Moy, Jun 22, 2012
  75. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/ignoreMatthieu Moy, Jun 22, 2012
  76. Junio C HamanoJun 22, 2012
  77. Matthieu MoyJun 25, 2012
  78. Junio C HamanoJun 25, 2012
  79. Matthieu MoyJun 25, 2012
  80. 4/4 config: write to $XDG_CONFIG_HOME/git/config file if appropriateMatthieu Moy, Jun 22, 2012
  81. Junio C HamanoJun 22, 2012
  82. Matthieu MoyJun 25, 2012
  83. Junio C HamanoJun 25, 2012
  84. Junio C HamanoJun 22, 2012
  85. Ramsay JonesJun 4, 2012
  86. Junio C HamanoJun 4, 2012
  87. Ramsay JonesJun 12, 2012
  88. nguyenhu@minatec.inpg.frJun 5, 2012

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.