From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from fout-b4-smtp.messagingengine.com (fout-b4-smtp.messagingengine.com [202.12.124.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 073AE20766C for ; Thu, 17 Jul 2025 04:57:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.147 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752728224; cv=none; b=FhTuR1pYqT3Bhoio9LfZ5li2Bdg6/XCKdfKuLbxhBuLKZ0c2A9Oj3+GyGT8N4pdjMYlNRP6VdDTFAI2rTW8cvG5e3u/BB5qmPXvy9j9gk6Wnqkhb6mhk4mveZrftGrUv+qN6FFGbpQinPeTlhltaD3uZ8GO7cjzit6tNOZw51SA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752728224; c=relaxed/simple; bh=kZk9QFkRP3Prv/5Qo5XdBaWpFgoC05SSbmh4aNCPhOc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SvcbHJ7fMlReO78j5JhHdwLDwCMOR1gXbdl5B2us0p3Wf/3xPNt61kZrskngDQEoO9hWFJqP7QVtDiCMO+S94KtqPvuG46ezzT4WSWLPPliIqtQIDg8+ByG9BzKA0XEiyWx1ySsVJ9VwufC9soq/qQ5oLGJBQRzFmrrzKvpkq00= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=x7IVAbW0; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Aup+hGHk; arc=none smtp.client-ip=202.12.124.147 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="x7IVAbW0"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Aup+hGHk" Received: from phl-compute-09.internal (phl-compute-09.phl.internal [10.202.2.49]) by mailfout.stl.internal (Postfix) with ESMTP id 4EA981D0019A; Thu, 17 Jul 2025 00:57:02 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-09.internal (MEProxy); Thu, 17 Jul 2025 00:57:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1752728222; x=1752814622; bh=2NRySfSQUZ3CW9Ig/SKjQFfxqnLXTX5fxBC9fE1gzyk=; b= x7IVAbW0QNKXcGF4IBuj4/clSpKc3PCcrfAPe0xWq/OsiRt6/afd95q9V1QCPCR8 bIksveKLTzF9m2+pzClUV3fYsf1jVDqMhURZpo77aF6xxHK6FjXoXlFi7FRwTsNv Ia4BHqHc6Q7w5LdBLguT3sE6VCyd1pFvUD7bUXy7EVdZ/SQaVtj7kXEkub/VadDv 1/kM8lWaDqe+ui1Nbn+AcGEQLV948lKv7smDqhJ4yE4SiSC4mFVIHSg5/O0y9ZuA CAAoCToHGbqALVH6hOParSoChQEi4wtXSy/2lZKgbDzfWFdA/CE/8A5tNXAIHtRs huu2enJJa8nkJJljfCXVpw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1752728222; x= 1752814622; bh=2NRySfSQUZ3CW9Ig/SKjQFfxqnLXTX5fxBC9fE1gzyk=; b=A up+hGHkX7oyKk/m+D/LQp0yLm7j9uF798qxAyuF/tZOOAG1Rm+avZvBGTcEy0pXI Mazpyf2sz8V0gtI1vMqbCa1WqrmFvNoeW0nKAdrc/luUo5ApT+tBqpnZvvL3eXlw RCGdDi/jGz3AXPCTSX7mkdfl5LtmYAwM1S7ttQpkx1lJP9VjbEXCwlgYsaKdWmen Tx4Ui8Jd4lvN0zNsDMVltKop69cqjJvhMccUFV5NyX9H/Frgpny/00G3zrkzn7pK HTEN4urDxgD2ux/x0+zsUjqXRg6I95UrBYKOl8kAOs8XwDrcT0L2CD1kELd2wK7C QRkPps2tj2h1hhlVwzFkQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdefgdehleeilecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpefhfffugggtgffkfhgjvfevofesthejredtredtjeenucfhrhhomheprfgrthhrihgt khcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvghrnh epffeuiedujedvkeehuedvkeefffeivdeuleetkeduheejteekgedvudfgtdfgieelnecu vehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhssehpkh hsrdhimhdpnhgspghrtghpthhtohephedpmhhouggvpehsmhhtphhouhhtpdhrtghpthht ohepghhithesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehgihhtshhtvg hrsehpohgsohigrdgtohhmpdhrtghpthhtohepphhhihhllhhiphdrfihoohguuddvfees ghhmrghilhdrtghomhdprhgtphhtthhopehtohhonhesihhothgtlhdrtghomhdprhgtph htthhopehkrghrthhhihhkrddukeeksehgmhgrihhlrdgtohhm X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 17 Jul 2025 00:57:01 -0400 (EDT) Received: by mail (OpenSMTPD) with ESMTPSA id b72883f4 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Thu, 17 Jul 2025 04:57:00 +0000 (UTC) From: Patrick Steinhardt Date: Thu, 17 Jul 2025 06:56:34 +0200 Subject: [PATCH v2 08/16] loose: write loose objects map via their source Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20250717-pks-object-file-wo-the-repository-v2-8-36d2cd6c700e@pks.im> References: <20250717-pks-object-file-wo-the-repository-v2-0-36d2cd6c700e@pks.im> In-Reply-To: <20250717-pks-object-file-wo-the-repository-v2-0-36d2cd6c700e@pks.im> To: git@vger.kernel.org Cc: Phillip Wood , Junio C Hamano , Karthik Nayak , Toon Claes X-Mailer: b4 0.14.2 When a repository is configured to have a compatibility hash algorithm we keep track of object ID mappings for loose objects via the loose object map. This map simply maps an object ID of the actual hash to the object ID of the compatibility hash. This loose object map is an inherent property of the loose files backend and thus of one specific object source. Refactor the interfaces to reflect this by requiring a `struct odb_source` as input instead of a repository. This prepares for subsequent commits where we will refactor writing of loose objects to work on a `struct odb_source`, as well. Signed-off-by: Patrick Steinhardt --- loose.c | 16 +++++++++------- loose.h | 4 +++- object-file.c | 6 +++--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/loose.c b/loose.c index 519f5db7935..e8ea6e7e24b 100644 --- a/loose.c +++ b/loose.c @@ -166,7 +166,8 @@ int repo_write_loose_object_map(struct repository *repo) return -1; } -static int write_one_object(struct repository *repo, const struct object_id *oid, +static int write_one_object(struct odb_source *source, + const struct object_id *oid, const struct object_id *compat_oid) { struct lock_file lock; @@ -174,7 +175,7 @@ static int write_one_object(struct repository *repo, const struct object_id *oid struct stat st; struct strbuf buf = STRBUF_INIT, path = STRBUF_INIT; - repo_common_path_replace(repo, &path, "objects/loose-object-idx"); + strbuf_addf(&path, "%s/loose-object-idx", source->path); hold_lock_file_for_update_timeout(&lock, path.buf, LOCK_DIE_ON_ERROR, -1); fd = open(path.buf, O_WRONLY | O_CREAT | O_APPEND, 0666); @@ -190,7 +191,7 @@ static int write_one_object(struct repository *repo, const struct object_id *oid goto errout; if (close(fd)) goto errout; - adjust_shared_perm(repo, path.buf); + adjust_shared_perm(source->odb->repo, path.buf); rollback_lock_file(&lock); strbuf_release(&buf); strbuf_release(&path); @@ -204,17 +205,18 @@ static int write_one_object(struct repository *repo, const struct object_id *oid return -1; } -int repo_add_loose_object_map(struct repository *repo, const struct object_id *oid, +int repo_add_loose_object_map(struct odb_source *source, + const struct object_id *oid, const struct object_id *compat_oid) { int inserted = 0; - if (!should_use_loose_object_map(repo)) + if (!should_use_loose_object_map(source->odb->repo)) return 0; - inserted = insert_loose_map(repo->objects->sources, oid, compat_oid); + inserted = insert_loose_map(source, oid, compat_oid); if (inserted) - return write_one_object(repo, oid, compat_oid); + return write_one_object(source, oid, compat_oid); return 0; } diff --git a/loose.h b/loose.h index 28512306e5f..6af1702973c 100644 --- a/loose.h +++ b/loose.h @@ -4,6 +4,7 @@ #include "khash.h" struct repository; +struct odb_source; struct loose_object_map { kh_oid_map_t *to_compat; @@ -16,7 +17,8 @@ int repo_loose_object_map_oid(struct repository *repo, const struct object_id *src, const struct git_hash_algo *dest_algo, struct object_id *dest); -int repo_add_loose_object_map(struct repository *repo, const struct object_id *oid, +int repo_add_loose_object_map(struct odb_source *source, + const struct object_id *oid, const struct object_id *compat_oid); int repo_read_loose_object_map(struct repository *repo); int repo_write_loose_object_map(struct repository *repo); diff --git a/object-file.c b/object-file.c index 6a7049a9e98..a9248760a26 100644 --- a/object-file.c +++ b/object-file.c @@ -1025,7 +1025,7 @@ int stream_loose_object(struct input_stream *in_stream, size_t len, err = finalize_object_file_flags(the_repository, tmp_file.buf, filename.buf, FOF_SKIP_COLLISION_CHECK); if (!err && compat) - err = repo_add_loose_object_map(the_repository, oid, &compat_oid); + err = repo_add_loose_object_map(the_repository->objects->sources, oid, &compat_oid); cleanup: strbuf_release(&tmp_file); strbuf_release(&filename); @@ -1069,7 +1069,7 @@ int write_object_file_flags(const void *buf, unsigned long len, if (write_loose_object(oid, hdr, hdrlen, buf, len, 0, flags)) return -1; if (compat) - return repo_add_loose_object_map(repo, oid, &compat_oid); + return repo_add_loose_object_map(repo->objects->sources, oid, &compat_oid); return 0; } @@ -1103,7 +1103,7 @@ int force_object_loose(const struct object_id *oid, time_t mtime) hdrlen = format_object_header(hdr, sizeof(hdr), type, len); ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime, 0); if (!ret && compat) - ret = repo_add_loose_object_map(the_repository, oid, &compat_oid); + ret = repo_add_loose_object_map(the_repository->objects->sources, oid, &compat_oid); free(buf); return ret; -- 2.50.1.465.gcb3da1c9e6.dirty