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

Re: [PATCH/RFC] Replace ce_namelen() with a ce_namelen field

From
Thomas Rast <trast@inf.ethz.ch>
Date
Jul 4, 2012, 10:00 UTC
Message-ID
<87txxn3kxb.fsf@thomas.inf.ethz.ch>
In-Reply-To
<1341393528-21037-1-git-send-email-t.gummerer@gmail.com>
Thomas Gummerer <t.gummerer@gmail.com> writes:
> Replace the ce_namelen() function in cache.h with a ce_namelen
> field in struct cache_entry. This will both give us a tiny bit
> of a performance enhancement when working with long pathnames
> and is part of the refactoring for the index-v5 file format.
Expand this, at least proportionally to the damage incurred.

For example, I know that you know that there's a good reason why we want to put it in a new field when reading from v5 :-)

Show 28 quoted lines
> Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
> ---
>  builtin/add.c            |    4 ++--
>  builtin/apply.c          |    1 +
>  builtin/blame.c          |    1 +
>  builtin/checkout-index.c |    8 ++++----
>  builtin/checkout.c       |    7 ++++---
>  builtin/clean.c          |    2 +-
>  builtin/commit.c         |    2 +-
>  builtin/grep.c           |    2 +-
>  builtin/ls-files.c       |    8 ++++----
>  builtin/rm.c             |    2 +-
>  builtin/update-index.c   |    9 ++++++---
>  cache-tree.c             |    4 ++--
>  cache.h                  |   11 ++---------
>  diff-lib.c               |    6 +++---
>  entry.c                  |    2 +-
>  merge-recursive.c        |    2 +-
>  name-hash.c              |    4 ++--
>  preload-index.c          |    2 +-
>  read-cache.c             |   43 ++++++++++++++++++++++++-------------------
>  rerere.c                 |    2 +-
>  resolve-undo.c           |    2 +-
>  sha1_name.c              |    6 +++---
>  submodule.c              |    2 +-
>  tree.c                   |    1 +
>  unpack-trees.c           |   31 ++++++++++++++++---------------
>  25 files changed, 85 insertions(+), 79 deletions(-)
[...]
Show 23 quoted lines
> diff --git a/cache.h b/cache.h
> index cc5048c..5f93f22 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -128,6 +128,7 @@ struct cache_entry {
>  	unsigned int ce_gid;
>  	unsigned int ce_size;
>  	unsigned int ce_flags;
> +	unsigned int ce_namelen;
>  	unsigned char sha1[20];
>  	struct cache_entry *next;
>  	struct cache_entry *dir_next;
> @@ -205,15 +206,7 @@ static inline unsigned create_ce_flags(size_t len, unsigned stage)
>  	return (len | (stage << CE_STAGESHIFT));
>  }
>  
> -static inline size_t ce_namelen(const struct cache_entry *ce)
> -{
> -	size_t len = ce->ce_flags & CE_NAMEMASK;
> -	if (len < CE_NAMEMASK)
> -		return len;
> -	return strlen(ce->name + CE_NAMEMASK) + CE_NAMEMASK;
> -}

AFAICT almost all of the changes relate to the change from ce_namelen(ce) to ce->ce_namelen. What's stopping you from defining

#define ce_namelen(ce) ((ce)->ce_namelen)
as a simple compatibility macro?

I'm not sure whether such internal backwards-compatibility is desirable, but it would certainly make the patch much more reviewable. If Junio would rather see the conversion, maybe do it in a separate patch that simply substitutes the ce->ce_namelen for all the ce_namelen(ce)?

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Previous: Thomas GummererNext: Nguyen Thai Ngoc Duy
Message 2 of 18 in “Replace ce_namelen() with a ce_namelen field”
  1. Replace ce_namelen() with a ce_namelen fieldThomas Gummerer, Jul 4, 2012
  2. Thomas RastJul 4, 2012
  3. Nguyen Thai Ngoc DuyJul 4, 2012
  4. Nguyen Thai Ngoc DuyJul 4, 2012
  5. Junio C HamanoJul 4, 2012
  6. Introduction of a ce_namelen fieldThomas Gummerer, Jul 6, 2012
  7. 1/2 Strip namelen out of ce_flags into a ce_namelen fieldThomas Gummerer, Jul 6, 2012
  8. Junio C HamanoJul 9, 2012
  9. 0/3 Introduction of a ce_namelen fieldThomas Gummerer, Jul 11, 2012
  10. 1/3 read-cache.c: Handle long filenames correctlyThomas Gummerer, Jul 11, 2012
  11. Nguyen Thai Ngoc DuyJul 11, 2012
  12. Junio C HamanoJul 11, 2012
  13. 2/3 Strip namelen out of ce_flags into a ce_namelen fieldThomas Gummerer, Jul 11, 2012
  14. 3/3 Replace strlen() with ce_namelen()Thomas Gummerer, Jul 11, 2012
  15. Junio C HamanoJul 11, 2012
  16. Junio C HamanoJul 11, 2012
  17. 2/2 Replace strlen() with ce_namelen()Thomas Gummerer, Jul 6, 2012
  18. Junio C HamanoJul 9, 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.