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

[PATCH 24/24] cache.h: retire NO_THE_INDEX_COMPATIBILITY_MACROS

From
Stefan Beller <sbeller@google.com>
Date
May 2, 2017, 22:23 UTC
Message-ID
<20170502222322.21055-25-sbeller@google.com>
In-Reply-To
<20170502222322.21055-1-sbeller@google.com>

The NO_THE_INDEX_COMPATIBILITY_MACROS pre processor setting was introduced in 4aab5b46f4 (Make read-cache.c "the_index" free., 2007-04-01), stating:

    This makes all low-level functions defined in read-cache.c to
    take an explicit index_state structure as their first parameter,
    to specify which index to work on.

The reasoning is very vague, maybe indicating that having the index specified to work on is easier to for the new reader to understand what is going on.

All preceding patches worked on retiring functions that do not take an explicit index as to where to perform its work. Spelling out the reasons why we want to specify the index at each call:

1)  Ease of understanding:
   The recent patches dropped a lot of macros that may confuse new people
   diving into the code base.
2a) Spelling out global state explicitly:
   Anything you do in submodule land today needs to spawn new processes in
   the submodule. This is cumbersome and not performant. So we may want to
   have an abstraction of a repo, i.e. all repository state in one struct.
   That way we can open a submodule in-process and perform the required
   actions without spawning a process. The road to this future is a long
   road, and we have to start somewhere. Exposing the global state seems
   like a good starter point.
2b) Spelling out global state explicitly (II): (Jeff Hostetler wrote)
   In addition to (eventually) allowing multiple repos be open at the same
   time for submodules, it would also help with various multi-threading
   efforts.  For example, we have loops that do a
   "for (k = 0, k < active_nr; k++) {...}"  There is no visual clue in that
   code that it references "the_index" and therefore should be subject to
   the same locking.  Granted, this is a trivial example, but goes to the
   argument that the code has lots of subtle global variables and macros
   that make it difficult to reason about the code.
   This step would help un-hide this.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
 attr.c         | 1 -
 cache.h        | 4 ----
 name-hash.c    | 1 -
 read-cache.c   | 1 -
 unpack-trees.c | 1 -
 5 files changed, 8 deletions(-)
diff --git a/attr.c b/attr.c
index 7e2134471c..3decf432b8 100644
--- a/attr.c
+++ b/attr.c
@@ -7,7 +7,6 @@
  * an insanely large number of attributes.
  */
 
-#define NO_THE_INDEX_COMPATIBILITY_MACROS
 #include "cache.h"
 #include "exec_cmd.h"
 #include "attr.h"
diff --git a/cache.h b/cache.h
index f2a45eda9a..f4b7b8621c 100644
--- a/cache.h
+++ b/cache.h
@@ -352,10 +352,6 @@ extern void add_name_hash(struct index_state *istate, struct cache_entry *ce);
 extern void remove_name_hash(struct index_state *istate, struct cache_entry *ce);
 extern void free_name_hash(struct index_state *istate);
 
-
-#ifndef NO_THE_INDEX_COMPATIBILITY_MACROS
-#endif
-
 enum object_type {
 	OBJ_BAD = -1,
 	OBJ_NONE = 0,
diff --git a/name-hash.c b/name-hash.c
index 39309efb7f..02870c1d19 100644
--- a/name-hash.c
+++ b/name-hash.c
@@ -5,7 +5,6 @@
  *
  * Copyright (C) 2008 Linus Torvalds
  */
-#define NO_THE_INDEX_COMPATIBILITY_MACROS
 #include "cache.h"
 
 struct dir_entry {
diff --git a/read-cache.c b/read-cache.c
index 6681376f5b..e0c6f3ca11 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -3,7 +3,6 @@
  *
  * Copyright (C) Linus Torvalds, 2005
  */
-#define NO_THE_INDEX_COMPATIBILITY_MACROS
 #include "cache.h"
 #include "tempfile.h"
 #include "lockfile.h"
diff --git a/unpack-trees.c b/unpack-trees.c
index 3dd8f60fc1..41956c4b37 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1,4 +1,3 @@
-#define NO_THE_INDEX_COMPATIBILITY_MACROS
 #include "cache.h"
 #include "dir.h"
 #include "tree.h"
-- 
2.13.0.rc1.39.ga6db8bfa24
Previous: Stefan BellerNext: Stefan Beller
Message 19 of 25 in “Retire NO_THE_INDEX_COMPATIBILITY_MACROS”
  1. 00/24 Retire NO_THE_INDEX_COMPATIBILITY_MACROSStefan Beller, May 2, 2017
  2. 01/24 cache.h: drop read_cache()Stefan Beller, May 2, 2017
  3. 03/24 cache.h: drop read_cache_fromStefan Beller, May 2, 2017
  4. 02/24 cache.h: drop active_* macrosStefan Beller, May 2, 2017
  5. 06/24 unpack-trees.c: rename parameter 'the_index'Stefan Beller, May 2, 2017
  6. 04/24 cache.h: drop read_cache_preload(pathspec)Stefan Beller, May 2, 2017
  7. 07/24 cache.h: drop read_blob_data_from_cacheStefan Beller, May 2, 2017
  8. 05/24 cache.h: drop read_cache_unmerged()Stefan Beller, May 2, 2017
  9. 10/24 cache.h: drop cache_name_is_otherStefan Beller, May 2, 2017
  10. 12/24 cache.h: drop cache_dir_existsStefan Beller, May 2, 2017
  11. 11/24 cache.h: drop cache_file_existsStefan Beller, May 2, 2017
  12. 13/24 cache.h: drop is_cache_unborn(), discard_cache(), unmerged_cache()Stefan Beller, May 2, 2017
  13. 09/24 cache.h: drop resolve_undo_clearStefan Beller, May 2, 2017
  14. 08/24 cache.h: drop unmerge_cache[_entry_at]Stefan Beller, May 2, 2017
  15. 14/24 cache.h: drop cache_name_posStefan Beller, May 2, 2017
  16. 22/24 cache.h: drop ce_modifiedStefan Beller, May 2, 2017
  17. 20/24 cache.h: drop chmod_cache_entryStefan Beller, May 2, 2017
  18. 23/24 cache.h: drop ce_match_statStefan Beller, May 2, 2017
  19. 24/24 cache.h: retire NO_THE_INDEX_COMPATIBILITY_MACROSStefan Beller, May 2, 2017
  20. 21/24 cache.h: drop refresh_cacheStefan Beller, May 2, 2017
  21. 19/24 cache.h: drop add_file_to_cacheStefan Beller, May 2, 2017
  22. 18/24 cache.h: drop add_to_cacheStefan Beller, May 2, 2017
  23. 17/24 cache.h: drop remove_file_from_cacheStefan Beller, May 2, 2017
  24. 16/24 cache.h: drop rename_cache_entry_atStefan Beller, May 2, 2017
  25. 15/24 cache.h: drop add_cache_entryStefan Beller, May 2, 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.