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

Re: [PATCH 4/6] require_clean_work_tree: ensure that the index was read

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 29, 2016, 23:01 UTC
Message-ID
<xmqqmvjv6uxn.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<4122fc996a0076c2426d5e1325f2ce2810ef4f9b.1472137582.git.johannes.schindelin@gmx.de>
Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> The function would otherwise pretend to work fine, but totally ignore
> the working directory.
s/^T/Unless the caller has already read the index, t/;

I am not sure if it should be left as the responsibility of the caller (i.e. check the_index.initialized to bark at a caller that forgets to read from an index) or it is OK to unconditionally read from $GIT_INDEX_FILE in a truly libified function. A caller that wants to read from a custom (temporary) index file can choose to make sure it does read_inddex_from() from its custom file before calling this function, but if it forgets to do so, the penalty is severe than ordinary callers who would have read from the normal index file anyway.

Even though the word-lego issue would make this particular API not yet suitable, "who is responsible for reading the index" is an orthogonal issue that we can discuss even on this version, so I thought I'd bring it up.

Show 24 quoted lines
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  wt-status.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/wt-status.c b/wt-status.c
> index 792dda9..33dd76f 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -1804,6 +1804,13 @@ int require_clean_work_tree(const char *action, const char *hint, int gently)
>  	struct lock_file *lock_file = xcalloc(1, sizeof(*lock_file));
>  	int err = 0;
>  
> +	if (read_cache() < 0) {
> +		error(_("Could not read index"));
> +		if (gently)
> +			return -1;
> +		exit(1);
> +	}
> +
>  	hold_locked_index(lock_file, 0);
>  	refresh_cache(REFRESH_QUIET);
>  	update_index_if_able(&the_index, lock_file);
Previous: Johannes SchindelinNext: Junio C Hamano
Message 10 of 52 in “Pull out require_clean_work_tree() functionality from builtin/pull.c”
  1. 0/6 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Aug 25, 2016
  2. 1/6 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Aug 25, 2016
  3. Junio C HamanoAug 29, 2016
  4. 3/6 Make the require_clean_work_tree() function truly reusableJohannes Schindelin, Aug 25, 2016
  5. 2/6 pull: make code more similar to the shell script againJohannes Schindelin, Aug 25, 2016
  6. Junio C HamanoAug 29, 2016
  7. Johannes SchindelinAug 30, 2016
  8. Johannes SchindelinSep 9, 2016
  9. 4/6 require_clean_work_tree: ensure that the index was readJohannes Schindelin, Aug 25, 2016
  10. Junio C HamanoAug 29, 2016
  11. Junio C HamanoAug 30, 2016
  12. Johannes SchindelinAug 30, 2016
  13. Johannes SchindelinAug 30, 2016
  14. Junio C HamanoAug 30, 2016
  15. Johannes SchindelinAug 30, 2016
  16. 5/6 Export also the has_un{staged,committed}_changed() functionsJohannes Schindelin, Aug 25, 2016
  17. Junio C HamanoAug 29, 2016
  18. 6/6 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Aug 25, 2016
  19. 0/5 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Sep 11, 2016
  20. 1/5 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Sep 11, 2016
  21. 2/5 pull: make code more similar to the shell script againJohannes Schindelin, Sep 11, 2016
  22. Junio C HamanoSep 12, 2016
  23. 3/5 Make the require_clean_work_tree() function truly reusableJohannes Schindelin, Sep 11, 2016
  24. Junio C HamanoSep 12, 2016
  25. 4/5 Export also the has_un{staged,committed}_changed() functionsJohannes Schindelin, Sep 11, 2016
  26. 5/5 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Sep 11, 2016
  27. Junio C HamanoSep 12, 2016
  28. 0/6 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Oct 4, 2016
  29. 1/6 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Oct 4, 2016
  30. 2/6 pull: make code more similar to the shell script againJohannes Schindelin, Oct 4, 2016
  31. 3/6 Make the require_clean_work_tree() function reusableJohannes Schindelin, Oct 4, 2016
  32. Junio C HamanoOct 4, 2016
  33. Johannes SchindelinOct 5, 2016
  34. Junio C HamanoOct 5, 2016
  35. 4/6 Export also the has_un{staged,committed}_changed() functionsJohannes Schindelin, Oct 4, 2016
  36. Junio C HamanoOct 4, 2016
  37. Jakub NarębskiOct 5, 2016
  38. 5/6 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Oct 4, 2016
  39. 6/6 wt-status: begin error messages with lower-caseJohannes Schindelin, Oct 4, 2016
  40. Jakub NarębskiOct 5, 2016
  41. Johannes SchindelinOct 6, 2016
  42. Junio C HamanoOct 4, 2016
  43. Johannes SchindelinOct 5, 2016
  44. 0/6 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Oct 7, 2016
  45. 1/6 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Oct 7, 2016
  46. 2/6 pull: make code more similar to the shell script againJohannes Schindelin, Oct 7, 2016
  47. 3/6 wt-status: make the require_clean_work_tree() function reusableJohannes Schindelin, Oct 7, 2016
  48. 4/6 wt-status: export also the has_un{staged,committed}_changes() functionsJohannes Schindelin, Oct 7, 2016
  49. 5/6 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Oct 7, 2016
  50. 6/6 wt-status: begin error messages with lower-caseJohannes Schindelin, Oct 7, 2016
  51. Junio C HamanoOct 7, 2016
  52. Jakub NarębskiOct 7, 2016

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.