"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Omar Polo <op@omarpolo.com>
Subject:
Re: make it possible to ignore Git config file
To:
Stefan Sperling <stsp@stsp.name>
Cc:
gameoftrees@openbsd.org
Date:
Sat, 23 Jul 2022 17:33:06 +0200

Download raw body.

Thread
Stefan Sperling <stsp@stsp.name> wrote:
> Omar found a test failure in test_rebase_no_author_info(), where the
> author from ~/.gitconfig will be used instead of having no author set.
> 
> This patch adds a switch we can use to ignore Git configuration settings.
> Git's config file contains some data we must not ignore, such as the
> repository format version (smart idea to store this in the user-facing
> config file, isn't it), and any enabled repository format extensions
> (if any of them are enabled then we must not touch the repository).
> 
> Once this is in, we can fix test_rebase_no_author_info() by setting
> this variable. It might also be useful in other situations, so I decided
> to document it instead of making it a hidden setting.
> 
> ok?

i've ok'd this too fast, sorry.

there are two things to fix

> diff /home/stsp/src/got
> commit - 2c8899b952f67f90ab3a26b4331491832fe93c8a
> path + /home/stsp/src/got
> blob - ea412540fd202511367fedfbeaa5f864e0051758
> file + got/got.1
> --- got/got.1
> +++ got/got.1
> @@ -2750,7 +2750,7 @@ argument corresponds to the work tree's root directory
>  for all tracked files.
>  .El
>  .Sh ENVIRONMENT
> -.Bl -tag -width GOT_AUTHOR
> +.Bl -tag -width GOT_IGNORE_GITCONFIG
>  .It Ev GOT_AUTHOR
>  The author's name and email address, such as
>  .Dq An Flan Hacker Aq Mt flan_hacker@openbsd.org .
> @@ -2806,6 +2806,9 @@ The default limit on the number of commits traversed b
>  .Cm got log .
>  If set to zero, the limit is unbounded.
>  This variable will be silently ignored if it is set to a non-numeric value.
> +.It Ev GOT_IGNORE_GITCONFIG
> +If this variable is set then any remote repository definitions or author
> +information found in Git configuration files will be ignored.
>  .El
>  .Sh FILES
>  .Bl -tag -width packed-refs -compact
> blob - c16937331653c5414c3a3ed0215a2b9f3193f106
> file + lib/repository.c
> --- lib/repository.c
> +++ lib/repository.c
> @@ -678,6 +678,23 @@ read_gitconfig(struct got_repository *repo, const char
>  	    repo_gitconfig_path);
>  	if (err)
>  		goto done;
> +
> +	if (getenv("GOT_IGNORE_GITCONFIG") != NULL) {
> +		int i;
> +
> +		for (i = 0; i < repo->ngitconfig_remotes; i++) {
> +			got_repo_free_remote_repo_data(
> +			    &repo->gitconfig_remotes[i]);
> +		}
> +		free(repo->gitconfig_remotes);

needs to be set to NULL too to avoid a double free in got_repo_close
(found the hard way)

> +		repo->ngitconfig_remotes = 0;
> +
> +		free(repo->gitconfig_author_name);
> +		repo->gitconfig_author_name = NULL;
> +		free(repo->gitconfig_author_email);
> +		repo->gitconfig_author_email = NULL;

should reset also the global fields, otherwise it doesn't fix the issue
with the test.

> +	}
> +
>  done:
>  	free(repo_gitconfig_path);
>  	return err;

diff /home/op/w/got
commit - dd2ffb6aab71d23f9c6afaa547b597deed3f43ad
path + /home/op/w/got
blob - 5f060f8735c6ad9bc96ad7421ce6a62402cc7d5c
file + lib/repository.c
--- lib/repository.c
+++ lib/repository.c
@@ -687,12 +687,18 @@ read_gitconfig(struct got_repository *repo, const char
 			    &repo->gitconfig_remotes[i]);
 		}
 		free(repo->gitconfig_remotes);
+		repo->gitconfig_remotes = NULL;
 		repo->ngitconfig_remotes = 0;
 
 		free(repo->gitconfig_author_name);
 		repo->gitconfig_author_name = NULL;
 		free(repo->gitconfig_author_email);
 		repo->gitconfig_author_email = NULL;
+
+		free(repo->global_gitconfig_author_name);
+		repo->global_gitconfig_author_name = NULL;
+		free(repo->global_gitconfig_author_email);
+		repo->global_gitconfig_author_email = NULL;
 	}
 
 done: