From patchwork Sat Jan 25 00:39:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koji Nakamaru via GitGitGadget X-Patchwork-Id: 11351337 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2D60C921 for ; Sat, 25 Jan 2020 00:39:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0C5772073B for ; Sat, 25 Jan 2020 00:39:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="uE0jeeOH" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387562AbgAYAj3 (ORCPT ); Fri, 24 Jan 2020 19:39:29 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:41062 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387537AbgAYAj2 (ORCPT ); Fri, 24 Jan 2020 19:39:28 -0500 Received: by mail-wr1-f66.google.com with SMTP id c9so4178571wrw.8 for ; Fri, 24 Jan 2020 16:39:27 -0800 (PST) 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=saMlTNkKEqcBRL5aUOy1TDYQZGXm7gjU9li+Opxvdcs=; b=uE0jeeOHg7nNefR3v53KXJA2tkA0a9VtmA3GyjsV21gW9ItyyZYzr4oh32T1y96bTu bRIITVP6Xr+xK3vOGXTqn9Y7IZ0iKmcP9sEMprbUxIWHT0nFQaIJP+yS/WZeRlBTVDhQ f4s9ucRFVTlUu83B2XBZd7eufEIjZf/tRVxfpc+aqUEsoz8eyexnqDNwcOANPMoS5vLE MtIWV02F2EUmbO4iZMZSG4QMecAsTIaWyIOV7pJGVdIkDkjRtQr/e+uOnx150zwqoVr+ TcppZ0Gs7GekI8R4v12Y6w8siBmGSxuSaxdspZbK2FnzgWb7kfrQvyPpLWGsDAVB7HJH 9D/A== 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=saMlTNkKEqcBRL5aUOy1TDYQZGXm7gjU9li+Opxvdcs=; b=DOsvnbTeXQ3dkHGXPqm2zWdTuE+dGhSdfBnex5iSoAeUr9tQ/2qihsI9dlmcAm5OPV X8/RA+EFnBwWsGWoifK5Np2eOWOLBMcXXCltUhoyAaCdAKo5/KC1Rndv/SPyrFJ11HD5 V0N+N7R4WoKjcXKGZMj1ezG4Na5PX4zGZHuxMPkasX6GRaXd48iBCYwHqLnlL9a/lOT+ V7fveHOtYfWoCRgOtGYWBeoFLMBdkREhu0VIaqpAoltBEpoePC7MwnJSD2ZzLVVEdvG9 Aw2ajdHKW/pUVXRBnVmpY3B3oiWchuofUtY9TaX2sxVKoT2updXB8ZOLYTDjH2r3skdb kdkQ== X-Gm-Message-State: APjAAAUQltT+DzfutMEeY2Rei3XS0W8vhoNo2gfrPFXvOF4cMpQC3n10 oMpOn+YQm8NSMsKUhvw1use6uwDi X-Google-Smtp-Source: APXvYqz0kKS9nBhM4KUGDfmqjGduB+f1Whrtm6hU/9WaoTZJ3+zNdqGO/ZYrcS1egBEy3JBcBYUo5w== X-Received: by 2002:adf:e58b:: with SMTP id l11mr7029657wrm.402.1579912766936; Fri, 24 Jan 2020 16:39:26 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id z25sm9290601wmf.14.2020.01.24.16.39.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 16:39:26 -0800 (PST) Message-Id: In-Reply-To: References: From: "Matthew Rogers via GitGitGadget" Date: Sat, 25 Jan 2020 00:39:19 +0000 Subject: [PATCH v5 1/6] config: fix typo in variable name Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matthew Rogers , Matthew Rogers Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Matthew Rogers In git config use of the end_null variable to determine if we should be null terminating our output. While it is correct to say a string is "null terminated" the character is actually the "nul" character, so this malapropism is being fixed. Signed-off-by: Matthew Rogers --- builtin/config.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 98d65bc0ad..52a904cfb1 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -29,7 +29,7 @@ static int use_worktree_config; static struct git_config_source given_config_source; static int actions, type; static char *default_value; -static int end_null; +static int end_nul; static int respect_includes_opt = -1; static struct config_options config_options; static int show_origin; @@ -151,7 +151,7 @@ static struct option builtin_config_options[] = { OPT_CALLBACK_VALUE(0, "path", &type, N_("value is a path (file or directory name)"), TYPE_PATH), OPT_CALLBACK_VALUE(0, "expiry-date", &type, N_("value is an expiry date"), TYPE_EXPIRY_DATE), OPT_GROUP(N_("Other")), - OPT_BOOL('z', "null", &end_null, N_("terminate values with NUL byte")), + OPT_BOOL('z', "null", &end_nul, N_("terminate values with NUL byte")), OPT_BOOL(0, "name-only", &omit_values, N_("show variable names only")), OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), OPT_BOOL(0, "show-origin", &show_origin, N_("show origin of config (file, standard input, blob, command line)")), @@ -178,11 +178,11 @@ static void check_argc(int argc, int min, int max) static void show_config_origin(struct strbuf *buf) { - const char term = end_null ? '\0' : '\t'; + const char term = end_nul ? '\0' : '\t'; strbuf_addstr(buf, current_config_origin_type()); strbuf_addch(buf, ':'); - if (end_null) + if (end_nul) strbuf_addstr(buf, current_config_name()); else quote_c_style(current_config_name(), buf, NULL, 0); @@ -678,7 +678,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) config_options.git_dir = get_git_dir(); } - if (end_null) { + if (end_nul) { term = '\0'; delim = '\n'; key_delim = '\n'; From patchwork Sat Jan 25 00:39:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koji Nakamaru via GitGitGadget X-Patchwork-Id: 11351341 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5447A1398 for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1FA262075E for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FidL0d4d" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387582AbgAYAjb (ORCPT ); Fri, 24 Jan 2020 19:39:31 -0500 Received: from mail-wm1-f53.google.com ([209.85.128.53]:50188 "EHLO mail-wm1-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387458AbgAYAja (ORCPT ); Fri, 24 Jan 2020 19:39:30 -0500 Received: by mail-wm1-f53.google.com with SMTP id a5so1227864wmb.0 for ; Fri, 24 Jan 2020 16:39:28 -0800 (PST) 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=7DrGpQf9DDm3TBMcqcnJxyJb3N0r9XW88u+IETBgq/Y=; b=FidL0d4dZmykJBmSHs/Ccon2olKP/j62ucPmuywhBLAjeCM5J3CrOKBBu3tDHZ09vt gzTicYhAvhP9u7tze1r7dNKe98PFP9I60oowWrlg7S6WTosANtJYXdstVQe0DH2lq9df qA5JNLw6oHyrO0A/gQUDNWFvw8NgYjYwwJiYHMi+I3bwGVRp3CskI6IIBdP6zwChODXM hwtbRCLryPfElUC3NEg3m/A2xsVSAXVrsSCgF0aUQoDjT/A6+u8XNPD29rpPgkwZJOyj 5i7t/9iQrGuxIYh6XPVjoalTNRPg1uF2njSj6YRLXzFHBFbZuDiEIc6zKqk0rLuqd5Wy 9qtg== 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=7DrGpQf9DDm3TBMcqcnJxyJb3N0r9XW88u+IETBgq/Y=; b=Xydfyyty/YZpP7Noyyi46xE/sfKOnvYjH7+27l9TakLIy+mobdfLHhN4nlK47aI7EG /dz/wyMq79XEihIv00c9chYPcO9LXK5YhuSbtxwYZCeUa1o3jVNw1eEcZf6enfzVQeoa jHY0vzZZ/QyARNPazVRqf23ocWI5eftlHYTm4wNlGXPCEQtfUDSq2kQX5ZdbQH1DYpKp npKPV3TYGdP2xwpv0QhqCEzvcrbiZ7YsgTPahxXPntmM8QgwNLxRWWszVFYTqGGU6Rjp SQrLQpZH3ILRJbuuC5vAKUxs0gDnm/NqNgwDEU4QYB+ZKNXFSxJv6vTIZnSVTXnZGmOQ zpnA== X-Gm-Message-State: APjAAAXXoufUC2DTTHgZTYJQEAgJ86pGLNlb1TIJNtRfz/cOzFQq6TKF lJ+ZmhhFNcvzqKo8DMw4ayzJWzmN X-Google-Smtp-Source: APXvYqzqPdhuj1bNl0wdx4UUIaU5+E+kBSbRfDGFlLedaYf8KNAn6LRX8eM5Vd4e7/1gvGC+CF6pkg== X-Received: by 2002:a05:600c:22c8:: with SMTP id 8mr1604407wmg.178.1579912767705; Fri, 24 Jan 2020 16:39:27 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id z123sm8750965wme.18.2020.01.24.16.39.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 16:39:27 -0800 (PST) Message-Id: <1b42f853996565ebb1304701cae6cfde8d5357b1.1579912764.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Matthew Rogers via GitGitGadget" Date: Sat, 25 Jan 2020 00:39:20 +0000 Subject: [PATCH v5 2/6] t1300: fix over-indented HERE-DOCs Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matthew Rogers , Matthew Rogers Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Matthew Rogers Prepare for the following patches by removing extraneous indents from HERE-DOCs used in config tests. Signed-off-by: Matthew Rogers --- t/t1300-config.sh | 168 +++++++++++++++++++++++----------------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/t/t1300-config.sh b/t/t1300-config.sh index 983a0a1583..e8b4575758 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -1191,47 +1191,47 @@ test_expect_success 'old-fashioned settings are case insensitive' ' test_when_finished "rm -f testConfig testConfig_expect testConfig_actual" && cat >testConfig_actual <<-EOF && - [V.A] - r = value1 + [V.A] + r = value1 EOF q_to_tab >testConfig_expect <<-EOF && - [V.A] - Qr = value2 + [V.A] + Qr = value2 EOF git config -f testConfig_actual "v.a.r" value2 && test_cmp testConfig_expect testConfig_actual && cat >testConfig_actual <<-EOF && - [V.A] - r = value1 + [V.A] + r = value1 EOF q_to_tab >testConfig_expect <<-EOF && - [V.A] - QR = value2 + [V.A] + QR = value2 EOF git config -f testConfig_actual "V.a.R" value2 && test_cmp testConfig_expect testConfig_actual && cat >testConfig_actual <<-EOF && - [V.A] - r = value1 + [V.A] + r = value1 EOF q_to_tab >testConfig_expect <<-EOF && - [V.A] - r = value1 - Qr = value2 + [V.A] + r = value1 + Qr = value2 EOF git config -f testConfig_actual "V.A.r" value2 && test_cmp testConfig_expect testConfig_actual && cat >testConfig_actual <<-EOF && - [V.A] - r = value1 + [V.A] + r = value1 EOF q_to_tab >testConfig_expect <<-EOF && - [V.A] - r = value1 - Qr = value2 + [V.A] + r = value1 + Qr = value2 EOF git config -f testConfig_actual "v.A.r" value2 && test_cmp testConfig_expect testConfig_actual @@ -1241,26 +1241,26 @@ test_expect_success 'setting different case sensitive subsections ' ' test_when_finished "rm -f testConfig testConfig_expect testConfig_actual" && cat >testConfig_actual <<-EOF && - [V "A"] - R = v1 - [K "E"] - Y = v1 - [a "b"] - c = v1 - [d "e"] - f = v1 + [V "A"] + R = v1 + [K "E"] + Y = v1 + [a "b"] + c = v1 + [d "e"] + f = v1 EOF q_to_tab >testConfig_expect <<-EOF && - [V "A"] - Qr = v2 - [K "E"] - Qy = v2 - [a "b"] - Qc = v2 - [d "e"] - f = v1 - [d "E"] - Qf = v2 + [V "A"] + Qr = v2 + [K "E"] + Qy = v2 + [a "b"] + Qc = v2 + [d "e"] + f = v1 + [d "E"] + Qf = v2 EOF # exact match git config -f testConfig_actual a.b.c v2 && @@ -1622,40 +1622,40 @@ test_expect_success 'set up --show-origin tests' ' INCLUDE_DIR="$HOME/include" && mkdir -p "$INCLUDE_DIR" && cat >"$INCLUDE_DIR"/absolute.include <<-\EOF && - [user] - absolute = include + [user] + absolute = include EOF cat >"$INCLUDE_DIR"/relative.include <<-\EOF && - [user] - relative = include + [user] + relative = include EOF cat >"$HOME"/.gitconfig <<-EOF && - [user] - global = true - override = global - [include] - path = "$INCLUDE_DIR/absolute.include" + [user] + global = true + override = global + [include] + path = "$INCLUDE_DIR/absolute.include" EOF cat >.git/config <<-\EOF - [user] - local = true - override = local - [include] - path = ../include/relative.include + [user] + local = true + override = local + [include] + path = ../include/relative.include EOF ' test_expect_success '--show-origin with --list' ' cat >expect <<-EOF && - file:$HOME/.gitconfig user.global=true - file:$HOME/.gitconfig user.override=global - file:$HOME/.gitconfig include.path=$INCLUDE_DIR/absolute.include - file:$INCLUDE_DIR/absolute.include user.absolute=include - file:.git/config user.local=true - file:.git/config user.override=local - file:.git/config include.path=../include/relative.include - file:.git/../include/relative.include user.relative=include - command line: user.cmdline=true + file:$HOME/.gitconfig user.global=true + file:$HOME/.gitconfig user.override=global + file:$HOME/.gitconfig include.path=$INCLUDE_DIR/absolute.include + file:$INCLUDE_DIR/absolute.include user.absolute=include + file:.git/config user.local=true + file:.git/config user.override=local + file:.git/config include.path=../include/relative.include + file:.git/../include/relative.include user.relative=include + command line: user.cmdline=true EOF git -c user.cmdline=true config --list --show-origin >output && test_cmp expect output @@ -1663,16 +1663,16 @@ test_expect_success '--show-origin with --list' ' test_expect_success '--show-origin with --list --null' ' cat >expect <<-EOF && - file:$HOME/.gitconfigQuser.global - trueQfile:$HOME/.gitconfigQuser.override - globalQfile:$HOME/.gitconfigQinclude.path - $INCLUDE_DIR/absolute.includeQfile:$INCLUDE_DIR/absolute.includeQuser.absolute - includeQfile:.git/configQuser.local - trueQfile:.git/configQuser.override - localQfile:.git/configQinclude.path - ../include/relative.includeQfile:.git/../include/relative.includeQuser.relative - includeQcommand line:Quser.cmdline - trueQ + file:$HOME/.gitconfigQuser.global + trueQfile:$HOME/.gitconfigQuser.override + globalQfile:$HOME/.gitconfigQinclude.path + $INCLUDE_DIR/absolute.includeQfile:$INCLUDE_DIR/absolute.includeQuser.absolute + includeQfile:.git/configQuser.local + trueQfile:.git/configQuser.override + localQfile:.git/configQinclude.path + ../include/relative.includeQfile:.git/../include/relative.includeQuser.relative + includeQcommand line:Quser.cmdline + trueQ EOF git -c user.cmdline=true config --null --list --show-origin >output.raw && nul_to_q output && @@ -1684,9 +1684,9 @@ test_expect_success '--show-origin with --list --null' ' test_expect_success '--show-origin with single file' ' cat >expect <<-\EOF && - file:.git/config user.local=true - file:.git/config user.override=local - file:.git/config include.path=../include/relative.include + file:.git/config user.local=true + file:.git/config user.override=local + file:.git/config include.path=../include/relative.include EOF git config --local --list --show-origin >output && test_cmp expect output @@ -1694,8 +1694,8 @@ test_expect_success '--show-origin with single file' ' test_expect_success '--show-origin with --get-regexp' ' cat >expect <<-EOF && - file:$HOME/.gitconfig user.global true - file:.git/config user.local true + file:$HOME/.gitconfig user.global true + file:.git/config user.local true EOF git config --show-origin --get-regexp "user\.[g|l].*" >output && test_cmp expect output @@ -1703,7 +1703,7 @@ test_expect_success '--show-origin with --get-regexp' ' test_expect_success '--show-origin getting a single key' ' cat >expect <<-\EOF && - file:.git/config local + file:.git/config local EOF git config --show-origin user.override >output && test_cmp expect output @@ -1712,14 +1712,14 @@ test_expect_success '--show-origin getting a single key' ' test_expect_success 'set up custom config file' ' CUSTOM_CONFIG_FILE="file\" (dq) and spaces.conf" && cat >"$CUSTOM_CONFIG_FILE" <<-\EOF - [user] - custom = true + [user] + custom = true EOF ' test_expect_success !MINGW '--show-origin escape special file name characters' ' cat >expect <<-\EOF && - file:"file\" (dq) and spaces.conf" user.custom=true + file:"file\" (dq) and spaces.conf" user.custom=true EOF git config --file "$CUSTOM_CONFIG_FILE" --show-origin --list >output && test_cmp expect output @@ -1727,7 +1727,7 @@ test_expect_success !MINGW '--show-origin escape special file name characters' ' test_expect_success '--show-origin stdin' ' cat >expect <<-\EOF && - standard input: user.custom=true + standard input: user.custom=true EOF git config --file - --show-origin --list <"$CUSTOM_CONFIG_FILE" >output && test_cmp expect output @@ -1735,11 +1735,11 @@ test_expect_success '--show-origin stdin' ' test_expect_success '--show-origin stdin with file include' ' cat >"$INCLUDE_DIR"/stdin.include <<-EOF && - [user] - stdin = include + [user] + stdin = include EOF cat >expect <<-EOF && - file:$INCLUDE_DIR/stdin.include include + file:$INCLUDE_DIR/stdin.include include EOF echo "[include]path=\"$INCLUDE_DIR\"/stdin.include" | git config --show-origin --includes --file - user.stdin >output && @@ -1750,7 +1750,7 @@ test_expect_success '--show-origin stdin with file include' ' test_expect_success !MINGW '--show-origin blob' ' blob=$(git hash-object -w "$CUSTOM_CONFIG_FILE") && cat >expect <<-EOF && - blob:$blob user.custom=true + blob:$blob user.custom=true EOF git config --blob=$blob --show-origin --list >output && test_cmp expect output @@ -1758,7 +1758,7 @@ test_expect_success !MINGW '--show-origin blob' ' test_expect_success !MINGW '--show-origin blob ref' ' cat >expect <<-\EOF && - blob:"master:file\" (dq) and spaces.conf" user.custom=true + blob:"master:file\" (dq) and spaces.conf" user.custom=true EOF git add "$CUSTOM_CONFIG_FILE" && git commit -m "new config file" && From patchwork Sat Jan 25 00:39:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koji Nakamaru via GitGitGadget X-Patchwork-Id: 11351343 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 889F117EF for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5E1752072C for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LOpjNELE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387576AbgAYAjb (ORCPT ); Fri, 24 Jan 2020 19:39:31 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:33558 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387537AbgAYAja (ORCPT ); Fri, 24 Jan 2020 19:39:30 -0500 Received: by mail-wr1-f67.google.com with SMTP id b6so4214153wrq.0 for ; Fri, 24 Jan 2020 16:39:29 -0800 (PST) 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=Vzbm2jbZgmjXl+MHBE3DtIUgRyeqxuVjjO8cWWLto1M=; b=LOpjNELEv6hc6m63kTWnulj41S3evdpBy0+Yqj429U8wKJkhqWNBMECz9MckQEnZnW XqxVxw9kkLdzt+c37u6GRophzcOeG2qXiUUxZzVmyNHYcV6u6Xes7/L5aSRmlEt5e/6F nYytj526Xpw1VZgLVhg+cc/UUIJSaP4mveSKotPiiaKxHaOzPu73788gxAl0+QUldvGC WkRmp0RFLJkTjq2YG5t2h0vll6ZUoiqgUohIU00tLZcvxGrJ/fRfYbkuuzZ7F6d3zrsW wEBTG6zFATerG2WwMkoIER3cmKKpJptkW9ij1CZ4n2v2M8//wmfmPnhfMPbwKdXN0XMy 0KNA== 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=Vzbm2jbZgmjXl+MHBE3DtIUgRyeqxuVjjO8cWWLto1M=; b=oeNCl2RE70zSEm9YX0s29lH3BmrYqDEdL+MNgT3Y+guUnPmHyP8y+emltc/Ovgu5Ty ILKtFPvd8W9CB7vQ4N4VDnfrWhmtjiA/dlc//yMuxYesCXWWQDiH52VQfxERJJo4MHXa NDUdXHKm0vt1NpPOdR+FNre0doJxP7Q1Tk4lk7sFe/wAsvREkqRVd9jB/kCFYX/f86x5 LXy3G0Cccx0ApJ0Rm2UgTHhH2vNafnaYhJfa9ZduxQwzVCDXQtQAc7lOy/G5MRLxFsIY dkbErYc+9NsPIyVkBIiMSSJyUS0XQhC4DTG+7k2xnXb2xw7ab/3JOZG+T45MzbbcBJDR ZQiQ== X-Gm-Message-State: APjAAAUQpoS8vA31Ton7GWWKIRs8MDQMYgv1t/iMSdOPMGbq5SYKh9+L t1pPZUpoIevBVD1dZektWX2YLjkA X-Google-Smtp-Source: APXvYqx+2zJ7N8y+NbkGzzQCocaMVrigFT4btrHwiv8eA/aDsWqpK5m7HY7fgPMBK8WGrnqxwjZMBw== X-Received: by 2002:adf:f3d0:: with SMTP id g16mr7447240wrp.2.1579912768659; Fri, 24 Jan 2020 16:39:28 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id s16sm9772379wrn.78.2020.01.24.16.39.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 16:39:28 -0800 (PST) Message-Id: <9d19794dfd667b3f9752f0e8118dc9eb0c8f59f1.1579912764.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Matthew Rogers via GitGitGadget" Date: Sat, 25 Jan 2020 00:39:21 +0000 Subject: [PATCH v5 3/6] t1300: create custom config file without special characters Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matthew Rogers , Matthew Rogers Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Matthew Rogers Tests that required a custom configuration file to be created previously used a file with non-alphanumeric characters including escaped double quotes. This is not really necessary for the majority of tests involving custom config files, and decreases test coverage on systems that dissallow such filenames (Windows, etc.). Create two files, one appropriate for testing quoting and one appropriate for general use. Signed-off-by: Matthew Rogers --- t/t1300-config.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/t/t1300-config.sh b/t/t1300-config.sh index e8b4575758..e5fb9114f6 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -1710,18 +1710,23 @@ test_expect_success '--show-origin getting a single key' ' ' test_expect_success 'set up custom config file' ' - CUSTOM_CONFIG_FILE="file\" (dq) and spaces.conf" && + CUSTOM_CONFIG_FILE="custom.conf" && cat >"$CUSTOM_CONFIG_FILE" <<-\EOF [user] custom = true EOF ' +test_expect_success !MINGW 'set up custom config file with special name characters' ' + WEIRDLY_NAMED_FILE="file\" (dq) and spaces.conf" && + cp "$CUSTOM_CONFIG_FILE" "$WEIRDLY_NAMED_FILE" +' + test_expect_success !MINGW '--show-origin escape special file name characters' ' cat >expect <<-\EOF && file:"file\" (dq) and spaces.conf" user.custom=true EOF - git config --file "$CUSTOM_CONFIG_FILE" --show-origin --list >output && + git config --file "$WEIRDLY_NAMED_FILE" --show-origin --list >output && test_cmp expect output ' @@ -1747,7 +1752,7 @@ test_expect_success '--show-origin stdin with file include' ' test_cmp expect output ' -test_expect_success !MINGW '--show-origin blob' ' +test_expect_success '--show-origin blob' ' blob=$(git hash-object -w "$CUSTOM_CONFIG_FILE") && cat >expect <<-EOF && blob:$blob user.custom=true @@ -1756,9 +1761,9 @@ test_expect_success !MINGW '--show-origin blob' ' test_cmp expect output ' -test_expect_success !MINGW '--show-origin blob ref' ' +test_expect_success '--show-origin blob ref' ' cat >expect <<-\EOF && - blob:"master:file\" (dq) and spaces.conf" user.custom=true + blob:master:custom.conf user.custom=true EOF git add "$CUSTOM_CONFIG_FILE" && git commit -m "new config file" && From patchwork Sat Jan 25 00:39:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koji Nakamaru via GitGitGadget X-Patchwork-Id: 11351347 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E83B918B6 for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C762C2072C for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qL1CLFON" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387590AbgAYAjd (ORCPT ); Fri, 24 Jan 2020 19:39:33 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:32815 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387563AbgAYAjb (ORCPT ); Fri, 24 Jan 2020 19:39:31 -0500 Received: by mail-wm1-f68.google.com with SMTP id m10so4546990wmc.0 for ; Fri, 24 Jan 2020 16:39:30 -0800 (PST) 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=6NRzuQmbNQuX3qumUbsbslbMePVYQw4AO29iqnS59bU=; b=qL1CLFONAy2aPJWN/k6EwUOrmjdKuryRkXAK/CYrPa3YuDfd6jfuniq4/FTUAaAT6R V/ccVPBVCmuKU7LiWALhWo31XkC8Jz8Yyxo4/uqJLeCifCgZqSxs9JBR8JMdHRx/JfYw 15cg+42xAPzn2y6vzz6aU06aDNdUT4Q/5rKv+ncXToZV1PCjUjycKbGRf3g3M9ejIz2v PS/JeR1MlTAuKFm5ZxKxztsk6hqmaVcSMtEhHyL2ZrbHa6CfYZsyC+V8pK4nH27za8/G 3WqAAK5olnWh35O+87xmKhnVlfxDh4LKqIckqQQLlRSSNpM33FUNiS3rw163oZm92g6p fUSQ== 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=6NRzuQmbNQuX3qumUbsbslbMePVYQw4AO29iqnS59bU=; b=B07mhY9wuQQ+mepOEvwH5PxpejCIYEkaJuJG0pxqFYdX0NuwKTopYWwRiBBMPp51ZQ 7j9ZqKRBbJY5v1G55586BlOf0TDkCJIq6zDnorXCBMlra9T1yT69fnDogqNDV8tPQsmI jY2j0jlauj1fJ7TZIb0jgabehtXz/GhXzKSu3Mk8YBuu2hB17dLn99fJRYDA+AzAabwP GbGLIfEgfW4wHVKVxJc8apjpN2YqDu7QyWspA7ANU4uAjUKVDaMy/2935pCEhdlGQxZf UzDgTjx4xoXfCEfNHAgOVQF+kLD99dnrvDtgRrO1UIIk1iZl4OjfYYxhUlBaVV8/wzyp Mf4A== X-Gm-Message-State: APjAAAWbVQI9B+IzarnNL3HFXk7aF6wSU+hVJzHv++i32FovrkqhiWgv 5WdwPGrPkJX5kT/gncdLDvQjlFVG X-Google-Smtp-Source: APXvYqzjGmadqTt+JLJB/6pLjik7u62mzHNh41++R/NfEpM3dmtcV3iXHSgJ12/lBmiH5LoOKUgNTg== X-Received: by 2002:a1c:4c5:: with SMTP id 188mr1612958wme.82.1579912769343; Fri, 24 Jan 2020 16:39:29 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id a9sm8428667wmm.15.2020.01.24.16.39.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 16:39:28 -0800 (PST) Message-Id: <9f160e281a984ea7578f8fbe244adc77c6585e44.1579912764.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Matthew Rogers via GitGitGadget" Date: Sat, 25 Jan 2020 00:39:22 +0000 Subject: [PATCH v5 4/6] config: split repo scope to local and worktree Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matthew Rogers , Matthew Rogers Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Matthew Rogers Previously when iterating through git config variables, worktree config and local config were both considered "CONFIG_SCOPE_REPO". This was never a problem before as no one had needed to differentiate between the two cases, but future functionality may care whether or not the config options come from a worktree or from the repository's actual local config file. For example, the planned feature to add a '--show-scope' to config to allow a user to see which scope listed config options come from would confuse users if it just printed 'repo' rather than 'local' or 'worktree' as the documentation would lead them to expect. As well as the additional benefit of making the implementation look more like how the documentation describes the interface. To accomplish this we split out what was previously considered repo scope to be local and worktree. The clients of 'current_config_scope()' who cared about CONFIG_SCOPE_REPO are also modified to similarly care about CONFIG_SCOPE_WORKTREE and CONFIG_SCOPE_LOCAL to preserve previous behavior. Signed-off-by: Matthew Rogers --- config.c | 7 ++----- config.h | 3 ++- remote.c | 3 ++- t/helper/test-config.c | 4 +++- t/t1308-config-set.sh | 2 +- upload-pack.c | 3 ++- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/config.c b/config.c index d75f88ca0c..447a013a15 100644 --- a/config.c +++ b/config.c @@ -1724,15 +1724,12 @@ static int do_git_config_sequence(const struct config_options *opts, if (user_config && !access_or_die(user_config, R_OK, ACCESS_EACCES_OK)) ret += git_config_from_file(fn, user_config, data); - current_parsing_scope = CONFIG_SCOPE_REPO; + current_parsing_scope = CONFIG_SCOPE_LOCAL; if (!opts->ignore_repo && repo_config && !access_or_die(repo_config, R_OK, 0)) ret += git_config_from_file(fn, repo_config, data); - /* - * Note: this should have a new scope, CONFIG_SCOPE_WORKTREE. - * But let's not complicate things before it's actually needed. - */ + current_parsing_scope = CONFIG_SCOPE_WORKTREE; if (!opts->ignore_worktree && repository_format_worktree_config) { char *path = git_pathdup("config.worktree"); if (!access_or_die(path, R_OK, 0)) diff --git a/config.h b/config.h index 91fd4c5e96..284d92fb0e 100644 --- a/config.h +++ b/config.h @@ -298,7 +298,8 @@ enum config_scope { CONFIG_SCOPE_UNKNOWN = 0, CONFIG_SCOPE_SYSTEM, CONFIG_SCOPE_GLOBAL, - CONFIG_SCOPE_REPO, + CONFIG_SCOPE_LOCAL, + CONFIG_SCOPE_WORKTREE, CONFIG_SCOPE_CMDLINE, }; diff --git a/remote.c b/remote.c index 5c4666b53a..593ce297ed 100644 --- a/remote.c +++ b/remote.c @@ -369,7 +369,8 @@ static int handle_config(const char *key, const char *value, void *cb) } remote = make_remote(name, namelen); remote->origin = REMOTE_CONFIG; - if (current_config_scope() == CONFIG_SCOPE_REPO) + if (current_config_scope() == CONFIG_SCOPE_LOCAL || + current_config_scope() == CONFIG_SCOPE_WORKTREE) remote->configured_in_repo = 1; if (!strcmp(subkey, "mirror")) remote->mirror = git_config_bool(key, value); diff --git a/t/helper/test-config.c b/t/helper/test-config.c index 214003d5b2..6695e463eb 100644 --- a/t/helper/test-config.c +++ b/t/helper/test-config.c @@ -44,8 +44,10 @@ static const char *scope_name(enum config_scope scope) return "system"; case CONFIG_SCOPE_GLOBAL: return "global"; - case CONFIG_SCOPE_REPO: + case CONFIG_SCOPE_LOCAL: return "repo"; + case CONFIG_SCOPE_WORKTREE: + return "worktree"; case CONFIG_SCOPE_CMDLINE: return "cmdline"; default: diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh index 7b4e1a63eb..90196e2862 100755 --- a/t/t1308-config-set.sh +++ b/t/t1308-config-set.sh @@ -259,7 +259,7 @@ test_expect_success 'iteration shows correct origins' ' value=from-repo origin=file name=.git/config - scope=repo + scope=local key=foo.bar value=from-cmdline diff --git a/upload-pack.c b/upload-pack.c index a00d7ece6b..c53249cac1 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -1073,7 +1073,8 @@ static int upload_pack_config(const char *var, const char *value, void *unused) precomposed_unicode = git_config_bool(var, value); } - if (current_config_scope() != CONFIG_SCOPE_REPO) { + if (current_config_scope() != CONFIG_SCOPE_LOCAL && + current_config_scope() != CONFIG_SCOPE_WORKTREE) { if (!strcmp("uploadpack.packobjectshook", var)) return git_config_string(&pack_objects_hook, var, value); } From patchwork Sat Jan 25 00:39:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koji Nakamaru via GitGitGadget X-Patchwork-Id: 11351345 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BDEBF921 for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 932392072C for ; Sat, 25 Jan 2020 00:39:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SeAdfb0w" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387588AbgAYAjc (ORCPT ); Fri, 24 Jan 2020 19:39:32 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:33798 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387564AbgAYAjc (ORCPT ); Fri, 24 Jan 2020 19:39:32 -0500 Received: by mail-wr1-f67.google.com with SMTP id t2so4206256wrr.1 for ; Fri, 24 Jan 2020 16:39:30 -0800 (PST) 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=ksmdrg4a3go4/QbgWJ1+2IjATWUvrCDTye6IPw1qD4g=; b=SeAdfb0wWhOe2PfbD5MpSz612xhsw7oCiuKrU8V+lVV8czA7jpuK/aI40O4UWHNZLu clCjGt7b6EWwbkZBuntaHH80ZbUvpMpBRcCrNlliP+8e7QDuyJGjf6A8dRy9L+pmNlPM v1pbih7Zb4WXDXShKNISdY3hWBS3XgHXKr5ikp6Cbgn4YKG6S94cnrMJIYjtn8kcD63V glGotXSN5IP49iKLugqcKFfuQeJMy2HRTd7PftR8EQY1GCop2sUQYW+l0sxMu0u1ZzBo RkAjrFGUFBwzRPNCuVQhlIYlUrjXxYzwUoW46Apm8SROjqn2AylkgSKR7HnoPOTYE1g9 GRPw== 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=ksmdrg4a3go4/QbgWJ1+2IjATWUvrCDTye6IPw1qD4g=; b=tny5MTxxYUcnAiX9riW3VgoTMEPEEo43KBVUhzLlKSfJcackE3F9wsmZ5ixWGhRHjN mgQqYTr4J94S+ZEdEf/476gX2WcSspXxVtb7JPHj0Agrz9O00082uat2mvWbkb/kexBY FOtiE6gB6HN8qPccVENJg4IVTSLIfkOEgPE1TuFr98HF9rCxDk75zJ3xD08mO2a+Xm+I wp8yY+jtBwor9Q/ZMsPLv/UbK3DtIkUPiGTLwSZC3cZR41Ge+oDO1DKaWlsipTxYWAiK uWbIHg7/CfA5AniWAd+7n/1TdD9nTSs0/InvTo4tOfUqVarBwg/LiS+db2yQCfC+BMwO ZpvA== X-Gm-Message-State: APjAAAUCPfbhAtcPiI7PFz/oa3ulaS0Szlqgh5X3BBfx9toyd3Sk73M4 UNSYZSDT+kKei6prlfsgc0tHUfQY X-Google-Smtp-Source: APXvYqyUPpARYbkQ0Q29BfmvlmFK5G89HbGo/pSQ/U3G5PJeSQFOAYU4/mKMO+oBdPtmk/VaGVljhg== X-Received: by 2002:a5d:4045:: with SMTP id w5mr7110916wrp.59.1579912770179; Fri, 24 Jan 2020 16:39:30 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id i11sm9783594wrs.10.2020.01.24.16.39.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 16:39:29 -0800 (PST) Message-Id: <7f00f8559d4e1c4d73bdff9136b03bdd8a53e9dd.1579912764.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Matthew Rogers via GitGitGadget" Date: Sat, 25 Jan 2020 00:39:23 +0000 Subject: [PATCH v5 5/6] config: clarify meaning of command line scoping Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matthew Rogers , Matthew Rogers Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Matthew Rogers CONFIG_SCOPE_CMDLINE is generally used in the code to refer to config values passed in via the -c option. Options passed in using this mechanism share similar scoping characteristics with the --file and --blob options of the 'config' command, namely that they are only in use for that single invocation of git, and that they supersede the normal system/global/local hierarchy. This patch introduces CONFIG_SCOPE_COMMAND to reflect this new idea, which also makes CONFIG_SCOPE_CMDLINE redundant. Signed-off-by: Matthew Rogers --- config.c | 2 +- config.h | 2 +- t/helper/test-config.c | 4 ++-- t/t1308-config-set.sh | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config.c b/config.c index 447a013a15..f319a3d6a0 100644 --- a/config.c +++ b/config.c @@ -1737,7 +1737,7 @@ static int do_git_config_sequence(const struct config_options *opts, free(path); } - current_parsing_scope = CONFIG_SCOPE_CMDLINE; + current_parsing_scope = CONFIG_SCOPE_COMMAND; if (!opts->ignore_cmdline && git_config_from_parameters(fn, data) < 0) die(_("unable to parse command-line config")); diff --git a/config.h b/config.h index 284d92fb0e..f383a71404 100644 --- a/config.h +++ b/config.h @@ -300,7 +300,7 @@ enum config_scope { CONFIG_SCOPE_GLOBAL, CONFIG_SCOPE_LOCAL, CONFIG_SCOPE_WORKTREE, - CONFIG_SCOPE_CMDLINE, + CONFIG_SCOPE_COMMAND, }; enum config_scope current_config_scope(void); diff --git a/t/helper/test-config.c b/t/helper/test-config.c index 6695e463eb..78bbb9eb98 100644 --- a/t/helper/test-config.c +++ b/t/helper/test-config.c @@ -48,8 +48,8 @@ static const char *scope_name(enum config_scope scope) return "repo"; case CONFIG_SCOPE_WORKTREE: return "worktree"; - case CONFIG_SCOPE_CMDLINE: - return "cmdline"; + case CONFIG_SCOPE_COMMAND: + return "command"; default: return "unknown"; } diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh index 90196e2862..fba0abe429 100755 --- a/t/t1308-config-set.sh +++ b/t/t1308-config-set.sh @@ -265,7 +265,7 @@ test_expect_success 'iteration shows correct origins' ' value=from-cmdline origin=command line name= - scope=cmdline + scope=command EOF GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config iterate >actual && test_cmp expect actual From patchwork Sat Jan 25 00:39:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koji Nakamaru via GitGitGadget X-Patchwork-Id: 11351349 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9BD2D921 for ; Sat, 25 Jan 2020 00:39:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5D30D2072C for ; Sat, 25 Jan 2020 00:39:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jJOt7Fp1" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387593AbgAYAjg (ORCPT ); Fri, 24 Jan 2020 19:39:36 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:46017 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387458AbgAYAjc (ORCPT ); Fri, 24 Jan 2020 19:39:32 -0500 Received: by mail-wr1-f66.google.com with SMTP id j42so4155977wrj.12 for ; Fri, 24 Jan 2020 16:39:31 -0800 (PST) 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=LFp4mK6etq2pl4vtqJtV6izsCj/YQsTWJa7JfMKFvKY=; b=jJOt7Fp1R+NLCO03H1rc3piA/77I9ydEbIIEwFVZ1Dw0MRe1S0RXdzH7dXv/7OI3Zi Myo/MkucaI/XuhBavsjFng/6s4lJA/n4lix6B0a+Kfwxcr8Qm/8thn0LbIrktdGoHJ8D V7Cpl9VodJKI93e8Tg8lid8DZKm2Rz2QcpOcuNRF/1I3S3unktvRQs4iZYkZ/d/oyENs HmSrqOFIwG2MDbwJQUg7cFLRMnDprqocnPkmJoyDnU9UVK7aBtpOOLl3xO9VnO16KbXy o4+uW2krCc4TFzklLv3xuwSfasC5CtwL5/1pZ9myDbk5yN/vVFzM8MPvB4GpzVufNKWT +rrg== 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=LFp4mK6etq2pl4vtqJtV6izsCj/YQsTWJa7JfMKFvKY=; b=BAOc1I5BCa/oYdUYVhqDCR2fHGtivkHPvRxBIvCwiqd8cUchlNZLt1QolqvKgHwnv/ TZ+TFN6cXr88LXmFAY13OC5lC82oC4XOdaF2mi8R9GNJzPPl9VF1z+v1HXFE8BPKyy1u TS8pgTqrybnF5OE+nb9RMWhrEGyXP+2CMoBC0Hi8HmItWGOYzFkjx2Y/2JZjw0WEoJQ7 kq+sSGbOkcv+m/RNL5t0ktUNeul9kBuxup8ZNHOqqvDwM51UCOG1zzGO5FSLwvVaISz0 E0Oqj5aYG9C6kibcuz4FkyP4AlvsabYRxsuaQhGipqffgeWXsPZ+DP+jk7pK1ypG2JCM X+1A== X-Gm-Message-State: APjAAAVXXhnYOf/ymPhL7YHULeHjY8qTgM378ca9FCl1dXX4XTAj5emp UakPWKBj7pIT9mJtUQFjzjc2/3vR X-Google-Smtp-Source: APXvYqy+zizG++I+c3VL3YmY58AoKoNBL0F22oO0m4SUTM2sjuR7Y/oWJu41cKYcObPX5kF5V5ZF4Q== X-Received: by 2002:a05:6000:149:: with SMTP id r9mr6698750wrx.147.1579912770954; Fri, 24 Jan 2020 16:39:30 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id m10sm9740578wrx.19.2020.01.24.16.39.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 16:39:30 -0800 (PST) Message-Id: <2e979d9fa5066f61eb89e3c1a1a34ac813d71700.1579912764.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Matthew Rogers via GitGitGadget" Date: Sat, 25 Jan 2020 00:39:24 +0000 Subject: [PATCH v5 6/6] config: add '--show-scope' to print the scope of a config value Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Matthew Rogers , Matthew Rogers Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Matthew Rogers When a user queries config values with --show-origin, often it's difficult to determine what the actual "scope" (local, global, etc.) of a given value is based on just the origin file. Teach 'git config' the '--show-scope' option to print the scope of all displayed config values. Note that we should never see anything of "submodule" scope as that is only ever used by submodule-config.c when parsing the '.gitmodules' file. Signed-off-by: Matthew Rogers --- Documentation/git-config.txt | 15 ++++++--- builtin/config.c | 36 +++++++++++++++++++--- config.c | 26 +++++++++++++++- config.h | 21 +++++++------ submodule-config.c | 4 ++- t/helper/test-config.c | 19 +----------- t/t1300-config.sh | 59 ++++++++++++++++++++++++++++++++++++ 7 files changed, 141 insertions(+), 39 deletions(-) diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 899e92a1c9..2e47765aab 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -9,18 +9,18 @@ git-config - Get and set repository or global options SYNOPSIS -------- [verse] -'git config' [] [--type=] [--show-origin] [-z|--null] name [value [value_regex]] +'git config' [] [--type=] [--show-origin] [--show-scope] [-z|--null] name [value [value_regex]] 'git config' [] [--type=] --add name value 'git config' [] [--type=] --replace-all name value [value_regex] -'git config' [] [--type=] [--show-origin] [-z|--null] --get name [value_regex] -'git config' [] [--type=] [--show-origin] [-z|--null] --get-all name [value_regex] -'git config' [] [--type=] [--show-origin] [-z|--null] [--name-only] --get-regexp name_regex [value_regex] +'git config' [] [--type=] [--show-origin] [--show-scope] [-z|--null] --get name [value_regex] +'git config' [] [--type=] [--show-origin] [--show-scope] [-z|--null] --get-all name [value_regex] +'git config' [] [--type=] [--show-origin] [--show-scope] [-z|--null] [--name-only] --get-regexp name_regex [value_regex] 'git config' [] [--type=] [-z|--null] --get-urlmatch name URL 'git config' [] --unset name [value_regex] 'git config' [] --unset-all name [value_regex] 'git config' [] --rename-section old_name new_name 'git config' [] --remove-section name -'git config' [] [--show-origin] [-z|--null] [--name-only] -l | --list +'git config' [] [--show-origin] [--show-scope] [-z|--null] [--name-only] -l | --list 'git config' [] --get-color name [default] 'git config' [] --get-colorbool name [stdout-is-tty] 'git config' [] -e | --edit @@ -222,6 +222,11 @@ Valid ``'s include: the actual origin (config file path, ref, or blob id if applicable). +--show-scope:: + Similar to `--show-origin` in that it augments the output of + all queried config options with the scope of that value + (local, global, system, command). + --get-colorbool name [stdout-is-tty]:: Find the color setting for `name` (e.g. `color.diff`) and output diff --git a/builtin/config.c b/builtin/config.c index 52a904cfb1..66d2b0d2df 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -33,6 +33,7 @@ static int end_nul; static int respect_includes_opt = -1; static struct config_options config_options; static int show_origin; +static int show_scope; #define ACTION_GET (1<<0) #define ACTION_GET_ALL (1<<1) @@ -155,6 +156,7 @@ static struct option builtin_config_options[] = { OPT_BOOL(0, "name-only", &omit_values, N_("show variable names only")), OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), OPT_BOOL(0, "show-origin", &show_origin, N_("show origin of config (file, standard input, blob, command line)")), + OPT_BOOL(0, "show-scope", &show_scope, N_("show scope of config (worktree, local, global, system, command)")), OPT_STRING(0, "default", &default_value, N_("value"), N_("with --get, use default value when missing entry")), OPT_END(), }; @@ -189,11 +191,23 @@ static void show_config_origin(struct strbuf *buf) strbuf_addch(buf, term); } +static void show_config_scope(struct strbuf *buf) +{ + const char term = end_nul ? '\0' : '\t'; + const char *scope = scope_to_string(current_config_scope()); + + strbuf_addstr(buf, N_(scope)); + strbuf_addch(buf, term); +} + static int show_all_config(const char *key_, const char *value_, void *cb) { - if (show_origin) { + if (show_origin || show_scope) { struct strbuf buf = STRBUF_INIT; - show_config_origin(&buf); + if (show_scope) + show_config_scope(&buf); + if (show_origin) + show_config_origin(&buf); /* Use fwrite as "buf" can contain \0's if "end_null" is set. */ fwrite(buf.buf, 1, buf.len, stdout); strbuf_release(&buf); @@ -213,6 +227,8 @@ struct strbuf_list { static int format_config(struct strbuf *buf, const char *key_, const char *value_) { + if (show_scope) + show_config_scope(buf); if (show_origin) show_config_origin(buf); if (show_keys) @@ -622,6 +638,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) !strcmp(given_config_source.file, "-")) { given_config_source.file = NULL; given_config_source.use_stdin = 1; + given_config_source.scope = CONFIG_SCOPE_COMMAND; } if (use_global_config) { @@ -637,6 +654,8 @@ int cmd_config(int argc, const char **argv, const char *prefix) */ die(_("$HOME not set")); + given_config_source.scope = CONFIG_SCOPE_GLOBAL; + if (access_or_warn(user_config, R_OK, 0) && xdg_config && !access_or_warn(xdg_config, R_OK, 0)) { given_config_source.file = xdg_config; @@ -646,11 +665,13 @@ int cmd_config(int argc, const char **argv, const char *prefix) free(xdg_config); } } - else if (use_system_config) + else if (use_system_config) { given_config_source.file = git_etc_gitconfig(); - else if (use_local_config) + given_config_source.scope = CONFIG_SCOPE_SYSTEM; + } else if (use_local_config) { given_config_source.file = git_pathdup("config"); - else if (use_worktree_config) { + given_config_source.scope = CONFIG_SCOPE_LOCAL; + } else if (use_worktree_config) { struct worktree **worktrees = get_worktrees(0); if (repository_format_worktree_config) given_config_source.file = git_pathdup("config.worktree"); @@ -662,13 +683,18 @@ int cmd_config(int argc, const char **argv, const char *prefix) "section in \"git help worktree\" for details")); else given_config_source.file = git_pathdup("config"); + given_config_source.scope = CONFIG_SCOPE_LOCAL; free_worktrees(worktrees); } else if (given_config_source.file) { if (!is_absolute_path(given_config_source.file) && prefix) given_config_source.file = prefix_filename(prefix, given_config_source.file); + given_config_source.scope = CONFIG_SCOPE_COMMAND; + } else if (given_config_source.blob) { + given_config_source.scope = CONFIG_SCOPE_COMMAND; } + if (respect_includes_opt == -1) config_options.respect_includes = !given_config_source.file; else diff --git a/config.c b/config.c index f319a3d6a0..469dff57b4 100644 --- a/config.c +++ b/config.c @@ -1702,6 +1702,7 @@ static int do_git_config_sequence(const struct config_options *opts, char *xdg_config = xdg_config_home("config"); char *user_config = expand_user_path("~/.gitconfig", 0); char *repo_config; + enum config_scope prev_parsing_scope = current_parsing_scope; if (opts->commondir) repo_config = mkpathdup("%s/config", opts->commondir); @@ -1741,7 +1742,7 @@ static int do_git_config_sequence(const struct config_options *opts, if (!opts->ignore_cmdline && git_config_from_parameters(fn, data) < 0) die(_("unable to parse command-line config")); - current_parsing_scope = CONFIG_SCOPE_UNKNOWN; + current_parsing_scope = prev_parsing_scope; free(xdg_config); free(user_config); free(repo_config); @@ -1762,6 +1763,9 @@ int config_with_options(config_fn_t fn, void *data, data = &inc; } + if (config_source) + current_parsing_scope = config_source->scope; + /* * If we have a specific filename, use it. Otherwise, follow the * regular lookup sequence. @@ -3294,6 +3298,26 @@ const char *current_config_origin_type(void) } } +const char *scope_to_string(enum config_scope scope) +{ + switch (scope) { + case CONFIG_SCOPE_SYSTEM: + return "system"; + case CONFIG_SCOPE_GLOBAL: + return "global"; + case CONFIG_SCOPE_LOCAL: + return "local"; + case CONFIG_SCOPE_WORKTREE: + return "worktree"; + case CONFIG_SCOPE_COMMAND: + return "command"; + case CONFIG_SCOPE_SUBMODULE: + return "submodule"; + default: + return "unknown"; + } +} + const char *current_config_name(void) { const char *name; diff --git a/config.h b/config.h index f383a71404..7b3aec0092 100644 --- a/config.h +++ b/config.h @@ -35,10 +35,22 @@ struct object_id; #define CONFIG_REGEX_NONE ((void *)1) +enum config_scope { + CONFIG_SCOPE_UNKNOWN = 0, + CONFIG_SCOPE_SYSTEM, + CONFIG_SCOPE_GLOBAL, + CONFIG_SCOPE_LOCAL, + CONFIG_SCOPE_WORKTREE, + CONFIG_SCOPE_COMMAND, + CONFIG_SCOPE_SUBMODULE, +}; +const char *scope_to_string(enum config_scope scope); + struct git_config_source { unsigned int use_stdin:1; const char *file; const char *blob; + enum config_scope scope; }; enum config_origin_type { @@ -294,15 +306,6 @@ int config_error_nonbool(const char *); int git_config_parse_parameter(const char *, config_fn_t fn, void *data); -enum config_scope { - CONFIG_SCOPE_UNKNOWN = 0, - CONFIG_SCOPE_SYSTEM, - CONFIG_SCOPE_GLOBAL, - CONFIG_SCOPE_LOCAL, - CONFIG_SCOPE_WORKTREE, - CONFIG_SCOPE_COMMAND, -}; - enum config_scope current_config_scope(void); const char *current_config_origin_type(void); const char *current_config_name(void); diff --git a/submodule-config.c b/submodule-config.c index 85064810b2..b8e97d8ae8 100644 --- a/submodule-config.c +++ b/submodule-config.c @@ -635,7 +635,9 @@ static void submodule_cache_check_init(struct repository *repo) static void config_from_gitmodules(config_fn_t fn, struct repository *repo, void *data) { if (repo->worktree) { - struct git_config_source config_source = { 0 }; + struct git_config_source config_source = { + 0, .scope = CONFIG_SCOPE_SUBMODULE + }; const struct config_options opts = { 0 }; struct object_id oid; char *file; diff --git a/t/helper/test-config.c b/t/helper/test-config.c index 78bbb9eb98..2e91879b2a 100644 --- a/t/helper/test-config.c +++ b/t/helper/test-config.c @@ -37,23 +37,6 @@ * */ -static const char *scope_name(enum config_scope scope) -{ - switch (scope) { - case CONFIG_SCOPE_SYSTEM: - return "system"; - case CONFIG_SCOPE_GLOBAL: - return "global"; - case CONFIG_SCOPE_LOCAL: - return "repo"; - case CONFIG_SCOPE_WORKTREE: - return "worktree"; - case CONFIG_SCOPE_COMMAND: - return "command"; - default: - return "unknown"; - } -} static int iterate_cb(const char *var, const char *value, void *data) { static int nr; @@ -65,7 +48,7 @@ static int iterate_cb(const char *var, const char *value, void *data) printf("value=%s\n", value ? value : "(null)"); printf("origin=%s\n", current_config_origin_type()); printf("name=%s\n", current_config_name()); - printf("scope=%s\n", scope_name(current_config_scope())); + printf("scope=%s\n", scope_to_string(current_config_scope())); return 0; } diff --git a/t/t1300-config.sh b/t/t1300-config.sh index e5fb9114f6..79dbea9bd1 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -1771,6 +1771,65 @@ test_expect_success '--show-origin blob ref' ' test_cmp expect output ' +test_expect_success '--show-scope with --list' ' + cat >expect <<-EOF && + global user.global=true + global user.override=global + global include.path=$INCLUDE_DIR/absolute.include + global user.absolute=include + local user.local=true + local user.override=local + local include.path=../include/relative.include + local user.relative=include + command user.cmdline=true + EOF + git -c user.cmdline=true config --list --show-scope >output && + test_cmp expect output +' + +test_expect_success !MINGW '--show-scope with --blob' ' + blob=$(git hash-object -w "$CUSTOM_CONFIG_FILE") && + cat >expect <<-EOF && + command user.custom=true + EOF + git config --blob=$blob --show-scope --list >output && + test_cmp expect output +' + +test_expect_success '--show-scope with --local' ' + cat >expect <<-\EOF && + local user.local=true + local user.override=local + local include.path=../include/relative.include + EOF + git config --local --list --show-scope >output && + test_cmp expect output +' + +test_expect_success '--show-scope getting a single value' ' + cat >expect <<-\EOF && + local true + EOF + git config --show-scope --get user.local >output && + test_cmp expect output +' + +test_expect_success '--show-scope with --show-origin' ' + cat >expect <<-EOF && + global file:$HOME/.gitconfig user.global=true + global file:$HOME/.gitconfig user.override=global + global file:$HOME/.gitconfig include.path=$INCLUDE_DIR/absolute.include + global file:$INCLUDE_DIR/absolute.include user.absolute=include + local file:.git/config user.local=true + local file:.git/config user.override=local + local file:.git/config include.path=../include/relative.include + local file:.git/../include/relative.include user.relative=include + command command line: user.cmdline=true + EOF + git -c user.cmdline=true config --list --show-origin --show-scope >output && + test_cmp expect output +' + test_expect_success '--local requires a repo' ' # we expect 128 to ensure that we do not simply # fail to find anything and return code "1"