Merge branch 'jk/config-warn-on-inaccessible-paths' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 18 Sep 2012 21:24:06 +0000 (14:24 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 18 Sep 2012 21:24:06 +0000 (14:24 -0700)
The attribute system may be asked for a path that itself or its
leading directories no longer exists in the working tree, and it is
fine if we cannot open .gitattribute file in such a case. Failure
to open per-directory .gitattributes with error status other than
ENOENT and ENOTDIR should be diagnosed.

* jk/config-warn-on-inaccessible-paths:
attr: failure to open a .gitattributes file is OK with ENOTDIR
warn_on_inaccessible(): a helper to warn on inaccessible paths
attr: warn on inaccessible attribute files
gitignore: report access errors of exclude files
config: warn on inaccessible files

1  2 
builtin/config.c
diff --combined builtin/config.c
index ada6e1211462558f307dce6142b7b65d641c8e02,b0394efac9b7c257723b2a63be362138fd636e0f..442ccc2497c4e2e889d9de55359e36a1db07c1a4
@@@ -160,7 -160,7 +160,7 @@@ static int show_config(const char *key_
  
  static int get_value(const char *key_, const char *regex_)
  {
 -      int ret = -1;
 +      int ret = CONFIG_GENERIC_ERROR;
        char *global = NULL, *xdg = NULL, *repo_config = NULL;
        const char *system_wide = NULL, *local;
        struct config_include_data inc = CONFIG_INCLUDE_INIT;
                if (regcomp(key_regexp, key, REG_EXTENDED)) {
                        fprintf(stderr, "Invalid key pattern: %s\n", key_);
                        free(key);
 +                      ret = CONFIG_INVALID_PATTERN;
                        goto free_strings;
                }
        } else {
 -              if (git_config_parse_key(key_, &key, NULL))
 +              if (git_config_parse_key(key_, &key, NULL)) {
 +                      ret = CONFIG_INVALID_KEY;
                        goto free_strings;
 +              }
        }
  
        if (regex_) {
                regexp = (regex_t*)xmalloc(sizeof(regex_t));
                if (regcomp(regexp, regex_, REG_EXTENDED)) {
                        fprintf(stderr, "Invalid pattern: %s\n", regex_);
 +                      ret = CONFIG_INVALID_PATTERN;
                        goto free_strings;
                }
        }
@@@ -400,8 -396,8 +400,8 @@@ int cmd_config(int argc, const char **a
                         */
                        die("$HOME not set");
  
-               if (access(user_config, R_OK) &&
-                   xdg_config && !access(xdg_config, R_OK))
+               if (access_or_warn(user_config, R_OK) &&
+                   xdg_config && !access_or_warn(xdg_config, R_OK))
                        given_config_file = xdg_config;
                else
                        given_config_file = user_config;