commit 01f02e603b4cddeaf18b46197eacc16a88ec3d67 from: Omar Polo date: Sat Feb 04 22:24:55 2023 UTC fix objectformat=sha256; handle it for real! 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 #include +#include + #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; }