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

Re: [PATCH v4 23/26] initdb: move safe_create_dir into common code

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 21, 2015, 19:38 UTC
Message-ID
<xmqq37x4vwon.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1444938410-2345-24-git-send-email-dturner@twopensource.com>
David Turner <dturner@twopensource.com> writes:
> In a moment, we'll create initdb functions for ref backends, and code
> from initdb that calls this function needs to move into the files
> backend.  So this function needs to be public.

OK, but unlike the static function, being in public interface part can invite mistakes of using this for things outside $GIT_DIR [*1*]. Let's have "Never use this for working tree directories" somewhere in its docstring.

Other than that, this one, 24/26 and 25/26 looked fine to me.
Thanks.
[Footnote]

*1* Anything created by this function and everything underneath are repository metadata and this function must not be used to do with anything with the working tree, as it is clear with the use of adjust_shared_perm().

Show 37 quoted lines
> diff --git a/cache.h b/cache.h
> index 9a905a8..1d8a051 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -1737,4 +1737,9 @@ void stat_validity_update(struct stat_validity *sv, int fd);
>  int versioncmp(const char *s1, const char *s2);
>  void sleep_millisec(int millisec);
>  
> +/*
> + * Create a directory and (if share is nonzero) adjust its permissions
> + * according to the shared_repository setting.
> + */
> +void safe_create_dir(const char *dir, int share);
>  #endif /* CACHE_H */
> diff --git a/path.c b/path.c
> index 212695a..9e0283c 100644
> --- a/path.c
> +++ b/path.c
> @@ -723,6 +723,18 @@ int adjust_shared_perm(const char *path)
>  	return 0;
>  }
>  
> +void safe_create_dir(const char *dir, int share)
> +{
> +	if (mkdir(dir, 0777) < 0) {
> +		if (errno != EEXIST) {
> +			perror(dir);
> +			exit(1);
> +		}
> +	}
> +	else if (share && adjust_shared_perm(dir))
> +		die(_("Could not make %s writable by group"), dir);
> +}
> +
>  static int have_same_root(const char *path1, const char *path2)
>  {
>  	int is_abs1, is_abs2;
Previous: David TurnerNext: David Turner
Message 30 of 35 in “refs backend pre-vtable patches”
  1. 00/26 refs backend pre-vtable patchesDavid Turner, Oct 15, 2015
  2. 01/26 refs.c: create a public version of verify_refname_availableDavid Turner, Oct 15, 2015
  3. 02/26 refs: make repack_without_refs and is_branch publicDavid Turner, Oct 15, 2015
  4. Michael HaggertyOct 16, 2015
  5. David TurnerOct 19, 2015
  6. 03/26 refs-be-files.c: rename refs to refs-be-filesDavid Turner, Oct 15, 2015
  7. Michael HaggertyOct 16, 2015
  8. 04/26 refs.c: add a new refs.c file to hold all common refs codeDavid Turner, Oct 15, 2015
  9. 05/26 refs.c: move update_ref to refs.cDavid Turner, Oct 15, 2015
  10. David TurnerOct 21, 2015
  11. 06/26 refs.c: move delete_pseudoref and delete_ref to the common codeDavid Turner, Oct 15, 2015
  12. David TurnerOct 21, 2015
  13. 07/26 refs.c: move read_ref_at to the common refs fileDavid Turner, Oct 15, 2015
  14. 08/26 refs.c: move the hidden refs functions to the common codeDavid Turner, Oct 15, 2015
  15. 09/26 refs.c: move dwim and friend functions to the common refs codeDavid Turner, Oct 15, 2015
  16. 10/26 refs.c: move warn_if_dangling_symref* to the common codeDavid Turner, Oct 15, 2015
  17. 11/26 refs.c: move read_ref, read_ref_full and ref_exists to the common codeDavid Turner, Oct 15, 2015
  18. 12/26 refs.c: move resolve_refdup to commonDavid Turner, Oct 15, 2015
  19. 13/26 refs.c: move check_refname_format to the common codeDavid Turner, Oct 15, 2015
  20. 14/26 refs.c: move is_branch to the common codeDavid Turner, Oct 15, 2015
  21. 15/26 refs.c: move prettify_refname to the common codeDavid Turner, Oct 15, 2015
  22. 16/26 refs.c: move ref iterators to the common codeDavid Turner, Oct 15, 2015
  23. 17/26 refs.c: move head_ref_namespaced to the common codeDavid Turner, Oct 15, 2015
  24. 18/26 refs: move transaction functions into common codeDavid Turner, Oct 15, 2015
  25. 19/26 refs.c: move refname_is_safe to the common codeDavid Turner, Oct 15, 2015
  26. 20/26 refs.c: move copy_msg to the common codeDavid Turner, Oct 15, 2015
  27. 21/26 refs.c: move peel_object to the common codeDavid Turner, Oct 15, 2015
  28. 22/26 refs.c: move should_autocreate_reflog to common codeDavid Turner, Oct 15, 2015
  29. 23/26 initdb: move safe_create_dir into common codeDavid Turner, Oct 15, 2015
  30. Junio C HamanoOct 21, 2015
  31. David TurnerOct 21, 2015
  32. 24/26 refs: make files_log_ref_write functions publicDavid Turner, Oct 15, 2015
  33. 25/26 refs: break out ref conflict checksDavid Turner, Oct 15, 2015
  34. 26/26 introduce "extensions" form of core.repositoryformatversionDavid Turner, Oct 15, 2015
  35. Junio C HamanoOct 21, 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.