From patchwork Mon Aug 30 21:34:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derrick Stolee X-Patchwork-Id: 12466001 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 EC40EC432BE for ; Mon, 30 Aug 2021 21:35:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D899B60E77 for ; Mon, 30 Aug 2021 21:35:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238185AbhH3VgD (ORCPT ); Mon, 30 Aug 2021 17:36:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237903AbhH3Vfw (ORCPT ); Mon, 30 Aug 2021 17:35:52 -0400 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B88AC061760 for ; Mon, 30 Aug 2021 14:34:58 -0700 (PDT) Received: by mail-wm1-x32f.google.com with SMTP id o39-20020a05600c512700b002e74638b567so939964wms.2 for ; Mon, 30 Aug 2021 14:34:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=xAXU9tESuQK7OAufC124BYhDDnjltfzIBsprw3bAanE=; b=FR7YI6yANoyGdPBPmP9MzA5vGeaHoZZGp6p89OMF0OucRu9NeTAknQtlVzAPuB9v0C MlfQ0Z8dtN2s+bZVFO/jvZ7DHwMAioAWDJEBecBrwQorLZz0levSTtUxSYffECb21ZEh RpYWM0JNgSh2btvvLcu9ZToeyFphWCPpas5KyXXBrsEOgMAP955gjQ5yIDuqCWpAUjHz okbI6maSl3NK1zyte8Fy47g7vuAJdcHmCDQG0umblAfPMrl7mtUuCVd7UWImt/le9uK5 Z+Bn7UHXCmQLA4Lvg0SeyDlXRXWxNH2yl4IV2N1dPQzz5Z5rPPac6YN/fhI4QVmptxk8 NnJw== 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=xAXU9tESuQK7OAufC124BYhDDnjltfzIBsprw3bAanE=; b=djTBsBZirA1mKfS941Nygylwshvmk3/nGEs0fHrTBfm3wW0iY4ZiG1DsYGc1eUZ2Fk t3gdWtfSrh6elj6/Pb7bP/NWmjdkhcGHC1GxgCnI3qaht0N/WeXB9DJZuTpiXvZJsyKG xyIIv+XSKv8nmG4VWhmrtERmIrkPjG4cWaKtnj+nTSa/FZHbq+2UwAM6en9qPG+VoEPB 8DeVrjvaXY6pGcxy0OaKc4lf5fftMWI8qcJLz++UoLJaXqQfUwqrvNWRWpsW5hOOnQBT ggguzjNElq+dS4ID7xN0rI95ilCkcs2GRJwMkAZ3AiFY9Nr9NDZSqN5EVX/ue9ZAauvm I5QQ== X-Gm-Message-State: AOAM530TU4aWd8qVC8egG4npRNBzq9c2rWGMXMuqwqEPiEYEqGswboUb AJrM+ha5qjskKSqDq1APeM+OzReOsng= X-Google-Smtp-Source: ABdhPJz3nWsGpFBizecS9yDweR9YgO+Ra6Pd+BXx6CmWjLHRZzw1feYTJTQgTK6DJJFMLAk8UMiFhw== X-Received: by 2002:a1c:f405:: with SMTP id z5mr974131wma.33.1630359296915; Mon, 30 Aug 2021 14:34:56 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id h11sm734502wmc.23.2021.08.30.14.34.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Aug 2021 14:34:56 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Mon, 30 Aug 2021 21:34:45 +0000 Subject: [PATCH 10/15] scalar: implement the `run` command Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: 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 908eaa84df1..d5d38a1afeb 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 bb9411b38cb..9aadaf6323f 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 ----------- @@ -94,6 +95,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].