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

From:
Omar Polo <op@omarpolo.com>
Subject:
replace got_repo_get_gitconfig_extensions with has_extension
To:
gameoftrees@openbsd.org
Date:
Sun, 05 Feb 2023 16:45:24 +0100

Download raw body.

Thread
I'd like to change how extensions are stored in the struct repository
and got_repo_get_gitconfig_extensions gets in the way.  It's only used
in gotadmin to check if the "preciousObjects" extension is active, so
I'm replacing it with got_repo_has_extension, which makes its use even
nicer IMHO.

The change to how extensions are stored is because we currently assume
that extensions are either enabled or disabled (on/off), while they
could also be strings (objectformat=sha256 for example ;-)  That's a
follow-up diff tho.

ok?

diff 30bd0f8ea103b4839e685df105cbdf5a033b3ebd 7c3a2af1f17dda354dd8ae31d233458143646797
commit - 30bd0f8ea103b4839e685df105cbdf5a033b3ebd
commit + 7c3a2af1f17dda354dd8ae31d233458143646797
blob - b36b50b4e34e52be3dca38a6cc051e5fab489e0c
blob + e67fbcf1e5c4b6bc2399bde36796bf77749c9bed
--- gotadmin/gotadmin.c
+++ gotadmin/gotadmin.c
@@ -1218,8 +1218,6 @@ cmd_cleanup(int argc, char *argv[])
 	char scaled_before[FMT_SCALED_STRSIZE];
 	char scaled_after[FMT_SCALED_STRSIZE];
 	char scaled_diff[FMT_SCALED_STRSIZE];
-	char **extensions;
-	int nextensions, i;
 	int *pack_fds = NULL;
 
 	while ((ch = getopt(argc, argv, "anpqr:")) != -1) {
@@ -1273,15 +1271,11 @@ cmd_cleanup(int argc, char *argv[])
 	if (error)
 		goto done;
 
-	got_repo_get_gitconfig_extensions(&extensions, &nextensions,
-	    repo);
-	for (i = 0; i < nextensions; i++) {
-		if (strcasecmp(extensions[i], "preciousObjects") == 0) {
-			error = got_error_msg(GOT_ERR_GIT_REPO_EXT,
-			    "the preciousObjects Git extension is enabled; "
-			    "this implies that objects must not be deleted");
-			goto done;
-		}
+	if (got_repo_has_extension(repo, "preciousObjects")) {
+		error = got_error_msg(GOT_ERR_GIT_REPO_EXT,
+		    "the preciousObjects Git extension is enabled; "
+		    "this implies that objects must not be deleted");
+		goto done;
 	}
 
 	if (remove_lonely_packidx) {
blob - b507b207a3c163a0492722f3e42ea689dacbf7e6
blob + 53e99801ab01ad8804d048c5f59a94930e5ef10a
--- include/got_repository.h
+++ include/got_repository.h
@@ -50,9 +50,8 @@ const char *got_repo_get_gitconfig_owner(struct got_re
 /* Obtain repository owner name if parsed from gitconfig, else NULL. */
 const char *got_repo_get_gitconfig_owner(struct got_repository *);
 
-/* Obtain the list of enabled Git extensions parsed from gitconfig. */
-void got_repo_get_gitconfig_extensions(char ***, int *,
-    struct got_repository *);
+/* Query if a given Git extension is enabled in gitconfig. */
+int got_repo_has_extension(struct got_repository *, const char *);
 
 /* Information about one remote repository. */
 struct got_remote_repo {
blob - e754fef75fcc2d66013a8f85b64547acc0aea1c4
blob + 724a22a36f25053e940871eed29828527c813f87
--- lib/repository.c
+++ lib/repository.c
@@ -122,12 +122,17 @@ void
 	return repo->gitconfig_owner;
 }
 
-void
-got_repo_get_gitconfig_extensions(char ***extensions, int *nextensions,
-    struct got_repository *repo)
+int
+got_repo_has_extension(struct got_repository *repo, const char *ext)
 {
-	*extensions = repo->extensions;
-	*nextensions = repo->nextensions;
+	int i;
+
+	for (i = 0; i < repo->nextensions; ++i) {
+		if (!strcasecmp(ext, repo->extensions[i]))
+			return 1;
+	}
+
+	return 0;
 }
 
 int