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

Re: [PATCH 02/14] tempfile: a new module for handling temporary files

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 10, 2015, 17:36 UTC
Message-ID
<xmqqy4jrlb32.fsf@gitster.dls.corp.google.com>
In-Reply-To
<f7681cfc8ee4f1f5eba50f315f8e0ed0fed883a8.1433751986.git.mhagger@alum.mit.edu>
Michael Haggerty <mhagger@alum.mit.edu> writes:
Show 12 quoted lines
> diff --git a/builtin/add.c b/builtin/add.c
> index df5135b..aaa9ce4 100644
> --- a/builtin/add.c
> +++ b/builtin/add.c
> @@ -5,6 +5,7 @@
>   */
>  #include "cache.h"
>  #include "builtin.h"
> +#include "tempfile.h"
>  #include "lockfile.h"
>  #include "dir.h"
>  #include "pathspec.h"

It is a bit sad that all users of lockfile.h has to include tempfile.h; even when trying to find out something as basic as the name of the file on which the lock is held, they need to look at lk->tempfile.filename and that requires inclusion of tempfile.h

It is a good idea to have tempfile as a separate module, as it allows new callers to use the same "clean-on-exit" infrastructure on things that are not locks, i.e. they can include tempfile.h without having to include lockfile.h, but I have to wonder if it is better to include tempfile.h from inside lockfile.h (which is alrady done) and allow users of lockfile API to assume that inclusion will always stay there. After all, if they are taking locks, they already know lk->tempfile is the mechanism through which they need to learn about various aspects of the underlying files.

Show 28 quoted lines
> @@ -101,60 +72,17 @@ static void resolve_symlink(struct strbuf *path)
>  /* Make sure errno contains a meaningful value on error */
>  static int lock_file(struct lock_file *lk, const char *path, int flags)
>  {
> ...
> +	int fd;
> +	struct strbuf filename = STRBUF_INIT;
>  
> -	if (flags & LOCK_NO_DEREF) {
> -		strbuf_add_absolute_path(&lk->filename, path);
> -	} else {
> -		struct strbuf resolved_path = STRBUF_INIT;
> +	strbuf_addstr(&filename, path);
> +	if (!(flags & LOCK_NO_DEREF))
> +		resolve_symlink(&filename);
>  
> -		strbuf_add(&resolved_path, path, pathlen);
> -		resolve_symlink(&resolved_path);
> -		strbuf_add_absolute_path(&lk->filename, resolved_path.buf);
> -		strbuf_release(&resolved_path);
> -	}
> ...
> -	return lk->fd;
> +	strbuf_addstr(&filename, LOCK_SUFFIX);
> +	fd = create_tempfile(&lk->tempfile, filename.buf);
> +	strbuf_release(&filename);
> +	return fd;
>  }

This was the only part of this entire patch that needed more than cursory reading ;-) and it looks correct.

Thanks.
Previous: Michael HaggertyNext: Michael Haggerty
Message 4 of 26 in “Introduce a tempfile module”
  1. 00/14 Introduce a tempfile moduleMichael Haggerty, Jun 8, 2015
  2. 01/14 Move lockfile API documentation to lockfile.hMichael Haggerty, Jun 8, 2015
  3. 02/14 tempfile: a new module for handling temporary filesMichael Haggerty, Jun 8, 2015
  4. Junio C HamanoJun 10, 2015
  5. Michael HaggertyJun 10, 2015
  6. Junio C HamanoJun 10, 2015
  7. 03/14 lockfile: remove some redundant functionsMichael Haggerty, Jun 8, 2015
  8. Junio C HamanoJun 10, 2015
  9. Johannes SixtJun 10, 2015
  10. 04/14 commit_lock_file(): use get_locked_file_path()Michael Haggerty, Jun 8, 2015
  11. 05/14 register_tempfile_object(): new function, extracted from create_tempfile()Michael Haggerty, Jun 8, 2015
  12. 06/14 tempfile: add several functions for creating temporary filesMichael Haggerty, Jun 8, 2015
  13. Junio C HamanoJun 10, 2015
  14. Michael HaggertyAug 10, 2015
  15. 07/14 register_tempfile(): new function to handle an existing temporary fileMichael Haggerty, Jun 8, 2015
  16. Junio C HamanoJun 10, 2015
  17. Michael HaggertyAug 10, 2015
  18. 08/14 write_shared_index(): use tempfile moduleMichael Haggerty, Jun 8, 2015
  19. Junio C HamanoJun 10, 2015
  20. 09/14 setup_temporary_shallow(): use tempfile moduleMichael Haggerty, Jun 8, 2015
  21. 10/14 diff: use tempfile moduleMichael Haggerty, Jun 8, 2015
  22. 11/14 lock_repo_for_gc(): compute the path to "gc.pid" only onceMichael Haggerty, Jun 8, 2015
  23. 12/14 gc: use tempfile module to handle gc.pid fileMichael Haggerty, Jun 8, 2015
  24. 13/14 credential-cache--daemon: delete socket from main()Michael Haggerty, Jun 8, 2015
  25. 14/14 credential-cache--daemon: use tempfile moduleMichael Haggerty, Jun 8, 2015
  26. Junio C HamanoJun 10, 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.