From: "Raghul Nanth A via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Derrick Stolee <derrickstolee@github.com>,
Victoria Dye <vdye@github.com>,
Raghul Nanth A <nanth.raghul@gmail.com>,
Raghul Nanth A <nanth.raghul@gmail.com>
Subject: [PATCH v3] describe: enable sparse index for describe
Date: Thu, 30 Mar 2023 05:59:16 +0000 [thread overview]
Message-ID: <pull.1480.v3.git.git.1680155957146.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1480.v2.git.git.1680107154078.gitgitgadget@gmail.com>
From: Raghul Nanth A <nanth.raghul@gmail.com>
Add usage and performance tests for describe
Describe uses the index when it is run with --dirty flag, which uses the
run_diff_index commmand. The command is sparse-index aware and hence we
can just set the requires-full-index to false
Performance metrics
Test HEAD~1 HEAD
-------------------------------------------------------------------------------------------------
2000.2: git describe --dirty (full-v3) 0.08(0.09+0.01) 0.08(0.06+0.03) +0.0%
2000.3: git describe --dirty (full-v4) 0.09(0.07+0.03) 0.08(0.05+0.04) -11.1%
2000.4: git describe --dirty (sparse-v3) 0.88(0.82+0.06) 0.02(0.01+0.05) -97.7%
2000.5: git describe --dirty (sparse-v4) 0.68(0.60+0.08) 0.02(0.02+0.04) -97.1%
2000.6: echo >>new && git describe --dirty (full-v3) 0.08(0.04+0.05) 0.08(0.05+0.04) +0.0%
2000.7: echo >>new && git describe --dirty (full-v4) 0.08(0.07+0.03) 0.08(0.05+0.04) +0.0%
2000.8: echo >>new && git describe --dirty (sparse-v3) 0.75(0.69+0.07) 0.02(0.03+0.03) -97.3%
2000.9: echo >>new && git describe --dirty (sparse-v4) 0.81(0.73+0.09) 0.02(0.01+0.05) -97.5%
Signed-off-by: Raghul Nanth A <nanth.raghul@gmail.com>
---
describe: enable sparse index for describe
* Removed describe tests not concerned with sparse index
* Added performance metric to commit message
* Moved tests to t1092.sh
* Explained reason for changes in commit message
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1480%2FNanthR%2Fdescribe-sparse-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1480/NanthR/describe-sparse-v3
Pull-Request: https://github.com/git/git/pull/1480
Range-diff vs v2:
1: 03176f64607 ! 1: 01838ca3ab0 describe: enable sparse index for describe
@@ Commit message
Add usage and performance tests for describe
+ Describe uses the index when it is run with --dirty flag, which uses the
+ run_diff_index commmand. The command is sparse-index aware and hence we
+ can just set the requires-full-index to false
+
Performance metrics
Test HEAD~1 HEAD
@@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'sparse-index is n
+test_expect_success 'sparse-index is not expanded: describe' '
+ init_repos &&
+ # Add tag to be read by describe
-+ ensure_not_expanded tag -a v1.0 -m "Version 1" &&
++ git -C sparse-index tag -a v1.0 -m "Version 1" &&
+ ensure_not_expanded describe --dirty &&
++ cp sparse-index-out sparse-index-dirty &&
+ ensure_not_expanded describe &&
-+ echo "test" >>sparse-index/extra.txt &&
++ cp sparse-index-out sparse-index-normal &&
++ # Check describe has same output on clean tree
++ test_cmp sparse-index-dirty sparse-index-normal &&
++ echo "test" >>sparse-index/g &&
+ ensure_not_expanded describe --dirty &&
++ echo "v1.0-dirty" > actual &&
++ # Check describe on dirty work tree
++ test_cmp sparse-index-out actual &&
+ ensure_not_expanded describe
+'
+
test_expect_success 'sparse index is not expanded: diff' '
init_repos &&
-
- ## t/t6121-describe-sparse.sh (new) ##
-@@
-+#!/bin/sh
-+
-+test_description='git describe in sparse checked out trees'
-+
-+GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
-+export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
-+
-+. ./test-lib.sh
-+
-+check_describe () {
-+ indir= &&
-+ while test $# != 0
-+ do
-+ case "$1" in
-+ -C)
-+ indir="$2"
-+ shift
-+ ;;
-+ *)
-+ break
-+ ;;
-+ esac
-+ shift
-+ done &&
-+ indir=${indir:+"$indir"/} &&
-+ expect="$1"
-+ shift
-+ describe_opts="$@"
-+ test_expect_success "describe $describe_opts" '
-+ git ${indir:+ -C "$indir"} describe $describe_opts >actual &&
-+ echo "$expect" >expect &&
-+ test_cmp expect actual
-+ '
-+}
-+
-+test_expect_success setup '
-+ test_commit initial file one &&
-+ test_commit --annotate A file A &&
-+
-+ test_tick &&
-+
-+ git sparse-checkout init --cone
-+'
-+
-+check_describe A HEAD
-+
-+test_expect_success 'describe --dirty with --work-tree' '
-+ (
-+ cd "$TEST_DIRECTORY" &&
-+ git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
-+ ) &&
-+ grep "A" out
-+'
-+
-+test_expect_success 'set-up dirty work tree' '
-+ echo >>file
-+'
-+
-+test_expect_success 'describe --dirty with --work-tree (dirty)' '
-+ git describe --dirty >expected &&
-+ (
-+ cd "$TEST_DIRECTORY" &&
-+ git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
-+ ) &&
-+ test_cmp expected out
-+'
-+test_done
builtin/describe.c | 2 ++
t/perf/p2000-sparse-operations.sh | 3 +++
t/t1092-sparse-checkout-compatibility.sh | 18 ++++++++++++++++++
3 files changed, 23 insertions(+)
diff --git a/builtin/describe.c b/builtin/describe.c
index 5b5930f5c8c..7ff9b5e4b20 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -654,6 +654,8 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
int fd, result;
setup_work_tree();
+ prepare_repo_settings(the_repository);
+ the_repository->settings.command_requires_full_index = 0;
repo_read_index(the_repository);
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED,
NULL, NULL, NULL);
diff --git a/t/perf/p2000-sparse-operations.sh b/t/perf/p2000-sparse-operations.sh
index 3242cfe91a0..db7887470f9 100755
--- a/t/perf/p2000-sparse-operations.sh
+++ b/t/perf/p2000-sparse-operations.sh
@@ -43,6 +43,7 @@ test_expect_success 'setup repo and indexes' '
done &&
git sparse-checkout init --cone &&
+ git tag -a v1.0 -m "Final" &&
git sparse-checkout set $SPARSE_CONE &&
git checkout -b wide $OLD_COMMIT &&
@@ -125,5 +126,7 @@ test_perf_on_all git checkout-index -f --all
test_perf_on_all git update-index --add --remove $SPARSE_CONE/a
test_perf_on_all "git rm -f $SPARSE_CONE/a && git checkout HEAD -- $SPARSE_CONE/a"
test_perf_on_all git grep --cached --sparse bogus -- "f2/f1/f1/*"
+test_perf_on_all git describe --dirty
+test_perf_on_all 'echo >>new && git describe --dirty'
test_done
diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh
index 801919009e1..8bc35c51426 100755
--- a/t/t1092-sparse-checkout-compatibility.sh
+++ b/t/t1092-sparse-checkout-compatibility.sh
@@ -1514,6 +1514,24 @@ test_expect_success 'sparse-index is not expanded: stash' '
ensure_not_expanded stash pop
'
+test_expect_success 'sparse-index is not expanded: describe' '
+ init_repos &&
+ # Add tag to be read by describe
+ git -C sparse-index tag -a v1.0 -m "Version 1" &&
+ ensure_not_expanded describe --dirty &&
+ cp sparse-index-out sparse-index-dirty &&
+ ensure_not_expanded describe &&
+ cp sparse-index-out sparse-index-normal &&
+ # Check describe has same output on clean tree
+ test_cmp sparse-index-dirty sparse-index-normal &&
+ echo "test" >>sparse-index/g &&
+ ensure_not_expanded describe --dirty &&
+ echo "v1.0-dirty" > actual &&
+ # Check describe on dirty work tree
+ test_cmp sparse-index-out actual &&
+ ensure_not_expanded describe
+'
+
test_expect_success 'sparse index is not expanded: diff' '
init_repos &&
base-commit: 27d43aaaf50ef0ae014b88bba294f93658016a2e
--
gitgitgadget
next prev parent reply other threads:[~2023-03-30 5:59 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-27 14:20 [PATCH] describe: enable sparse index for describe Raghul Nanth A via GitGitGadget
2023-03-27 18:26 ` Junio C Hamano
2023-03-28 19:46 ` Derrick Stolee
2023-03-28 20:24 ` Junio C Hamano
2023-03-28 20:35 ` Derrick Stolee
2023-03-29 16:25 ` [PATCH v2] " Raghul Nanth A via GitGitGadget
2023-03-29 17:00 ` Junio C Hamano
2023-03-29 17:49 ` Victoria Dye
2023-03-29 18:27 ` Junio C Hamano
2023-03-30 16:10 ` Raghul Nanth
2023-04-03 16:37 ` Victoria Dye
2023-03-30 5:59 ` Raghul Nanth A via GitGitGadget [this message]
2023-03-30 14:57 ` [PATCH v3] " Junio C Hamano
2023-03-30 15:13 ` Junio C Hamano
2023-03-30 16:23 ` Victoria Dye
2023-03-31 15:43 ` [GSOC][PATCH] " Raghul Nanth A
2023-03-31 16:34 ` Junio C Hamano
2023-03-31 18:20 ` [GSOC][PATCH v4] " Raghul Nanth A
2023-04-03 16:34 ` Victoria Dye
2023-04-03 16:47 ` [GSOC][PATCH v5] " Raghul Nanth A
2023-04-03 7:35 ` [PATCH v4] " Raghul Nanth A
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1480.v3.git.git.1680155957146.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=nanth.raghul@gmail.com \
--cc=vdye@github.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).