Merge branch 'jk/ref-cache-non-repository-optim' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 5 Feb 2016 22:54:17 +0000 (14:54 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 5 Feb 2016 22:54:17 +0000 (14:54 -0800)
The underlying machinery used by "ls-files -o" and other commands
have been taught not to create empty submodule ref cache for a
directory that is not a submodule. This removes a ton of wasted
CPU cycles.

* jk/ref-cache-non-repository-optim:
resolve_gitlink_ref: ignore non-repository paths
clean: make is_git_repository a public function

1  2 
cache.h
diff --combined cache.h
index ee0adc89927aafa3d666aa5c18bf72503157ba1e,67141a46e432fe3c11b544e493ec0f98fcca9dc9..3efd7ac703061fe30576ac3629ce16eaf0a5c9bb
+++ b/cache.h
@@@ -214,7 -214,7 +214,7 @@@ struct cache_entry 
  #define CE_INTENT_TO_ADD     (1 << 29)
  #define CE_SKIP_WORKTREE     (1 << 30)
  /* CE_EXTENDED2 is for future extension */
 -#define CE_EXTENDED2         (1 << 31)
 +#define CE_EXTENDED2         (1U << 31)
  
  #define CE_EXTENDED_FLAGS (CE_INTENT_TO_ADD | CE_SKIP_WORKTREE)
  
@@@ -456,7 -456,6 +456,6 @@@ extern char *git_work_tree_cfg
  extern int is_inside_work_tree(void);
  extern const char *get_git_dir(void);
  extern const char *get_git_common_dir(void);
- extern int is_git_directory(const char *path);
  extern char *get_object_directory(void);
  extern char *get_index_file(void);
  extern char *get_graft_file(void);
@@@ -467,6 -466,25 +466,25 @@@ extern const char *get_git_namespace(vo
  extern const char *strip_namespace(const char *namespaced_ref);
  extern const char *get_git_work_tree(void);
  
+ /*
+  * Return true if the given path is a git directory; note that this _just_
+  * looks at the directory itself. If you want to know whether "foo/.git"
+  * is a repository, you must feed that path, not just "foo".
+  */
+ extern int is_git_directory(const char *path);
+ /*
+  * Return 1 if the given path is the root of a git repository or
+  * submodule, else 0. Will not return 1 for bare repositories with the
+  * exception of creating a bare repository in "foo/.git" and calling
+  * is_git_repository("foo").
+  *
+  * If we run into read errors, we err on the side of saying "yes, it is",
+  * as we usually consider sub-repos precious, and would prefer to err on the
+  * side of not disrupting or deleting them.
+  */
+ extern int is_nonbare_repository_dir(struct strbuf *path);
  #define READ_GITFILE_ERR_STAT_FAILED 1
  #define READ_GITFILE_ERR_NOT_A_FILE 2
  #define READ_GITFILE_ERR_OPEN_FAILED 3