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

Re: [PATCH 01/24] dir.c: optionally compute sha-1 of a .gitignore file

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 11, 2015, 21:23 UTC
Message-ID
<xmqqiof8ta6f.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1423385748-19825-2-git-send-email-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
Show 34 quoted lines
> -int add_excludes_from_file_to_list(const char *fname,
> -				   const char *base,
> -				   int baselen,
> -				   struct exclude_list *el,
> -				   int check_index)
> +/*
> + * Given a file with name "fname", read it (either from disk, or from
> + * the index if "check_index" is non-zero), parse it and store the
> + * exclude rules in "el".
> + *
> + * If "ss" is not NULL, compute SHA-1 of the exclude file and fill
> + * stat data from disk (only valid if add_excludes returns zero). If
> + * ss_valid is non-zero, "ss" must contain good value as input.
> + */
> +static int add_excludes(const char *fname, const char *base, int baselen,
> +			struct exclude_list *el, int check_index,
> +			struct sha1_stat *sha1_stat)
> ...
> @@ -571,6 +588,21 @@ int add_excludes_from_file_to_list(const char *fname,
>  		}
>  		buf[size++] = '\n';
>  		close(fd);
> +		if (sha1_stat) {
> +			int pos;
> +			if (sha1_stat->valid &&
> +			    !match_stat_data(&sha1_stat->stat, &st))
> +				; /* no content change, ss->sha1 still good */
> +			else if (check_index &&
> +				 (pos = cache_name_pos(fname, strlen(fname))) >= 0 &&
> +				 !ce_stage(active_cache[pos]) &&
> +				 ce_uptodate(active_cache[pos]))
> +				hashcpy(sha1_stat->sha1, active_cache[pos]->sha1);
> +			else
> +				hash_sha1_file(buf, size, "blob", sha1_stat->sha1);
I do not think this would work well on DOS.

This helper function originally is meant to work *only* on the checked out representation of the file and that is what is read by read_in_full(), and that is the reason why it handles the case where the contents of buf[] happens to be CRLF terminated in the function.

If you want to detect the content changes across working tree, index and the tree objects by reusing hash_sha1_file(), however, you must not feed the checked out (aka "smudged") representation to it. You'd need to turn it into "cleaned" representation by doing the equivalent of calling index_path(). Some helpers in the callchain that originates from index_path() might directly be reusable for your purpose.

Previous: Nguyễn Thái Ngọc DuyNext: Duy Nguyen
Message 3 of 30 in “nd/untracked-cache updates”
  1. 00/24 nd/untracked-cache updatesNguyễn Thái Ngọc Duy, Feb 8, 2015
  2. 01/24 dir.c: optionally compute sha-1 of a .gitignore fileNguyễn Thái Ngọc Duy, Feb 8, 2015
  3. Junio C HamanoFeb 11, 2015
  4. Duy NguyenFeb 16, 2015
  5. Junio C HamanoFeb 16, 2015
  6. 02/24 untracked cache: record .gitignore information and dir hierarchyNguyễn Thái Ngọc Duy, Feb 8, 2015
  7. 03/24 untracked cache: initial untracked cache validationNguyễn Thái Ngọc Duy, Feb 8, 2015
  8. 04/24 untracked cache: invalidate dirs recursively if .gitignore changesNguyễn Thái Ngọc Duy, Feb 8, 2015
  9. 05/24 untracked cache: make a wrapper around {open,read,close}dir()Nguyễn Thái Ngọc Duy, Feb 8, 2015
  10. 06/24 untracked cache: record/validate dir mtime and reuse cached outputNguyễn Thái Ngọc Duy, Feb 8, 2015
  11. 07/24 untracked cache: mark what dirs should be recursed/savedNguyễn Thái Ngọc Duy, Feb 8, 2015
  12. 08/24 untracked cache: don't open non-existent .gitignoreNguyễn Thái Ngọc Duy, Feb 8, 2015
  13. 09/24 ewah: add convenient wrapper ewah_serialize_strbuf()Nguyễn Thái Ngọc Duy, Feb 8, 2015
  14. 10/24 untracked cache: save to an index extensionNguyễn Thái Ngọc Duy, Feb 8, 2015
  15. Stefan BellerMar 7, 2015
  16. 11/24 untracked cache: load from UNTR index extensionNguyễn Thái Ngọc Duy, Feb 8, 2015
  17. Junio C HamanoFeb 9, 2015
  18. 12/24 untracked cache: invalidate at index addition or removalNguyễn Thái Ngọc Duy, Feb 8, 2015
  19. 13/24 read-cache.c: split racy stat test to a separate functionNguyễn Thái Ngọc Duy, Feb 8, 2015
  20. 14/24 untracked cache: avoid racy timestampsNguyễn Thái Ngọc Duy, Feb 8, 2015
  21. 15/24 untracked cache: print stats with $GIT_TRACE_UNTRACKED_STATSNguyễn Thái Ngọc Duy, Feb 8, 2015
  22. 16/24 untracked cache: mark index dirty if untracked cache is updatedNguyễn Thái Ngọc Duy, Feb 8, 2015
  23. 17/24 untracked-cache: temporarily disable with $GIT_DISABLE_UNTRACKED_CACHENguyễn Thái Ngọc Duy, Feb 8, 2015
  24. 18/24 status: enable untracked cacheNguyễn Thái Ngọc Duy, Feb 8, 2015
  25. 19/24 update-index: manually enable or disable untracked cacheNguyễn Thái Ngọc Duy, Feb 8, 2015
  26. 20/24 update-index: test the system before enabling untracked cacheNguyễn Thái Ngọc Duy, Feb 8, 2015
  27. 21/24 t7063: tests for untracked cacheNguyễn Thái Ngọc Duy, Feb 8, 2015
  28. 22/24 mingw32: add uname()Nguyễn Thái Ngọc Duy, Feb 8, 2015
  29. 23/24 untracked cache: guard and disable on system changesNguyễn Thái Ngọc Duy, Feb 8, 2015
  30. 24/24 git-status.txt: advertisement for untracked cacheNguyễn Thái Ngọc Duy, Feb 8, 2015

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.