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

Re: [PATCH v8 1/2] submodule refactor: use git_pathdup_submodule() in add_submodule_odb()

From
Jeff King <peff@peff.net>
Date
Sep 11, 2015, 07:53 UTC
Message-ID
<20150911075340.GA18917@sigill.intra.peff.net>
In-Reply-To
<1441922231-18270-2-git-send-email-max@max630.net>
On Fri, Sep 11, 2015 at 12:57:10AM +0300, Max Kirillov wrote:
Show 11 quoted lines
> diff --git a/submodule.c b/submodule.c
> index 245ed4d..7340069 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -119,43 +119,37 @@ void stage_updated_gitmodules(void)
>  
>  static int add_submodule_odb(const char *path)
>  {
> -	struct strbuf objects_directory = STRBUF_INIT;
>  	struct alternate_object_database *alt_odb;
> +	char *objects_directory;

Now that we have strbuf_git_path_submodule(), is there any reason to switch this away from a strbuf?

That saves us a bunch of strlen calls, and it makes the diff way shorter. My ulterior motive is that the result also conflicts a lot less with some patches I'm about to post to harden the malloc and strcpy calls below.

That would make your patch look something like:
diff --git a/submodule.c b/submodule.c
index 245ed4d..5e5a46f 100644
--- a/submodule.c
+++ b/submodule.c
@@ -122,15 +122,8 @@ static int add_submodule_odb(const char *path)
 	struct strbuf objects_directory = STRBUF_INIT;
 	struct alternate_object_database *alt_odb;
 	int ret = 0;
-	const char *git_dir;
 
-	strbuf_addf(&objects_directory, "%s/.git", path);
-	git_dir = read_gitfile(objects_directory.buf);
-	if (git_dir) {
-		strbuf_reset(&objects_directory);
-		strbuf_addstr(&objects_directory, git_dir);
-	}
-	strbuf_addstr(&objects_directory, "/objects/");
+	strbuf_git_path_submodule(&objects_directory, path, "objects/");
 	if (!is_directory(objects_directory.buf)) {
 		ret = -1;
 		goto done;

-Peff
Previous: Max KirillovNext: Max Kirillov
Message 18 of 23 in “path: implement common_dir handling in git_path_submodule()”
  1. 0/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Mar 18, 2015
  2. 1/2 submodule refactor: use git_path_submodule() in add_submodule_odb()Max Kirillov, Mar 18, 2015
  3. 2/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Mar 18, 2015
  4. 0/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Aug 3, 2015
  5. 1/2 submodule refactor: use git_path_submodule() in add_submodule_odb()Max Kirillov, Aug 3, 2015
  6. Junio C HamanoAug 3, 2015
  7. 2/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Aug 3, 2015
  8. 0/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Aug 4, 2015
  9. 1/2 submodule refactor: use git_path_submodule() in add_submodule_odb()Max Kirillov, Aug 4, 2015
  10. 2/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Aug 4, 2015
  11. 0/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Aug 4, 2015
  12. 1/2 submodule refactor: use git_path_submodule() in add_submodule_odb()Max Kirillov, Aug 4, 2015
  13. Stefan BellerAug 18, 2015
  14. 2/2 path: implement common_dir handling in git_path_submodule()Max Kirillov, Aug 4, 2015
  15. Stefan BellerAug 17, 2015
  16. 0/2 Submodule object pathMax Kirillov, Sep 10, 2015
  17. 1/2 submodule refactor: use git_pathdup_submodule() in add_submodule_odb()Max Kirillov, Sep 10, 2015
  18. Jeff KingSep 11, 2015
  19. Max KirillovSep 13, 2015
  20. 2/2 path: implement common_dir handling in git_pathdup_submodule()Max Kirillov, Sep 10, 2015
  21. Junio C HamanoSep 11, 2015
  22. Max KirillovSep 13, 2015
  23. Junio C HamanoSep 14, 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.