From patchwork Fri Sep 3 17:54:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derrick Stolee X-Patchwork-Id: 12474851 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 131A1C433FE for ; Fri, 3 Sep 2021 17:55:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ECBAC610A2 for ; Fri, 3 Sep 2021 17:55:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350336AbhICR4K (ORCPT ); Fri, 3 Sep 2021 13:56:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58068 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350299AbhICRz6 (ORCPT ); Fri, 3 Sep 2021 13:55:58 -0400 Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 34DB0C061575 for ; Fri, 3 Sep 2021 10:54:58 -0700 (PDT) Received: by mail-wm1-x336.google.com with SMTP id e26so4027857wmk.2 for ; Fri, 03 Sep 2021 10:54:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=PC0tzZeDmdvr5m0+3H75dz3FjrMHVqxiA45fXkoF2z4=; b=oazlMVp5V4NVoAvCRwVID8KuW6LRmdZSSmiCShpLH9AYxtE/7guD//N3R6ZTgSl7Xh mNRRUX9dSob9cC+Jpjzslcp+dlHpyYPyfWt+Kq2ATgt5QmGYuGWNx+4Erm3/UORngZ5v U93TZSZsot+4OKQA04XPxH0DC7MAcyWdy8nJODMlhoid9VeVUREEsSDlEAUkUAF5ay5X qF8XCO/OkuIpW4ckqPxwtW4PLMzX8szrMCRkR4qpmJwDD1w/sLpjwECNQWmlp7dE8R0P uzB/LEHRX0wrrpYET+0J002mc+telKVbLvyU2yqH/2+f4yJK6amlwgkXnkixipjHSyUP 3tXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=PC0tzZeDmdvr5m0+3H75dz3FjrMHVqxiA45fXkoF2z4=; b=f087lX7K2fRQ+LwEglNLUwz3Gecm0jUjfZp0jSlfSOfxKPpXp12kShUnd2Xq0y+069 Yq1JPwN1yqafym1D2VON39ERcdUdRLCmZPRBvl7QCu1wACg5UolzHd0KHtLlhNs0wQjo BcQoYQ0O0N28pLGdvG3G6eWtIOBDTw36wDnqImyK43O7s5mp3VkIZyjMc4gdr7kbXdni w4n960qz6Ohfq9112VKMoyhMTCNFi8RrP0cReL7cz9+8eCQeNjYevGcMWryUYvUN3UGm K9Ol2UcHcsV9Wxpm01p3m/R6ZuhJn/v8grqaeevT2De2NvdF1/OrLDYVYBr0GgYFN6q1 bQmw== X-Gm-Message-State: AOAM532mjW4yoNRwXMqt88cY64mjQFutT5HcoM+iJjFcg/deJH8tG+9d q17nvEreBe0E4L5q05pnOZY8O9UBkrE= X-Google-Smtp-Source: ABdhPJyiRXDrlNi7O1c2Lcw/z0QTTeyujbSDYK2fm1IlIfLimtTOw9hk+KhCjoctb8b6AfOaNna+Zw== X-Received: by 2002:a05:600c:3b17:: with SMTP id m23mr49510wms.41.1630691696798; Fri, 03 Sep 2021 10:54:56 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id p3sm5220082wrx.82.2021.09.03.10.54.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Sep 2021 10:54:56 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Fri, 03 Sep 2021 17:54:42 +0000 Subject: [PATCH v2 10/15] scalar: implement the `run` command Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Eric Sunshine , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsA==?= Bjarmason , Elijah Newren , Johannes Schindelin , Derrick Stolee Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Derrick Stolee From: Derrick Stolee Note: this subcommand is provided primarily for backwards-compatibility, for existing Scalar uses. It is mostly just a shim for `git maintenance`, mapping task names from the way Scalar called them to the way Git calls them. The reason why those names differ? The background maintenance was first implemented in Scalar, and when it was contributed as a patch series implementing the `git maintenance` command, reviewers suggested better names, those suggestions were accepted before the patches were integrated into core Git. Signed-off-by: Derrick Stolee Signed-off-by: Johannes Schindelin --- contrib/scalar/scalar.c | 64 +++++++++++++++++++++++++++++++++++++++ contrib/scalar/scalar.txt | 19 ++++++++++++ 2 files changed, 83 insertions(+) diff --git a/contrib/scalar/scalar.c b/contrib/scalar/scalar.c index 7dd1f28948f..0452dfce915 100644 --- a/contrib/scalar/scalar.c +++ b/contrib/scalar/scalar.c @@ -490,6 +490,69 @@ static int cmd_register(int argc, const char **argv) return register_dir(); } +static int cmd_run(int argc, const char **argv) +{ + struct option options[] = { + OPT_END(), + }; + struct { + const char *arg, *task; + } tasks[] = { + { "config", NULL }, + { "commit-graph", "commit-graph" }, + { "fetch", "prefetch" }, + { "loose-objects", "loose-objects" }, + { "pack-files", "incremental-repack" }, + { NULL, NULL } + }; + struct strbuf buf = STRBUF_INIT; + const char *usagestr[] = { NULL, NULL }; + int i; + + strbuf_addstr(&buf, N_("scalar run []\nTasks:\n")); + for (i = 0; tasks[i].arg; i++) + strbuf_addf(&buf, "\t%s\n", tasks[i].arg); + usagestr[0] = buf.buf; + + argc = parse_options(argc, argv, NULL, options, + usagestr, 0); + + if (argc == 0) + usage_with_options(usagestr, options); + + if (!strcmp("all", argv[0])) + i = -1; + else { + for (i = 0; tasks[i].arg && strcmp(tasks[i].arg, argv[0]); i++) + ; /* keep looking for the task */ + + if (i > 0 && !tasks[i].arg) { + error(_("no such task: '%s'"), argv[0]); + usage_with_options(usagestr, options); + } + } + + argc--; + argv++; + setup_enlistment_directory(argc, argv, usagestr, options, NULL); + strbuf_release(&buf); + + if (i == 0) + return register_dir(); + + if (i > 0) + return run_git("maintenance", "run", + "--task", tasks[i].task, NULL); + + if (register_dir()) + return -1; + for (i = 1; tasks[i].arg; i++) + if (run_git("maintenance", "run", + "--task", tasks[i].task, NULL)) + return -1; + return 0; +} + static int remove_deleted_enlistment(struct strbuf *path) { int res = 0; @@ -562,6 +625,7 @@ static struct { { "list", cmd_list }, { "register", cmd_register }, { "unregister", cmd_unregister }, + { "run", cmd_run }, { NULL, NULL}, }; diff --git a/contrib/scalar/scalar.txt b/contrib/scalar/scalar.txt index 6ceb528f347..ff8792e5a64 100644 --- a/contrib/scalar/scalar.txt +++ b/contrib/scalar/scalar.txt @@ -12,6 +12,7 @@ scalar clone [--single-branch] [--branch ] [--full-clone] [] scalar unregister [] +scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [] DESCRIPTION ----------- @@ -98,6 +99,24 @@ unregister []:: Remove the specified repository from the list of repositories registered with Scalar and stop the scheduled background maintenance. +Run +~~~ + +scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) []:: + Run the given maintenance task (or all tasks, if `all` was specified). + Except for `all` and `config`, this subcommand simply hands off to + linkgit:git-maintenance[1] (mapping `fetch` to `prefetch` and + `pack-files` to `incremental-repack`). ++ +These tasks are run automatically as part of the scheduled maintenance, +as soon as the repository is registered with Scalar. It should therefore +not be necessary to run this subcommand manually. ++ +The `config` task is specific to Scalar and configures all those +opinionated default settings that make Git work more efficiently with +large repositories. As this task is run as part of `scalar clone` +automatically, explicit invocations of this task are rarely needed. + SEE ALSO -------- linkgit:git-clone[1], linkgit:git-maintenance[1].