From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-4.0 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by dcvr.yhbt.net (Postfix) with ESMTP id 790001F487 for ; Thu, 26 Mar 2020 21:27:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727702AbgCZV1r (ORCPT ); Thu, 26 Mar 2020 17:27:47 -0400 Received: from mail-ed1-f65.google.com ([209.85.208.65]:45544 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726260AbgCZV1q (ORCPT ); Thu, 26 Mar 2020 17:27:46 -0400 Received: by mail-ed1-f65.google.com with SMTP id u59so8654498edc.12 for ; Thu, 26 Mar 2020 14:27:44 -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=QI3gH0FzLV7g0yB+cY6fjEbNythXyD8cgG7YB5sfWw8=; b=e2I41JjkhvfSt7wQqasFgVeFJr+ZfbYxISQgjw229iVWP9RLbubHW6Kqefz/UdE3ic jk87C/gWyJg/JNAuVh0UQwZSVtJdFK7W+CHlYdNjDiIA62Z0IkzbV0jyCuKh9+D9T8my SVIwm/YGb87i3BCcu78HeyDeXnVVpc7TKXBMiDKqkdY73deIyn+/6NFKYcHBwbKtKKv/ zzoOmZ9ULqjhZfG3slD8rZbmGZoeviZmKx4onatbn8eKc/G0PSz9pKrrH8XtPqSrJa2n n002aJ95+sMO+aS2hLlOm/KIniD8dkobEAPhyzvBg4qZx+ONJpVkd8L/VCA20ABwd9R+ fnLQ== 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=QI3gH0FzLV7g0yB+cY6fjEbNythXyD8cgG7YB5sfWw8=; b=PGjN0Yl9YmN2WX3in8mvJdu1/t4G70TF5zV7JINKoeM6LcPpF1MnZwe8p9/ykR8R5x 8z5vzBcchQTK/QVzBWI3QedO7CkDDZ6/gZgRzCdQhH2X216w1SPLl+Fo9BSJFsLbbG9L DbalOn7jp8ua6YaQjfLVnv+CGJf4b+3ATy14MDyMmHXCnwrAoebGB2pDVbiTmNV2F/Jq IgNYEgX9TeWhjRUEvuB3otStd485/DZpkRvIaatgTfjkaQw4URlcOc7gI69bAGt5sroS LgdjG2GKXdWAbRv0xUsj8KDPmsFRSHzruxf3Q87afoH76mqTtH627dlX5mhgMbw6DXsv uCuQ== X-Gm-Message-State: ANhLgQ3PifR9ua9D7DmLlWLjCsIFR4e3RO0cxkv0wqnjYPU7UYptv/l7 d2bfZoz0/hbWEwxkulTx4t+HlgUJ X-Google-Smtp-Source: ADFU+vu+P3pTDCvXzZ07FDVfLmg2i0wA+XOpRnilakfV9ZHX9JSbBDvhh4iHfQbLKyy73Ruc02utsg== X-Received: by 2002:a17:906:1993:: with SMTP id g19mr9872323ejd.70.1585258063408; Thu, 26 Mar 2020 14:27:43 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id p20sm552471edw.31.2020.03.26.14.27.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2020 14:27:42 -0700 (PDT) Message-Id: <752403e339bae098104f41c541c2b0e684586c1f.1585258061.git.gitgitgadget@gmail.com> In-Reply-To: References: From: "Elijah Newren via GitGitGadget" Date: Thu, 26 Mar 2020 21:27:34 +0000 Subject: [PATCH v4 1/7] t7063: more thorough status checking Fcc: Sent Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MIME-Version: 1.0 To: git@vger.kernel.org Cc: Martin Melka , SZEDER =?UTF-8?Q?G=C3=A1bor?= , Samuel Lijin , =?UTF-8?Q?Nguy=E1=BB=85n_Th=C3=A1i_Ng=E1=BB=8Dc?= Duy , Derrick Stolee , Elijah Newren , Elijah Newren Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren It turns out the t7063 has some testcases that even without using the untracked cache cover situations that nothing else in the testsuite handles. Checking the results of git status --porcelain both with and without the untracked cache, and comparing both against our expected results helped uncover a critical bug in some dir.c restructuring. Unfortunately, it's not easy to run status and tell it to ignore the untracked cache; the only knob we have it to instruct it to *delete* (and ignore) the untracked cache. Create a simple helper that will create a clone of the index that is missing the untracked cache bits, and use it to compare that the results with the untracked cache match the results we get without the untracked cache. Signed-off-by: Elijah Newren --- t/t7063-status-untracked-cache.sh | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/t/t7063-status-untracked-cache.sh b/t/t7063-status-untracked-cache.sh index 190ae149cf3..156d06c34e8 100755 --- a/t/t7063-status-untracked-cache.sh +++ b/t/t7063-status-untracked-cache.sh @@ -30,6 +30,30 @@ status_is_clean() { test_must_be_empty ../status.actual } +# Ignore_Untracked_Cache, abbreviated to 3 letters because then people can +# compare commands side-by-side, e.g. +# iuc status --porcelain >expect && +# git status --porcelain >actual && +# test_cmp expect actual +iuc() { + git ls-files -s >../current-index-entries + git ls-files -t | grep ^S | sed -e s/^S.// >../current-sparse-entries + + GIT_INDEX_FILE=.git/tmp_index + export GIT_INDEX_FILE + git update-index --index-info <../current-index-entries + git update-index --skip-worktree $(cat ../current-sparse-entries) + + git -c core.untrackedCache=false "$@" + ret=$? + + rm ../current-index-entries + rm $GIT_INDEX_FILE + unset GIT_INDEX_FILE + + return $ret +} + test_lazy_prereq UNTRACKED_CACHE ' { git update-index --test-untracked-cache; ret=$?; } && test $ret -ne 1 @@ -95,6 +119,8 @@ test_expect_success 'status first time (empty cache)' ' : >../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && + test_cmp ../status.expect ../status.iuc && test_cmp ../status.expect ../actual && cat >../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && + test_cmp ../status.expect ../status.iuc && test_cmp ../status.expect ../actual && cat >../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../status.actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../status.actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../status.actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../trace.expect <../trace && GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \ git status --porcelain >../status.actual && + iuc status --porcelain >../status.iuc && + test_cmp ../status.expect ../status.iuc && test_cmp ../status.expect ../status.actual && cat >../trace.expect <../status.actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <../status.actual && + iuc status --porcelain >../status.iuc && cat >../status.expect <