Commit Diff


commit - dfe0a3d83340456fd269a59991dc47c4ac7e3ad3
commit + 01f02e603b4cddeaf18b46197eacc16a88ec3d67
blob - 69b8cbb93b53f21dbe2c44280bb25dc5e5c23beb
blob + 0f2147ddabfceb91722ee79c2285708b832c213d
--- lib/got_lib_repository.h
+++ lib/got_lib_repository.h
@@ -152,7 +152,7 @@ const struct got_error*got_repo_cache_raw_object(struc
     struct got_object_id *, struct got_raw_object *);
 struct got_raw_object *got_repo_get_cached_raw_object(struct got_repository *,
     struct got_object_id *);
-int got_repo_is_packidx_filename(const char *, size_t);
+int got_repo_is_packidx_filename(struct got_repository *, const char *, size_t);
 int got_repo_check_packidx_bloom_filter(struct got_repository *,
     const char *, struct got_object_id *);
 const struct got_error *got_repo_search_packidx(struct got_packidx **, int *,
blob - f13652a605ba2f6beab93cc7c60068345ebb74f7
blob + 8f71f750052c53bc4fb517f377565b417e2bafec
--- lib/read_gitconfig.c
+++ lib/read_gitconfig.c
@@ -122,9 +122,9 @@ got_repo_read_gitconfig(int *gitconfig_repository_form
 				(*extensions)[(*nextensions)] = extstr;
 				(*nextensions)++;
 			}
-			if (objectformat && !strcmp(val, "objectformat")) {
+			if (objectformat && !strcmp(ext, "sha256")) {
 				free(*objectformat);
-				*objectformat = strdup(ext);
+				*objectformat = strdup(val);
 				if (*objectformat == NULL) {
 					err = got_error_from_errno("strdup");
 					goto done;
blob - 86cff0ce399b31d574b715bb1b496b778038975d
blob + 0cb03cf8f1a11c0c81f2761391926514bd8793dc
--- lib/read_gitconfig_privsep.c
+++ lib/read_gitconfig_privsep.c
@@ -32,6 +32,8 @@
 #include <imsg.h>
 #include <unistd.h>
 
+#include <string.h>
+
 #include "got_error.h"
 #include "got_object.h"
 #include "got_repository.h"
@@ -144,6 +146,8 @@ got_repo_read_gitconfig(int *gitconfig_repository_form
 				    ibuf);
 				if (err)
 					goto done;
+				if (!strcmp(ext, "sha256"))
+					*object_format = ext;
 				(*extensions)[i] = ext;
 			}
 		}
blob - 12b9dc0ae6a49c8188054c596ce11355019ce40f
blob + 58654437b08e0b54366f259acaa637015d7e2767
--- lib/repository.c
+++ lib/repository.c
@@ -656,7 +656,6 @@ read_gitconfig(struct got_repository *repo, const char
 	}
 
 done:
-	free(object_format);
 	free(repo_gitconfig_path);
 	return err;
 }
@@ -681,6 +680,7 @@ static const char *const repo_extensions[] = {
 	"noop",			/* Got supports repository format version 1. */
 	"preciousObjects",	/* Supported by gotadmin cleanup. */
 	"worktreeConfig",	/* Got does not care about Git work trees. */
+	"sha256",		/* hack */
 };
 
 const struct got_error *
@@ -1048,16 +1048,22 @@ cache_packidx(struct got_repository *repo, struct got_
 }
 
 int
-got_repo_is_packidx_filename(const char *name, size_t len)
+got_repo_is_packidx_filename(struct got_repository *repo, const char *name,
+    size_t len)
 {
+	size_t hashlen = SHA1_DIGEST_STRING_LENGTH;
+
+	if (repo->algo == GOT_HASH_SHA256)
+		hashlen = SHA256_DIGEST_STRING_LENGTH;
+
 	if (len != GOT_PACKIDX_NAMELEN)
 		return 0;
 
 	if (strncmp(name, GOT_PACK_PREFIX, strlen(GOT_PACK_PREFIX)) != 0)
 		return 0;
 
-	if (strcmp(name + strlen(GOT_PACK_PREFIX) +
-	    SHA1_DIGEST_STRING_LENGTH - 1, GOT_PACKIDX_SUFFIX) != 0)
+	if (strcmp(name + strlen(GOT_PACK_PREFIX) + hashlen - 1,
+	    GOT_PACKIDX_SUFFIX) != 0)
 		return 0;
 
 	return 1;
@@ -1307,7 +1313,8 @@ got_repo_list_packidx(struct got_pathlist_head *packid
 	repo->pack_path_mtime.tv_nsec = sb.st_mtim.tv_nsec;
 
 	while ((dent = readdir(packdir)) != NULL) {
-		if (!got_repo_is_packidx_filename(dent->d_name, dent->d_namlen))
+		if (!got_repo_is_packidx_filename(repo, dent->d_name,
+		    dent->d_namlen))
 			continue;
 
 		if (asprintf(&path_packidx, "%s/%s", GOT_OBJECTS_PACK_DIR,
@@ -2352,7 +2359,8 @@ got_repo_get_packfile_info(int *npackfiles, int *nobje
 	}
 
 	while ((dent = readdir(packdir)) != NULL) {
-		if (!got_repo_is_packidx_filename(dent->d_name, dent->d_namlen))
+		if (!got_repo_is_packidx_filename(repo, dent->d_name,
+		    dent->d_namlen))
 			continue;
 
 		if (asprintf(&path_packidx, "%s/%s", GOT_OBJECTS_PACK_DIR,
blob - 7e0ddba625186dea09ae82437000192bbe37b659
blob + eccc6809e30b6faec649f38baf03d8d883381d2c
--- lib/repository_admin.c
+++ lib/repository_admin.c
@@ -1277,7 +1277,8 @@ got_repo_remove_lonely_packidx(struct got_repository *
 				goto done;
 		}
 
-		if (!got_repo_is_packidx_filename(dent->d_name, dent->d_namlen))
+		if (!got_repo_is_packidx_filename(repo, dent->d_name,
+		    dent->d_namlen))
 			continue;
 
 		err = got_packidx_get_packfile_path(&pack_relpath,
blob - 43746dded9d73272ea80f7c66ba0647fcd6eb3f9
blob + 2608d230472ca212437cbdf4daf68d8c8da27ae6
--- libexec/got-read-gitconfig/got-read-gitconfig.c
+++ libexec/got-read-gitconfig/got-read-gitconfig.c
@@ -285,7 +285,8 @@ gitconfig_extensions_request(struct imsgbuf *ibuf,
 	TAILQ_FOREACH(node, &tags->fields, link) {
 		val = got_gitconfig_get_str(gitconfig, "extensions",
 		    node->field);
-		if (get_boolean_val(val))
+		if (get_boolean_val(val) ||
+		    !strcmp(node->field, "objectformat"))
 			nextensions++;
 	}
 
@@ -296,8 +297,10 @@ gitconfig_extensions_request(struct imsgbuf *ibuf,
 	TAILQ_FOREACH(node, &tags->fields, link) {
 		val = got_gitconfig_get_str(gitconfig, "extensions",
 		    node->field);
-		if (get_boolean_val(val)) {
-			err = send_gitconfig_str(ibuf, node->field);
+		if (get_boolean_val(val) ||
+		    !strcmp(node->field, "objectformat")) {
+			/* HACK for objectformat: send 'sha256' */
+			err = send_gitconfig_str(ibuf, val);
 			if (err)
 				goto done;
 		}