From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.4 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI shortcircuit=no autolearn=ham autolearn_force=no version=3.4.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by dcvr.yhbt.net (Postfix) with ESMTP id 1D03F1F456 for ; Tue, 25 Sep 2018 11:54:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728659AbeIYSBR (ORCPT ); Tue, 25 Sep 2018 14:01:17 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:43132 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727507AbeIYSBR (ORCPT ); Tue, 25 Sep 2018 14:01:17 -0400 Received: by mail-wr1-f65.google.com with SMTP id z14-v6so5539872wrs.10 for ; Tue, 25 Sep 2018 04:54:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VPeP8i6bKrpA+3592AD3e1ZeNEnOBey+uQBJ2lCdL6g=; b=pR9LpnxS8bui2VWDgLA3krUI6V4m6ECe5/z+iCN5TZCp4Ga/Nj8w/l56tHDCBj9LIa FSHhcVlAyyRduMbdNPwD2GcQTCZDmxCvO+lTta3hdck3TbREejssda+mmz6PSXhyKfB0 q24FF+eoRBJ2FpuWZLyWKBdzONvMXDGKfiAJ5oHVhsRyrW3HYJZEzB6bjIhVCx8I2uRm GUiRZQRnCUGdBXgznQhx3Y2k5/ebdfRoPBNRKt9JCPcZTeeAODiC5dVbCJXFSZdwZs/a GozHMweAaYj8P6mbn9VjN8Xc03r9HyF+TJn1LThNS8H2crOvE1Kxy7CyTN18fSmXqYrg 6ovA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VPeP8i6bKrpA+3592AD3e1ZeNEnOBey+uQBJ2lCdL6g=; b=JoX4zFfHzduRdGJ8Qb4DuyBo1u7cPYds5DfPjvmRTMnu0ZF3dyXg5C3ICGlml1BukK cyc2oNtSfgF7PY8Qfjh4RSEpyq/ygzH/ZmCK+m3DPXDwQs0p3zk/hhtAYJGKcxH3gRKU 9EFD094rXxaHq+T430xyFhIk8GS8isyo+hHVOwJxRto5DoOCErzYfoMjJO0rcCDq/oy+ bENQIDSeorJ2n2MUOUkn9sMJamYQwRN2hJ+wUSTGfI9vzDrYbueu2/9GXjZMxiNI2RLd 3QiBTz9MYPgk1x1slUKbeczdTldrirrQPHdlKxgZ5T52mIfB6Lq3OHbVJ5CheJTO0rZ1 aeaw== X-Gm-Message-State: ABuFfohe8PpwPv9oU4yweBE0ii3EXE7Tx9rA2ZGc/qHMDGWvNgFqluQi aK9llPFtWY35gtbpCg5fmVWtb1pn X-Google-Smtp-Source: ACcGV61tE3gA7OE70MoSzDKPoQhEie+Tl222Goxds7NJbzEvMPxSrNVmzl9WRNGC4XY8ipncnzGAIw== X-Received: by 2002:a5d:4e84:: with SMTP id e4-v6mr728799wru.32.1537876444031; Tue, 25 Sep 2018 04:54:04 -0700 (PDT) Received: from localhost.localdomain (89-95-107-230.abo.bbox.fr. [89.95.107.230]) by smtp.gmail.com with ESMTPSA id z14-v6sm1998628wrr.91.2018.09.25.04.54.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Sep 2018 04:54:03 -0700 (PDT) From: Christian Couder X-Google-Original-From: Christian Couder To: git@vger.kernel.org Cc: Junio C Hamano , Jeff King , Ben Peart , Jonathan Tan , Nguyen Thai Ngoc Duy , Mike Hommey , Lars Schneider , Eric Wong , Christian Couder , Jeff Hostetler , Eric Sunshine , Beat Bolli , Christian Couder Subject: [PATCH v5 2/8] Add initial remote odb support Date: Tue, 25 Sep 2018 13:53:35 +0200 Message-Id: <20180925115341.19248-3-chriscool@tuxfamily.org> X-Mailer: git-send-email 2.19.0.278.gca5b891cac In-Reply-To: <20180925115341.19248-1-chriscool@tuxfamily.org> References: <20180925115341.19248-1-chriscool@tuxfamily.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Christian Couder The remote-odb.{c,h} files will contain the functions that are called by the rest of Git mostly from "sha1-file.c" to access the objects managed by the remote odbs. The odb-helper.{c,h} files will contain the functions to actually implement communication with either the internal functions or the external scripts or processes that will manage and provide remote git objects. For now only infrastructure to create helpers from the config and to check if there are remote odbs and odb helpers is implemented. We expect that there will not be a lot of helpers, so it is ok to use a simple linked list to manage them. Helped-by: Jeff King Signed-off-by: Christian Couder Signed-off-by: Junio C Hamano --- Makefile | 2 ++ odb-helper.c | 16 +++++++++ odb-helper.h | 19 +++++++++++ remote-odb.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++ remote-odb.h | 7 ++++ 5 files changed, 135 insertions(+) create mode 100644 odb-helper.c create mode 100644 odb-helper.h create mode 100644 remote-odb.c create mode 100644 remote-odb.h diff --git a/Makefile b/Makefile index 13e1c52478..bed0b64ff7 100644 --- a/Makefile +++ b/Makefile @@ -915,6 +915,8 @@ LIB_OBJS += notes-cache.o LIB_OBJS += notes-merge.o LIB_OBJS += notes-utils.o LIB_OBJS += object.o +LIB_OBJS += odb-helper.o +LIB_OBJS += remote-odb.o LIB_OBJS += oidmap.o LIB_OBJS += oidset.o LIB_OBJS += packfile.o diff --git a/odb-helper.c b/odb-helper.c new file mode 100644 index 0000000000..b4d403ffa9 --- /dev/null +++ b/odb-helper.c @@ -0,0 +1,16 @@ +#include "cache.h" +#include "object.h" +#include "argv-array.h" +#include "odb-helper.h" +#include "run-command.h" +#include "sha1-lookup.h" + +struct odb_helper *odb_helper_new(const char *name, int namelen) +{ + struct odb_helper *o; + + o = xcalloc(1, sizeof(*o)); + o->name = xmemdupz(name, namelen); + + return o; +} diff --git a/odb-helper.h b/odb-helper.h new file mode 100644 index 0000000000..4b792a3896 --- /dev/null +++ b/odb-helper.h @@ -0,0 +1,19 @@ +#ifndef ODB_HELPER_H +#define ODB_HELPER_H + +/* + * An odb helper is a way to access a remote odb. + * + * Information in its fields comes from the config file [odb "NAME"] + * entries. + */ +struct odb_helper { + const char *name; /* odb..* */ + const char *remote; /* odb..promisorRemote */ + + struct odb_helper *next; +}; + +extern struct odb_helper *odb_helper_new(const char *name, int namelen); + +#endif /* ODB_HELPER_H */ diff --git a/remote-odb.c b/remote-odb.c new file mode 100644 index 0000000000..03be54ba2e --- /dev/null +++ b/remote-odb.c @@ -0,0 +1,91 @@ +#include "cache.h" +#include "remote-odb.h" +#include "odb-helper.h" +#include "config.h" + +static struct odb_helper *helpers; +static struct odb_helper **helpers_tail = &helpers; + +static struct odb_helper *find_or_create_helper(const char *name, int len) +{ + struct odb_helper *o; + + for (o = helpers; o; o = o->next) + if (!strncmp(o->name, name, len) && !o->name[len]) + return o; + + o = odb_helper_new(name, len); + *helpers_tail = o; + helpers_tail = &o->next; + + return o; +} + +static struct odb_helper *do_find_odb_helper(const char *remote) +{ + struct odb_helper *o; + + for (o = helpers; o; o = o->next) + if (o->remote && !strcmp(o->remote, remote)) + return o; + + return NULL; +} + +static int remote_odb_config(const char *var, const char *value, void *data) +{ + struct odb_helper *o; + const char *name; + int namelen; + const char *subkey; + + if (parse_config_key(var, "odb", &name, &namelen, &subkey) < 0) + return 0; + + o = find_or_create_helper(name, namelen); + + if (!strcmp(subkey, "promisorremote")) { + const char *remote; + int res = git_config_string(&remote, var, value); + + if (res) + return res; + + if (do_find_odb_helper(remote)) + return error(_("when parsing config key '%s' " + "helper for remote '%s' already exists"), + var, remote); + + o->remote = remote; + + return 0; + } + + return 0; +} + +static void remote_odb_init(void) +{ + static int initialized; + + if (initialized) + return; + initialized = 1; + + git_config(remote_odb_config, NULL); +} + +struct odb_helper *find_odb_helper(const char *remote) +{ + remote_odb_init(); + + if (!remote) + return helpers; + + return do_find_odb_helper(remote); +} + +int has_remote_odb(void) +{ + return !!find_odb_helper(NULL); +} diff --git a/remote-odb.h b/remote-odb.h new file mode 100644 index 0000000000..4c7b13695f --- /dev/null +++ b/remote-odb.h @@ -0,0 +1,7 @@ +#ifndef REMOTE_ODB_H +#define REMOTE_ODB_H + +extern struct odb_helper *find_odb_helper(const char *remote); +extern int has_remote_odb(void); + +#endif /* REMOTE_ODB_H */ -- 2.19.0.278.gca5b891cac