All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] commit-graph: test cleanup and modernization
@ 2023-07-21 17:30 Taylor Blau
  2023-07-21 17:30 ` [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
                   ` (7 more replies)
  0 siblings, 8 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 17:30 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano

This short series addresses a few style nitpicks that I noticed while
looking through the commit-graph tests while writing [1].

Most importantly, it removes many instances in t5318 that change
directories outside of a sub-shell, altering the current working
directory of subsequent tests. This makes it difficult to run a subset
of tests, or otherwise include `cd "$TRASH_DIRECTORY"` at the top of
each test.

The first two patches are predatory, the next two are the substantive
test clean-ups, and the final patch cleans up some intermediate state
necessary to perform the clean-up over multiple commits.

Thanks in advance for your review.

[1]: https://lore.kernel.org/git/cover.1688776280.git.me@ttaylorr.com/

Taylor Blau (5):
  t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
  t/lib-commit-graph.sh: avoid directory change in
    `graph_git_behavior()`
  t5318: avoid top-level directory changes
  t5328: avoid top-level directory changes
  t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`

 t/lib-commit-graph.sh              |  27 ++-
 t/t5318-commit-graph.sh            | 378 +++++++++++++----------------
 t/t5328-commit-graph-64bit-time.sh |  54 ++---
 3 files changed, 217 insertions(+), 242 deletions(-)

-- 
2.41.0.381.gd8424d64777

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
@ 2023-07-21 17:30 ` Taylor Blau
  2023-07-21 17:41   ` Eric Sunshine
  2023-07-21 17:30 ` [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()` Taylor Blau
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 17:30 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano

The `graph_read_expect()` function is used to ensure that the output of
the "read-graph" test helper matches certain parameters (e.g., how many
commits are in the graph, which chunks were written, etc.).

It expects the Git repository being tested to be at the current working
directory. However, a handful of t5318 tests use different repositories
stored in sub-directories. To work around this, several tests in t5318
change into the relevant repository outside of a sub-shell, altering the
context for the rest of the suite.

Prepare to remove these globally-scoped directory changes by teaching
`graph_read_expect()` to take an optional "-C dir" to specify where the
repository containing the commit-graph being tested is.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/lib-commit-graph.sh | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
index 5d79e1a4e96..c50553df0ed 100755
--- a/t/lib-commit-graph.sh
+++ b/t/lib-commit-graph.sh
@@ -32,6 +32,13 @@ graph_git_behavior() {
 graph_read_expect() {
 	OPTIONAL=""
 	NUM_CHUNKS=3
+	DIR="."
+	if test "$1" = -C
+	then
+		shift
+		DIR="$1"
+		shift
+	fi
 	if test -n "$2"
 	then
 		OPTIONAL=" $2"
@@ -47,12 +54,15 @@ graph_read_expect() {
 	then
 		OPTIONS=" read_generation_data"
 	fi
-	cat >expect <<- EOF
+	cat >$DIR/expect <<- EOF
 	header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
 	num_commits: $1
 	chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL
 	options:$OPTIONS
 	EOF
-	test-tool read-graph >output &&
-	test_cmp expect output
+	(
+		cd "$DIR" &&
+		test-tool read-graph >output &&
+		test_cmp expect output
+	)
 }
-- 
2.41.0.381.gd8424d64777


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
  2023-07-21 17:30 ` [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
@ 2023-07-21 17:30 ` Taylor Blau
  2023-07-21 18:01   ` Eric Sunshine
  2023-07-21 17:30 ` [PATCH 3/5] t5318: avoid top-level directory changes Taylor Blau
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 17:30 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano

The `graph_git_behavior()` helper asserts that a number of common Git
operations (such as `git log --oneline`, `git log --topo-order`, etc.)
produce identical output regardless of whether or not a commit-graph is
in use.

This helper takes as its second argument the location (relative to the
`$TRASH_DIRECTORY`) of the Git repostiory under test. In order to run
each of its commands within that repository, it first changes into that
directory, without the use of a sub-shell.

This pollutes future tests which expect to be run in the top-level
`$TRASH_DIRECTORY` as usual. We could wrap `graph_git_behavior()` in a
sub-shell, like:

    graph_git_behavior() {
      # ...
      (
        cd "$TRASH_DIRECTORY/$DIR" &&
        graph_git_two_modesl
      )
    }

, but since we're invoking git directly, we can pass along a "-C $DIR"
when "$DIR" is non-empty.

Note, however, that until the remaining callers are cleaned up to avoid
changing working directories outside of a sub-shell, that we need to
ensure that we are operating in the top-level $TRASH_DIRECTORY. The
inner-subshell will go away in a future commit once it is no longer
necessary.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/lib-commit-graph.sh | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
index c50553df0ed..c93969ae74d 100755
--- a/t/lib-commit-graph.sh
+++ b/t/lib-commit-graph.sh
@@ -20,12 +20,14 @@ graph_git_behavior() {
 	BRANCH=$3
 	COMPARE=$4
 	test_expect_success "check normal git operations: $MSG" '
-		cd "$TRASH_DIRECTORY/$DIR" &&
-		graph_git_two_modes "log --oneline $BRANCH" &&
-		graph_git_two_modes "log --topo-order $BRANCH" &&
-		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
-		graph_git_two_modes "branch -vv" &&
-		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
+		(
+			cd "$TRASH_DIRECTORY" &&
+			graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
+			graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
+			graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
+			graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
+			graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
+		)
 	'
 }
 
-- 
2.41.0.381.gd8424d64777


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 3/5] t5318: avoid top-level directory changes
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
  2023-07-21 17:30 ` [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
  2023-07-21 17:30 ` [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()` Taylor Blau
@ 2023-07-21 17:30 ` Taylor Blau
  2023-07-21 18:28   ` Eric Sunshine
  2023-07-21 17:30 ` [PATCH 4/5] t5328: " Taylor Blau
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 17:30 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano

Avoid changing the current working directory from outside of a sub-shell
during the tests in t5318.

Each test has mostly straightforward changes, either:

  - Removing the top-level `cd "$TRASH_DIRECTORY/full"`, which is
    unnecessary after ensuring that other tests don't change their
    working directory outside of a sub-shell.

  - Changing any Git invocations which want to be in a sub-directory by
    either (a) adding a "-C $DIR" argument, or (b) moving the whole test
    into a sub-shell.

While we're here, remove any explicit "git config core.commitGraph true"
invocations which were designed to enable use of the commit-graph. These
are unnecessary following 31b1de6a09b (commit-graph: turn on
commit-graph by default, 2019-08-13).

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/t5318-commit-graph.sh | 378 ++++++++++++++++++----------------------
 1 file changed, 172 insertions(+), 206 deletions(-)

diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
index bf8a92317b3..4df76173a8d 100755
--- a/t/t5318-commit-graph.sh
+++ b/t/t5318-commit-graph.sh
@@ -24,12 +24,10 @@ test_expect_success 'usage shown with an error on unknown sub-command' '
 	test_cmp expect actual
 '
 
+objdir=".git/objects"
+
 test_expect_success 'setup full repo' '
-	mkdir full &&
-	cd "$TRASH_DIRECTORY/full" &&
-	git init &&
-	git config core.commitGraph true &&
-	objdir=".git/objects"
+	git init full
 '
 
 test_expect_success POSIXPERM 'tweak umask for modebit tests' '
@@ -37,31 +35,28 @@ test_expect_success POSIXPERM 'tweak umask for modebit tests' '
 '
 
 test_expect_success 'verify graph with no graph file' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph verify
+	git -C full commit-graph verify
 '
 
 test_expect_success 'write graph with no packs' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write --object-dir $objdir &&
-	test_path_is_missing $objdir/info/commit-graph
+	git -C full commit-graph write --object-dir $objdir &&
+	test_path_is_missing full/$objdir/info/commit-graph
 '
 
 test_expect_success 'exit with correct error on bad input to --stdin-packs' '
-	cd "$TRASH_DIRECTORY/full" &&
 	echo doesnotexist >in &&
-	test_expect_code 1 git commit-graph write --stdin-packs <in 2>stderr &&
+	test_expect_code 1 git -C full commit-graph write --stdin-packs \
+		<in 2>stderr &&
 	test_i18ngrep "error adding pack" stderr
 '
 
 test_expect_success 'create commits and repack' '
-	cd "$TRASH_DIRECTORY/full" &&
 	for i in $(test_seq 3)
 	do
-		test_commit $i &&
-		git branch commits/$i || return 1
+		test_commit -C full $i &&
+		git -C full branch commits/$i || return 1
 	done &&
-	git repack
+	git -C full repack
 '
 
 . "$TEST_DIRECTORY"/lib-commit-graph.sh
@@ -69,117 +64,106 @@ test_expect_success 'create commits and repack' '
 graph_git_behavior 'no graph' full commits/3 commits/1
 
 test_expect_success 'exit with correct error on bad input to --stdin-commits' '
-	cd "$TRASH_DIRECTORY/full" &&
 	# invalid, non-hex OID
-	echo HEAD >in &&
-	test_expect_code 1 git commit-graph write --stdin-commits <in 2>stderr &&
+	echo HEAD | test_expect_code 1 git -C full commit-graph write \
+		--stdin-commits 2>stderr &&
 	test_i18ngrep "unexpected non-hex object ID: HEAD" stderr &&
 	# non-existent OID
-	echo $ZERO_OID >in &&
-	test_expect_code 1 git commit-graph write --stdin-commits <in 2>stderr &&
+	echo $ZERO_OID | test_expect_code 1 git -C full commit-graph write \
+		--stdin-commits 2>stderr &&
 	test_i18ngrep "invalid object" stderr &&
 	# valid commit and tree OID
-	git rev-parse HEAD HEAD^{tree} >in &&
-	git commit-graph write --stdin-commits <in &&
-	graph_read_expect 3 generation_data
+	git -C full rev-parse HEAD HEAD^{tree} >in &&
+	git -C full commit-graph write --stdin-commits <in &&
+	graph_read_expect -C full 3 generation_data
 '
 
 test_expect_success 'write graph' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "3" generation_data
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 3 generation_data
 '
 
 test_expect_success POSIXPERM 'write graph has correct permissions' '
-	test_path_is_file $objdir/info/commit-graph &&
+	test_path_is_file full/$objdir/info/commit-graph &&
 	echo "-r--r--r--" >expect &&
-	test_modebits $objdir/info/commit-graph >actual &&
+	test_modebits full/$objdir/info/commit-graph >actual &&
 	test_cmp expect actual
 '
 
 graph_git_behavior 'graph exists' full commits/3 commits/1
 
 test_expect_success 'Add more commits' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git reset --hard commits/1 &&
+	git -C full reset --hard commits/1 &&
 	for i in $(test_seq 4 5)
 	do
-		test_commit $i &&
-		git branch commits/$i || return 1
+		test_commit -C full $i &&
+		git -C full branch commits/$i || return 1
 	done &&
-	git reset --hard commits/2 &&
+	git -C full reset --hard commits/2 &&
 	for i in $(test_seq 6 7)
 	do
-		test_commit $i &&
-		git branch commits/$i || return 1
+		test_commit -C full $i &&
+		git -C full branch commits/$i || return 1
 	done &&
-	git reset --hard commits/2 &&
-	git merge commits/4 &&
-	git branch merge/1 &&
-	git reset --hard commits/4 &&
-	git merge commits/6 &&
-	git branch merge/2 &&
-	git reset --hard commits/3 &&
-	git merge commits/5 commits/7 &&
-	git branch merge/3 &&
-	git repack
+	git -C full reset --hard commits/2 &&
+	git -C full merge commits/4 &&
+	git -C full branch merge/1 &&
+	git -C full reset --hard commits/4 &&
+	git -C full merge commits/6 &&
+	git -C full branch merge/2 &&
+	git -C full reset --hard commits/3 &&
+	git -C full merge commits/5 commits/7 &&
+	git -C full branch merge/3 &&
+	git -C full repack
 '
 
 test_expect_success 'commit-graph write progress off for redirected stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write 2>err &&
+	git -C full commit-graph write 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph write force progress on for stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	GIT_PROGRESS_DELAY=0 git commit-graph write --progress 2>err &&
+	GIT_PROGRESS_DELAY=0 git -C full commit-graph write --progress 2>err &&
 	test_file_not_empty err
 '
 
 test_expect_success 'commit-graph write with the --no-progress option' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write --no-progress 2>err &&
+	git -C full commit-graph write --no-progress 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph write --stdin-commits progress off for redirected stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/5 >in &&
-	git commit-graph write --stdin-commits <in 2>err &&
+	git -C full rev-parse commits/5 >in &&
+	git -C full commit-graph write --stdin-commits <in 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph write --stdin-commits force progress on for stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/5 >in &&
-	GIT_PROGRESS_DELAY=0 git commit-graph write --stdin-commits --progress <in 2>err &&
+	git -C full rev-parse commits/5 >in &&
+	GIT_PROGRESS_DELAY=0 git -C full commit-graph write --stdin-commits \
+		--progress <in 2>err &&
 	test_i18ngrep "Collecting commits from input" err
 '
 
 test_expect_success 'commit-graph write --stdin-commits with the --no-progress option' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/5 >in &&
-	git commit-graph write --stdin-commits --no-progress <in 2>err &&
+	git -C full rev-parse commits/5 >in &&
+	git -C full commit-graph write --stdin-commits --no-progress <in 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph verify progress off for redirected stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph verify 2>err &&
+	git -C full commit-graph verify 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph verify force progress on for stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	GIT_PROGRESS_DELAY=0 git commit-graph verify --progress 2>err &&
+	GIT_PROGRESS_DELAY=0 git -C full commit-graph verify --progress 2>err &&
 	test_file_not_empty err
 '
 
 test_expect_success 'commit-graph verify with the --no-progress option' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph verify --no-progress 2>err &&
+	git -C full commit-graph verify --no-progress 2>err &&
 	test_must_be_empty err
 '
 
@@ -194,10 +178,9 @@ test_expect_success 'commit-graph verify with the --no-progress option' '
 # 1
 
 test_expect_success 'write graph with merges' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "10" "generation_data extra_edges"
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 10 "generation_data extra_edges"
 '
 
 graph_git_behavior 'merge 1 vs 2' full merge/1 merge/2
@@ -205,12 +188,11 @@ graph_git_behavior 'merge 1 vs 3' full merge/1 merge/3
 graph_git_behavior 'merge 2 vs 3' full merge/2 merge/3
 
 test_expect_success 'Add one more commit' '
-	cd "$TRASH_DIRECTORY/full" &&
-	test_commit 8 &&
-	git branch commits/8 &&
-	ls $objdir/pack | grep idx >existing-idx &&
-	git repack &&
-	ls $objdir/pack| grep idx | grep -v -f existing-idx >new-idx
+	test_commit -C full 8 &&
+	git -C full branch commits/8 &&
+	ls full/$objdir/pack | grep idx >existing-idx &&
+	git -C full repack &&
+	ls full/$objdir/pack| grep idx | grep -v -f existing-idx >new-idx
 '
 
 # Current graph structure:
@@ -229,114 +211,101 @@ graph_git_behavior 'mixed mode, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'mixed mode, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'write graph with new commit' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'full graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'full graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'write graph with nothing new' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'cleared graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'cleared graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph from latest pack with closure' '
-	cd "$TRASH_DIRECTORY/full" &&
-	cat new-idx | git commit-graph write --stdin-packs &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "9" "generation_data extra_edges"
+	git -C full commit-graph write --stdin-packs <new-idx &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 9 "generation_data extra_edges"
 '
 
 graph_git_behavior 'graph from pack, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'graph from pack, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph from commits with closure' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git tag -a -m "merge" tag/merge merge/2 &&
-	git rev-parse tag/merge >commits-in &&
-	git rev-parse merge/1 >>commits-in &&
-	cat commits-in | git commit-graph write --stdin-commits &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "6" "generation_data"
+	git -C full tag -a -m "merge" tag/merge merge/2 &&
+	git -C full rev-parse tag/merge >commits-in &&
+	git -C full rev-parse merge/1 >>commits-in &&
+	git -C full commit-graph write --stdin-commits <commits-in &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 6 "generation_data"
 '
 
 graph_git_behavior 'graph from commits, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'graph from commits, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph from commits with append' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse merge/3 | git commit-graph write --stdin-commits --append &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "10" "generation_data extra_edges"
+	git -C full rev-parse merge/3 >in &&
+	git -C full commit-graph write --stdin-commits --append <in &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 10 "generation_data extra_edges"
 '
 
 graph_git_behavior 'append graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'append graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph using --reachable' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write --reachable &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C full commit-graph write --reachable &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'append graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'append graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'setup bare repo' '
-	cd "$TRASH_DIRECTORY" &&
-	git clone --bare --no-local full bare &&
-	cd bare &&
-	git config core.commitGraph true &&
-	baredir="./objects"
+	git clone --bare --no-local full bare
 '
 
 graph_git_behavior 'bare repo, commit 8 vs merge 1' bare commits/8 merge/1
 graph_git_behavior 'bare repo, commit 8 vs merge 2' bare commits/8 merge/2
 
 test_expect_success 'write graph in bare repo' '
-	cd "$TRASH_DIRECTORY/bare" &&
-	git commit-graph write &&
-	test_path_is_file $baredir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C bare commit-graph write &&
+	test_path_is_file bare/objects/info/commit-graph &&
+	graph_read_expect -C bare 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'bare repo with graph, commit 8 vs merge 1' bare commits/8 merge/1
 graph_git_behavior 'bare repo with graph, commit 8 vs merge 2' bare commits/8 merge/2
 
 test_expect_success 'perform fast-forward merge in full repo' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git checkout -b merge-5-to-8 commits/5 &&
-	git merge commits/8 &&
-	git show-ref -s merge-5-to-8 >output &&
-	git show-ref -s commits/8 >expect &&
+	git -C full checkout -b merge-5-to-8 commits/5 &&
+	git -C full merge commits/8 &&
+	git -C full show-ref -s merge-5-to-8 >output &&
+	git -C full show-ref -s commits/8 >expect &&
 	test_cmp expect output
 '
 
 test_expect_success 'check that gc computes commit-graph' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit --allow-empty -m "blank" &&
-	git commit-graph write --reachable &&
-	cp $objdir/info/commit-graph commit-graph-before-gc &&
-	git reset --hard HEAD~1 &&
-	git config gc.writeCommitGraph true &&
-	git gc &&
-	cp $objdir/info/commit-graph commit-graph-after-gc &&
+	test_commit -C full --no-tag blank &&
+	git -C full commit-graph write --reachable &&
+	cp full/$objdir/info/commit-graph commit-graph-before-gc &&
+	git -C full reset --hard HEAD~1 &&
+	test_config -C full gc.writeCommitGraph true &&
+	git -C full gc &&
+	cp full/$objdir/info/commit-graph commit-graph-after-gc &&
 	! test_cmp_bin commit-graph-before-gc commit-graph-after-gc &&
-	git commit-graph write --reachable &&
-	test_cmp_bin commit-graph-after-gc $objdir/info/commit-graph
+	git -C full commit-graph write --reachable &&
+	test_cmp_bin commit-graph-after-gc full/$objdir/info/commit-graph
 '
 
 test_expect_success 'replace-objects invalidates commit-graph' '
-	cd "$TRASH_DIRECTORY" &&
 	test_when_finished rm -rf replace &&
 	git clone full replace &&
 	(
@@ -359,7 +328,6 @@ test_expect_success 'replace-objects invalidates commit-graph' '
 '
 
 test_expect_success 'commit grafts invalidate commit-graph' '
-	cd "$TRASH_DIRECTORY" &&
 	test_when_finished rm -rf graft &&
 	git clone --template= full graft &&
 	(
@@ -384,7 +352,6 @@ test_expect_success 'commit grafts invalidate commit-graph' '
 '
 
 test_expect_success 'replace-objects invalidates commit-graph' '
-	cd "$TRASH_DIRECTORY" &&
 	test_when_finished rm -rf shallow &&
 	git clone --depth 2 "file://$TRASH_DIRECTORY/full" shallow &&
 	(
@@ -427,24 +394,25 @@ test_expect_success 'warn on improper hash version' '
 '
 
 test_expect_success TIME_IS_64BIT,TIME_T_IS_64BIT 'lower layers have overflow chunk' '
-	cd "$TRASH_DIRECTORY/full" &&
 	UNIX_EPOCH_ZERO="@0 +0000" &&
 	FUTURE_DATE="@4147483646 +0000" &&
-	rm -f .git/objects/info/commit-graph &&
-	test_commit --date "$FUTURE_DATE" future-1 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" old-1 &&
-	git commit-graph write --reachable &&
-	test_commit --date "$FUTURE_DATE" future-2 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" old-2 &&
-	git commit-graph write --reachable --split=no-merge &&
-	test_commit extra &&
-	git commit-graph write --reachable --split=no-merge &&
-	git commit-graph write --reachable &&
-	graph_read_expect 16 "generation_data generation_data_overflow extra_edges" &&
-	mv .git/objects/info/commit-graph commit-graph-upgraded &&
-	git commit-graph write --reachable &&
-	graph_read_expect 16 "generation_data generation_data_overflow extra_edges" &&
-	test_cmp .git/objects/info/commit-graph commit-graph-upgraded
+	rm -f full/.git/objects/info/commit-graph &&
+	test_commit -C full --date "$FUTURE_DATE" future-1 &&
+	test_commit -C full --date "$UNIX_EPOCH_ZERO" old-1 &&
+	git -C full commit-graph write --reachable &&
+	test_commit -C full --date "$FUTURE_DATE" future-2 &&
+	test_commit -C full --date "$UNIX_EPOCH_ZERO" old-2 &&
+	git -C full commit-graph write --reachable --split=no-merge &&
+	test_commit -C full extra &&
+	git -C full commit-graph write --reachable --split=no-merge &&
+	git -C full commit-graph write --reachable &&
+	graph_read_expect -C full 16 \
+		"generation_data generation_data_overflow extra_edges" &&
+	mv full/.git/objects/info/commit-graph commit-graph-upgraded &&
+	git -C full commit-graph write --reachable &&
+	graph_read_expect -C full 16 \
+		"generation_data generation_data_overflow extra_edges" &&
+	test_cmp full/.git/objects/info/commit-graph commit-graph-upgraded
 '
 
 # the verify tests below expect the commit-graph to contain
@@ -454,10 +422,11 @@ test_expect_success TIME_IS_64BIT,TIME_T_IS_64BIT 'lower layers have overflow ch
 # and the tests will likely break.
 
 test_expect_success 'git commit-graph verify' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/8 | git -c commitGraph.generationVersion=1 commit-graph write --stdin-commits &&
-	git commit-graph verify >output &&
-	graph_read_expect 9 extra_edges 1
+	git -C full rev-parse commits/8 >in &&
+	git -C full -c commitGraph.generationVersion=1 commit-graph write \
+		--stdin-commits <in &&
+	git -C full commit-graph verify >output &&
+	graph_read_expect -C full 9 extra_edges 1
 '
 
 NUM_COMMITS=9
@@ -495,25 +464,24 @@ GRAPH_BYTE_OCTOPUS=$(($GRAPH_OCTOPUS_DATA_OFFSET + 4))
 GRAPH_BYTE_FOOTER=$(($GRAPH_OCTOPUS_DATA_OFFSET + 4 * $NUM_OCTOPUS_EDGES))
 
 corrupt_graph_setup() {
-	cd "$TRASH_DIRECTORY/full" &&
-	test_when_finished mv commit-graph-backup $objdir/info/commit-graph &&
-	cp $objdir/info/commit-graph commit-graph-backup &&
-	chmod u+w $objdir/info/commit-graph
+	test_when_finished mv commit-graph-backup full/$objdir/info/commit-graph &&
+	cp full/$objdir/info/commit-graph commit-graph-backup &&
+	chmod u+w full/$objdir/info/commit-graph
 }
 
 corrupt_graph_verify() {
 	grepstr=$1
-	test_must_fail git commit-graph verify 2>test_err &&
+	test_must_fail git -C full commit-graph verify 2>test_err &&
 	grep -v "^+" test_err >err &&
 	test_i18ngrep "$grepstr" err &&
 	if test "$2" != "no-copy"
 	then
-		cp $objdir/info/commit-graph commit-graph-pre-write-test
+		cp full/$objdir/info/commit-graph commit-graph-pre-write-test
 	fi &&
-	git status --short &&
-	GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE=true git commit-graph write &&
-	chmod u+w $objdir/info/commit-graph &&
-	git commit-graph verify
+	git -C full status --short &&
+	GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE=true git -C full commit-graph write &&
+	chmod u+w full/$objdir/info/commit-graph &&
+	git -C full commit-graph verify
 }
 
 # usage: corrupt_graph_and_verify <position> <data> <string> [<zero_pos>]
@@ -527,24 +495,24 @@ corrupt_graph_and_verify() {
 	data="${2:-\0}"
 	grepstr=$3
 	corrupt_graph_setup &&
-	orig_size=$(wc -c < $objdir/info/commit-graph) &&
+	orig_size=$(wc -c <full/$objdir/info/commit-graph) &&
 	zero_pos=${4:-${orig_size}} &&
-	printf "$data" | dd of="$objdir/info/commit-graph" bs=1 seek="$pos" conv=notrunc &&
-	dd of="$objdir/info/commit-graph" bs=1 seek="$zero_pos" if=/dev/null &&
-	test-tool genzeros $(($orig_size - $zero_pos)) >>"$objdir/info/commit-graph" &&
+	printf "$data" | dd of="full/$objdir/info/commit-graph" bs=1 seek="$pos" conv=notrunc &&
+	dd of="full/$objdir/info/commit-graph" bs=1 seek="$zero_pos" if=/dev/null &&
+	test-tool genzeros $(($orig_size - $zero_pos)) >>"full/$objdir/info/commit-graph" &&
 	corrupt_graph_verify "$grepstr"
 
 }
 
 test_expect_success POSIXPERM,SANITY 'detect permission problem' '
 	corrupt_graph_setup &&
-	chmod 000 $objdir/info/commit-graph &&
+	chmod 000 full/$objdir/info/commit-graph &&
 	corrupt_graph_verify "Could not open" "no-copy"
 '
 
 test_expect_success 'detect too small' '
 	corrupt_graph_setup &&
-	echo "a small graph" >$objdir/info/commit-graph &&
+	echo "a small graph" >full/$objdir/info/commit-graph &&
 	corrupt_graph_verify "too small"
 '
 
@@ -655,33 +623,30 @@ test_expect_success 'detect incorrect chunk count' '
 '
 
 test_expect_success 'git fsck (checks commit-graph when config set to true)' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git fsck &&
+	git -C full fsck &&
 	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
 		"incorrect checksum" &&
-	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
-	test_must_fail git -c core.commitGraph=true fsck
+	cp commit-graph-pre-write-test full/$objdir/info/commit-graph &&
+	test_must_fail git -C full -c core.commitGraph=true fsck
 '
 
 test_expect_success 'git fsck (ignores commit-graph when config set to false)' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git fsck &&
+	git -C full fsck &&
 	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
 		"incorrect checksum" &&
-	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
-	git -c core.commitGraph=false fsck
+	cp commit-graph-pre-write-test full/$objdir/info/commit-graph &&
+	git -C full -c core.commitGraph=false fsck
 '
 
 test_expect_success 'git fsck (checks commit-graph when config unset)' '
-	cd "$TRASH_DIRECTORY/full" &&
-	test_when_finished "git config core.commitGraph true" &&
+	test_when_finished "git -C full config core.commitGraph true" &&
 
-	git fsck &&
+	git -C full fsck &&
 	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
 		"incorrect checksum" &&
-	test_unconfig core.commitGraph &&
-	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
-	test_must_fail git fsck
+	test_unconfig -C full core.commitGraph &&
+	cp commit-graph-pre-write-test full/$objdir/info/commit-graph &&
+	test_must_fail git -C full fsck
 '
 
 test_expect_success 'git fsck shows commit-graph output with --progress' '
@@ -792,32 +757,33 @@ test_expect_success 'corrupt commit-graph write (missing tree)' '
 #
 
 test_expect_success 'set up and verify repo with generation data overflow chunk' '
-	objdir=".git/objects" &&
 	UNIX_EPOCH_ZERO="@0 +0000" &&
 	FUTURE_DATE="@2147483646 +0000" &&
-	cd "$TRASH_DIRECTORY" &&
-	mkdir repo &&
-	cd repo &&
-	git init &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
-	test_commit 2 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
-	git commit-graph write --reachable &&
-	graph_read_expect 3 generation_data &&
-	test_commit --date "$FUTURE_DATE" 4 &&
-	test_commit 5 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
-	git branch left &&
-	git reset --hard 3 &&
-	test_commit 7 &&
-	test_commit --date "$FUTURE_DATE" 8 &&
-	test_commit 9 &&
-	git branch right &&
-	git reset --hard 3 &&
-	test_merge M left right &&
-	git commit-graph write --reachable &&
-	graph_read_expect 10 "generation_data generation_data_overflow" &&
-	git commit-graph verify
+
+	git init repo &&
+	(
+		cd repo &&
+
+		test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
+		test_commit 2 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
+		git commit-graph write --reachable &&
+		graph_read_expect 3 generation_data &&
+		test_commit --date "$FUTURE_DATE" 4 &&
+		test_commit 5 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
+		git branch left &&
+		git reset --hard 3 &&
+		test_commit 7 &&
+		test_commit --date "$FUTURE_DATE" 8 &&
+		test_commit 9 &&
+		git branch right &&
+		git reset --hard 3 &&
+		test_merge M left right &&
+		git commit-graph write --reachable &&
+		graph_read_expect 10 "generation_data generation_data_overflow" &&
+		git commit-graph verify
+	)
 '
 
 graph_git_behavior 'generation data overflow chunk repo' repo left right
-- 
2.41.0.381.gd8424d64777


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 4/5] t5328: avoid top-level directory changes
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
                   ` (2 preceding siblings ...)
  2023-07-21 17:30 ` [PATCH 3/5] t5318: avoid top-level directory changes Taylor Blau
@ 2023-07-21 17:30 ` Taylor Blau
  2023-07-21 17:30 ` [PATCH 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()` Taylor Blau
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 17:30 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano

In a similar spirit as the last commit, avoid top-level directory
changes in the last remaining commit-graph related test, t5328.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/t5328-commit-graph-64bit-time.sh | 54 +++++++++++++++---------------
 1 file changed, 27 insertions(+), 27 deletions(-)

diff --git a/t/t5328-commit-graph-64bit-time.sh b/t/t5328-commit-graph-64bit-time.sh
index 57e4d9c6998..e9c521c061c 100755
--- a/t/t5328-commit-graph-64bit-time.sh
+++ b/t/t5328-commit-graph-64bit-time.sh
@@ -37,39 +37,39 @@ test_expect_success 'lower layers have overflow chunk' '
 graph_git_behavior 'overflow' '' HEAD~2 HEAD
 
 test_expect_success 'set up and verify repo with generation data overflow chunk' '
-	mkdir repo &&
-	cd repo &&
-	git init &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
-	test_commit 2 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
-	git commit-graph write --reachable &&
-	graph_read_expect 3 generation_data &&
-	test_commit --date "$FUTURE_DATE" 4 &&
-	test_commit 5 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
-	git branch left &&
-	git reset --hard 3 &&
-	test_commit 7 &&
-	test_commit --date "$FUTURE_DATE" 8 &&
-	test_commit 9 &&
-	git branch right &&
-	git reset --hard 3 &&
-	test_merge M left right &&
-	git commit-graph write --reachable &&
-	graph_read_expect 10 "generation_data generation_data_overflow" &&
-	git commit-graph verify
+	git init repo &&
+	(
+		cd repo &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
+		test_commit 2 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
+		git commit-graph write --reachable &&
+		graph_read_expect 3 generation_data &&
+		test_commit --date "$FUTURE_DATE" 4 &&
+		test_commit 5 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
+		git branch left &&
+		git reset --hard 3 &&
+		test_commit 7 &&
+		test_commit --date "$FUTURE_DATE" 8 &&
+		test_commit 9 &&
+		git branch right &&
+		git reset --hard 3 &&
+		test_merge M left right &&
+		git commit-graph write --reachable &&
+		graph_read_expect 10 "generation_data generation_data_overflow" &&
+		git commit-graph verify
+	)
 '
 
 graph_git_behavior 'overflow 2' repo left right
 
 test_expect_success 'single commit with generation data exceeding UINT32_MAX' '
 	git init repo-uint32-max &&
-	cd repo-uint32-max &&
-	test_commit --date "@4294967297 +0000" 1 &&
-	git commit-graph write --reachable &&
-	graph_read_expect 1 "generation_data" &&
-	git commit-graph verify
+	test_commit -C repo-uint32-max --date "@4294967297 +0000" 1 &&
+	git -C repo-uint32-max commit-graph write --reachable &&
+	graph_read_expect -C repo-uint32-max 1 "generation_data" &&
+	git -C repo-uint32-max commit-graph verify
 '
 
 test_done
-- 
2.41.0.381.gd8424d64777


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
                   ` (3 preceding siblings ...)
  2023-07-21 17:30 ` [PATCH 4/5] t5328: " Taylor Blau
@ 2023-07-21 17:30 ` Taylor Blau
  2023-07-21 18:34 ` [PATCH 0/5] commit-graph: test cleanup and modernization Eric Sunshine
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 17:30 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano

In a previous commit, we introduced a sub-shell in the implementation of
`graph_git_behavior()`, in order to allow us to pass `-C "$DIR"`
directly to the git processes spawned by `graph_git_two_modes()`.

Now that its callers are always operating from the "$TRASH_DIRECTORY"
instead of one of its sub-directories, we can drop the inner sub-shell,
as it is no longer required.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/lib-commit-graph.sh | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
index c93969ae74d..b7b52b4291b 100755
--- a/t/lib-commit-graph.sh
+++ b/t/lib-commit-graph.sh
@@ -20,14 +20,11 @@ graph_git_behavior() {
 	BRANCH=$3
 	COMPARE=$4
 	test_expect_success "check normal git operations: $MSG" '
-		(
-			cd "$TRASH_DIRECTORY" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
-			graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
-		)
+		graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
+		graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
+		graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
+		graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
+		graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
 	'
 }
 
-- 
2.41.0.381.gd8424d64777

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
  2023-07-21 17:30 ` [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
@ 2023-07-21 17:41   ` Eric Sunshine
  2023-07-21 18:33     ` Taylor Blau
  0 siblings, 1 reply; 22+ messages in thread
From: Eric Sunshine @ 2023-07-21 17:41 UTC (permalink / raw)
  To: Taylor Blau; +Cc: git, Derrick Stolee, Junio C Hamano

On Fri, Jul 21, 2023 at 1:31 PM Taylor Blau <me@ttaylorr.com> wrote:
> The `graph_read_expect()` function is used to ensure that the output of
> the "read-graph" test helper matches certain parameters (e.g., how many
> commits are in the graph, which chunks were written, etc.).
>
> It expects the Git repository being tested to be at the current working
> directory. However, a handful of t5318 tests use different repositories
> stored in sub-directories. To work around this, several tests in t5318
> change into the relevant repository outside of a sub-shell, altering the
> context for the rest of the suite.
>
> Prepare to remove these globally-scoped directory changes by teaching
> `graph_read_expect()` to take an optional "-C dir" to specify where the
> repository containing the commit-graph being tested is.
>
> Signed-off-by: Taylor Blau <me@ttaylorr.com>
> ---
> diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
> @@ -32,6 +32,13 @@ graph_git_behavior() {
>  graph_read_expect() {
> +       DIR="."
> +       if test "$1" = -C
> +       then
> +               shift
> +               DIR="$1"
> +               shift
> +       fi
> @@ -47,12 +54,15 @@ graph_read_expect() {
> -       cat >expect <<- EOF
> +       cat >$DIR/expect <<- EOF

It may not matter for any of the current callers, but we'd normally
want to quote the expansion of $DIR. Also, as I recall, some versions
of bash complain if the target of '>' is not quoted. So:

    cat >"$DIR/expect" <<-EOF

>         header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
>         num_commits: $1
>         chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL
>         options:$OPTIONS
>         EOF
> -       test-tool read-graph >output &&
> -       test_cmp expect output
> +       (
> +               cd "$DIR" &&
> +               test-tool read-graph >output &&
> +               test_cmp expect output
> +       )
>  }

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
  2023-07-21 17:30 ` [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()` Taylor Blau
@ 2023-07-21 18:01   ` Eric Sunshine
  2023-07-21 18:39     ` Taylor Blau
  0 siblings, 1 reply; 22+ messages in thread
From: Eric Sunshine @ 2023-07-21 18:01 UTC (permalink / raw)
  To: Taylor Blau; +Cc: git, Derrick Stolee, Junio C Hamano

On Fri, Jul 21, 2023 at 1:32 PM Taylor Blau <me@ttaylorr.com> wrote:
> The `graph_git_behavior()` helper asserts that a number of common Git
> operations (such as `git log --oneline`, `git log --topo-order`, etc.)
> produce identical output regardless of whether or not a commit-graph is
> in use.
>
> This helper takes as its second argument the location (relative to the
> `$TRASH_DIRECTORY`) of the Git repostiory under test. In order to run
> each of its commands within that repository, it first changes into that
> directory, without the use of a sub-shell.
>
> This pollutes future tests which expect to be run in the top-level
> `$TRASH_DIRECTORY` as usual. We could wrap `graph_git_behavior()` in a
> sub-shell, like:
>
>     graph_git_behavior() {
>       # ...
>       (
>         cd "$TRASH_DIRECTORY/$DIR" &&
>         graph_git_two_modesl
>       )
>     }
>
> , but since we're invoking git directly, we can pass along a "-C $DIR"
> when "$DIR" is non-empty.
>
> Note, however, that until the remaining callers are cleaned up to avoid
> changing working directories outside of a sub-shell, that we need to
> ensure that we are operating in the top-level $TRASH_DIRECTORY. The
> inner-subshell will go away in a future commit once it is no longer
> necessary.
>
> Signed-off-by: Taylor Blau <me@ttaylorr.com>
> ---
> diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
> @@ -20,12 +20,14 @@ graph_git_behavior() {
>         test_expect_success "check normal git operations: $MSG" '
> -               cd "$TRASH_DIRECTORY/$DIR" &&
> -               graph_git_two_modes "log --oneline $BRANCH" &&
> -               graph_git_two_modes "log --topo-order $BRANCH" &&
> -               graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
> -               graph_git_two_modes "branch -vv" &&
> -               graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
> +               (
> +                       cd "$TRASH_DIRECTORY" &&
> +                       graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
> +                       graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
> +                       graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
> +                       graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
> +                       graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
> +               )
>         '
>  }

As mentioned in my review of patch [1/5], for safety, you'd probably
want to quote the expansion of DIR in case it ever contains whitespace
(or other weird characters). The obvious POSIX-correct way to do this
would be:

    graph_git_two_modes "${DIR:+-C \"$DIR\"} log ..." &&

Unfortunately, however, some older broken shells incorrectly expand
this to a single argument ("-C <dir>") rather than the expected two
arguments (-C and "<dir>")[1,2,3,4]. The workaround is unsightly but
doable:

    graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} log ..." &&

[1]: https://lore.kernel.org/git/20160517215214.GA16905@sigill.intra.peff.net/
[2]: https://lore.kernel.org/git/e3bfc53363b14826d828e1adffbbeea@74d39fa044aa309eaea14b9f57fe79c/
[3]: https://lore.kernel.org/git/20160518010609.Horde.sM8QUFek6WMAAwho56DDob8@webmail.informatik.kit.edu/
[4]: https://lore.kernel.org/git/1240044459-57227-1-git-send-email-ben@ben.com/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 3/5] t5318: avoid top-level directory changes
  2023-07-21 17:30 ` [PATCH 3/5] t5318: avoid top-level directory changes Taylor Blau
@ 2023-07-21 18:28   ` Eric Sunshine
  0 siblings, 0 replies; 22+ messages in thread
From: Eric Sunshine @ 2023-07-21 18:28 UTC (permalink / raw)
  To: Taylor Blau; +Cc: git, Derrick Stolee, Junio C Hamano

On Fri, Jul 21, 2023 at 1:33 PM Taylor Blau <me@ttaylorr.com> wrote:
> Avoid changing the current working directory from outside of a sub-shell
> during the tests in t5318.
>
> Each test has mostly straightforward changes, either:
>
>   - Removing the top-level `cd "$TRASH_DIRECTORY/full"`, which is
>     unnecessary after ensuring that other tests don't change their
>     working directory outside of a sub-shell.
>
>   - Changing any Git invocations which want to be in a sub-directory by
>     either (a) adding a "-C $DIR" argument, or (b) moving the whole test
>     into a sub-shell.
>
> While we're here, remove any explicit "git config core.commitGraph true"
> invocations which were designed to enable use of the commit-graph. These
> are unnecessary following 31b1de6a09b (commit-graph: turn on
> commit-graph by default, 2019-08-13).
>
> Signed-off-by: Taylor Blau <me@ttaylorr.com>
> ---
> diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
> @@ -69,117 +64,106 @@ test_expect_success 'create commits and repack' '
>  test_expect_success 'Add more commits' '
>  ...
> -       git reset --hard commits/2 &&
> -       git merge commits/4 &&
> -       git branch merge/1 &&
> -       git reset --hard commits/4 &&
> -       git merge commits/6 &&
> -       git branch merge/2 &&
> -       git reset --hard commits/3 &&
> -       git merge commits/5 commits/7 &&
> -       git branch merge/3 &&
> -       git repack
> +       git -C full reset --hard commits/2 &&
> +       git -C full merge commits/4 &&
> +       git -C full branch merge/1 &&
> +       git -C full reset --hard commits/4 &&
> +       git -C full merge commits/6 &&
> +       git -C full branch merge/2 &&
> +       git -C full reset --hard commits/3 &&
> +       git -C full merge commits/5 commits/7 &&
> +       git -C full branch merge/3 &&
> +       git -C full repack
>  '

This is one of those cases in which "cd full" while in subshell,
rather than using "-C full" repeatedly, would perhaps make the code a
bit less noisy, but it is, of course, subjective and what you have
here is good enough.

> @@ -229,114 +211,101 @@ graph_git_behavior 'mixed mode, commit 8 vs merge 1' full commits/8 merge/1
>  test_expect_success 'build graph from latest pack with closure' '
> -       cd "$TRASH_DIRECTORY/full" &&
> -       cat new-idx | git commit-graph write --stdin-packs &&
> -       test_path_is_file $objdir/info/commit-graph &&
> -       graph_read_expect "9" "generation_data extra_edges"
> +       git -C full commit-graph write --stdin-packs <new-idx &&
> +       test_path_is_file full/$objdir/info/commit-graph &&
> +       graph_read_expect -C full 9 "generation_data extra_edges"
>  '

This works because an earlier test created "new-idx", and it created
it directly in the trash-directory rather than in the "full"
subdirectory where it used to reside before this patch. Okay.

> @@ -495,25 +464,24 @@ GRAPH_BYTE_OCTOPUS=$(($GRAPH_OCTOPUS_DATA_OFFSET + 4))
>  corrupt_graph_setup() {
> -       cd "$TRASH_DIRECTORY/full" &&
> -       test_when_finished mv commit-graph-backup $objdir/info/commit-graph &&
> -       cp $objdir/info/commit-graph commit-graph-backup &&
> -       chmod u+w $objdir/info/commit-graph
> +       test_when_finished mv commit-graph-backup full/$objdir/info/commit-graph &&
> +       cp full/$objdir/info/commit-graph commit-graph-backup &&
> +       chmod u+w full/$objdir/info/commit-graph
>  }

Prior to this patch, "commit-graph-backup" was placed in the "full"
subdirectory and test_when_finished() removed it from that location.
As of this patch, "commit-graph-backup" is placed in the top-level
trash-directory and cleaned up from there. Okay.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
  2023-07-21 17:41   ` Eric Sunshine
@ 2023-07-21 18:33     ` Taylor Blau
  2023-07-21 18:54       ` Junio C Hamano
  0 siblings, 1 reply; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 18:33 UTC (permalink / raw)
  To: Eric Sunshine; +Cc: git, Derrick Stolee, Junio C Hamano

On Fri, Jul 21, 2023 at 01:41:06PM -0400, Eric Sunshine wrote:
> > diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
> > @@ -32,6 +32,13 @@ graph_git_behavior() {
> >  graph_read_expect() {
> > +       DIR="."
> > +       if test "$1" = -C
> > +       then
> > +               shift
> > +               DIR="$1"
> > +               shift
> > +       fi
> > @@ -47,12 +54,15 @@ graph_read_expect() {
> > -       cat >expect <<- EOF
> > +       cat >$DIR/expect <<- EOF
>
> It may not matter for any of the current callers, but we'd normally
> want to quote the expansion of $DIR. Also, as I recall, some versions
> of bash complain if the target of '>' is not quoted. So:
>
>     cat >"$DIR/expect" <<-EOF

Hmm. I'm certainly happy to make this change, but there are many other
spots within our tests that would need similar updates. Looking through
the output of:

    $ git grep -E '>\$[[:alnum:]_]+/.*' -- t/**/*.sh

I see 25 such instances (including this one) that would need similar
treatment.

Thanks,
Taylor

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 0/5] commit-graph: test cleanup and modernization
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
                   ` (4 preceding siblings ...)
  2023-07-21 17:30 ` [PATCH 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()` Taylor Blau
@ 2023-07-21 18:34 ` Eric Sunshine
  2023-07-21 22:35 ` Junio C Hamano
  2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
  7 siblings, 0 replies; 22+ messages in thread
From: Eric Sunshine @ 2023-07-21 18:34 UTC (permalink / raw)
  To: Taylor Blau; +Cc: git, Derrick Stolee, Junio C Hamano

On Fri, Jul 21, 2023 at 1:31 PM Taylor Blau <me@ttaylorr.com> wrote:
> This short series addresses a few style nitpicks that I noticed while
> looking through the commit-graph tests while writing [1].
>
> Most importantly, it removes many instances in t5318 that change
> directories outside of a sub-shell, altering the current working
> directory of subsequent tests. This makes it difficult to run a subset
> of tests, or otherwise include `cd "$TRASH_DIRECTORY"` at the top of
> each test.
>
> The first two patches are predatory, the next two are the substantive
> test clean-ups, and the final patch cleans up some intermediate state
> necessary to perform the clean-up over multiple commits.

Nice to see this being cleaned up. I had tackled this script, as well,
back in November 2022 as part of an unsubmitted patch series which
removes _all_ unprotected `cd` commands from all test scripts. t5318
was one of several particularly egregious cases.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
  2023-07-21 18:01   ` Eric Sunshine
@ 2023-07-21 18:39     ` Taylor Blau
  2023-07-21 19:02       ` Junio C Hamano
  0 siblings, 1 reply; 22+ messages in thread
From: Taylor Blau @ 2023-07-21 18:39 UTC (permalink / raw)
  To: Eric Sunshine; +Cc: git, Derrick Stolee, Junio C Hamano

On Fri, Jul 21, 2023 at 02:01:58PM -0400, Eric Sunshine wrote:
> > diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
> > @@ -20,12 +20,14 @@ graph_git_behavior() {
> >         test_expect_success "check normal git operations: $MSG" '
> > -               cd "$TRASH_DIRECTORY/$DIR" &&
> > -               graph_git_two_modes "log --oneline $BRANCH" &&
> > -               graph_git_two_modes "log --topo-order $BRANCH" &&
> > -               graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
> > -               graph_git_two_modes "branch -vv" &&
> > -               graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
> > +               (
> > +                       cd "$TRASH_DIRECTORY" &&
> > +                       graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
> > +                       graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
> > +                       graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
> > +                       graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
> > +                       graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
> > +               )
> >         '
> >  }
>
> As mentioned in my review of patch [1/5], for safety, you'd probably
> want to quote the expansion of DIR in case it ever contains whitespace
> (or other weird characters). The obvious POSIX-correct way to do this
> would be:
>
>     graph_git_two_modes "${DIR:+-C \"$DIR\"} log ..." &&
>
> Unfortunately, however, some older broken shells incorrectly expand
> this to a single argument ("-C <dir>") rather than the expected two
> arguments (-C and "<dir>")[1,2,3,4]. The workaround is unsightly but
> doable:
>
>     graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} log ..." &&

Hmm. I get what you're saying, but I think in this case we're OK, since
this all goes to `graph_git_two_modes`, whose implementation looks like:

    graph_git_two_modes() {
        git -c core.commitGraph=true $1 >output
    }

So I think we really do want everything smashed together into a single
argument.

(Just to sure, here's the diff of what I applied on top of [2/5] before
replying to your message):

--- 8< ---
diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
index c93969ae74..d60e64cb0b 100755
--- a/t/lib-commit-graph.sh
+++ b/t/lib-commit-graph.sh
@@ -22,11 +22,11 @@ graph_git_behavior() {
 	test_expect_success "check normal git operations: $MSG" '
 		(
 			cd "$TRASH_DIRECTORY" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
-			graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
+			graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} log --oneline $BRANCH" &&
+			graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} log --topo-order $BRANCH" &&
+			graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} log --graph $COMPARE..$BRANCH" &&
+			graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} branch -vv" &&
+			graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} merge-base -a $BRANCH $COMPARE"
 		)
 	'
 }
--- >8 ---

> [1]: https://lore.kernel.org/git/20160517215214.GA16905@sigill.intra.peff.net/
> [2]: https://lore.kernel.org/git/e3bfc53363b14826d828e1adffbbeea@74d39fa044aa309eaea14b9f57fe79c/
> [3]: https://lore.kernel.org/git/20160518010609.Horde.sM8QUFek6WMAAwho56DDob8@webmail.informatik.kit.edu/
> [4]: https://lore.kernel.org/git/1240044459-57227-1-git-send-email-ben@ben.com/

Thanks,
Taylor

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
  2023-07-21 18:33     ` Taylor Blau
@ 2023-07-21 18:54       ` Junio C Hamano
  0 siblings, 0 replies; 22+ messages in thread
From: Junio C Hamano @ 2023-07-21 18:54 UTC (permalink / raw)
  To: Taylor Blau; +Cc: Eric Sunshine, git, Derrick Stolee

Taylor Blau <me@ttaylorr.com> writes:

> On Fri, Jul 21, 2023 at 01:41:06PM -0400, Eric Sunshine wrote:
>> > diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
>> > @@ -32,6 +32,13 @@ graph_git_behavior() {
>> >  graph_read_expect() {
>> > +       DIR="."
>> > +       if test "$1" = -C
>> > +       then
>> > +               shift
>> > +               DIR="$1"
>> > +               shift
>> > +       fi
>> > @@ -47,12 +54,15 @@ graph_read_expect() {
>> > -       cat >expect <<- EOF
>> > +       cat >$DIR/expect <<- EOF
>>
>> It may not matter for any of the current callers, but we'd normally
>> want to quote the expansion of $DIR. Also, as I recall, some versions
>> of bash complain if the target of '>' is not quoted. So:
>>
>>     cat >"$DIR/expect" <<-EOF

Correct.  

Documentation/CodingGuidelines spells out this shell redirection
rule and it applies not just to tests but our scripted porcelains
(if any remains, that is).

> Hmm. I'm certainly happy to make this change, but there are many other
> spots within our tests that would need similar updates. Looking through
> the output of:
>
>     $ git grep -E '>\$[[:alnum:]_]+/.*' -- t/**/*.sh
>
> I see 25 such instances (including this one) that would need similar
> treatment.

Let's not make things worse.

Thanks.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
  2023-07-21 18:39     ` Taylor Blau
@ 2023-07-21 19:02       ` Junio C Hamano
  0 siblings, 0 replies; 22+ messages in thread
From: Junio C Hamano @ 2023-07-21 19:02 UTC (permalink / raw)
  To: Taylor Blau; +Cc: Eric Sunshine, git, Derrick Stolee

Taylor Blau <me@ttaylorr.com> writes:

>>     graph_git_two_modes "${DIR:+-C \"$DIR\"} log ..." &&
>>
>> Unfortunately, however, some older broken shells incorrectly expand
>> this to a single argument ("-C <dir>") rather than the expected two
>> arguments (-C and "<dir>")[1,2,3,4]. The workaround is unsightly but
>> doable:
>>
>>     graph_git_two_modes "${DIR:+-C} ${DIR:+\"$DIR\"} log ..." &&
>
> Hmm. I get what you're saying, but I think in this case we're OK, since
> this all goes to `graph_git_two_modes`, whose implementation looks like:
>
>     graph_git_two_modes() {
>         git -c core.commitGraph=true $1 >output
>     }
>
> So I think we really do want everything smashed together into a single
> argument.

This is not a scripted Porcelain that must cope with any funnies the
end users may throw at us, after all.

How about adding a new prominent note at the beginning of
graph_git_behavior helper to declare that it is a bug if DIR
contains any characters (e.g. $IFS) that may make the shell
misbehave, and then stop worrying about quoting of this one?

That would keep the end result slightly more readable ;-)

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 0/5] commit-graph: test cleanup and modernization
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
                   ` (5 preceding siblings ...)
  2023-07-21 18:34 ` [PATCH 0/5] commit-graph: test cleanup and modernization Eric Sunshine
@ 2023-07-21 22:35 ` Junio C Hamano
  2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
  7 siblings, 0 replies; 22+ messages in thread
From: Junio C Hamano @ 2023-07-21 22:35 UTC (permalink / raw)
  To: Taylor Blau; +Cc: git, Derrick Stolee

Taylor Blau <me@ttaylorr.com> writes:

> Most importantly, it removes many instances in t5318 that change
> directories outside of a sub-shell, altering the current working
> directory of subsequent tests. This makes it difficult to run a subset
> of tests, or otherwise include `cd "$TRASH_DIRECTORY"` at the top of
> each test.

Thanks for tackling this aspect of this test script.  It does look
problematic and unnecessarily makes it harder to debug the test
itself.


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v2 0/5] commit-graph: test cleanup and modernization
  2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
                   ` (6 preceding siblings ...)
  2023-07-21 22:35 ` Junio C Hamano
@ 2023-07-24 16:39 ` Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
                     ` (4 more replies)
  7 siblings, 5 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-24 16:39 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano, Eric Sunshine

Here is a reroll of my series to address a few style nitpicks in the
commit-graph tests.

Much is the same from the previous round, except for:

  - quotes >"$DIR/expect" to ensure that we work on all shells>
  - adds a NOTE above graph_git_behavior to indicate that its second
    argument cannot contain any character in $IFS.
  - rebased on top of the current tip of 'master'.

As usual, a range-diff is available below. Thanks in advance for your
review!

Taylor Blau (5):
  t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
  t/lib-commit-graph.sh: avoid directory change in
    `graph_git_behavior()`
  t5318: avoid top-level directory changes
  t5328: avoid top-level directory changes
  t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`

 t/lib-commit-graph.sh              |  34 ++-
 t/t5318-commit-graph.sh            | 378 +++++++++++++----------------
 t/t5328-commit-graph-64bit-time.sh |  54 ++---
 3 files changed, 224 insertions(+), 242 deletions(-)

Range-diff against v1:
1:  08482212630 ! 1:  c81a059c181 t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
    @@ t/lib-commit-graph.sh: graph_read_expect() {
      		OPTIONS=" read_generation_data"
      	fi
     -	cat >expect <<- EOF
    -+	cat >$DIR/expect <<- EOF
    ++	cat >"$DIR/expect" <<-EOF
      	header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
      	num_commits: $1
      	chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL
2:  715a160903b ! 2:  115df6fe226 t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
    @@ Commit message
         Signed-off-by: Taylor Blau <me@ttaylorr.com>
     
      ## t/lib-commit-graph.sh ##
    -@@ t/lib-commit-graph.sh: graph_git_behavior() {
    +@@ t/lib-commit-graph.sh: graph_git_two_modes() {
    + 	test_cmp expect output
    + }
    + 
    ++# graph_git_behavior <name> <directory> <branch> <compare>
    ++#
    ++# Ensures that a handful of traversal operations produce the same
    ++# results with and without the commit-graph in use.
    ++#
    ++# NOTE: it is a bug to call this function with <directory> containing
    ++# any characters in $IFS.
    + graph_git_behavior() {
    + 	MSG=$1
    + 	DIR=$2
      	BRANCH=$3
      	COMPARE=$4
      	test_expect_success "check normal git operations: $MSG" '
3:  451ec003be8 = 3:  12ce967bafe t5318: avoid top-level directory changes
4:  ba550987055 = 4:  79b3444660f t5328: avoid top-level directory changes
5:  c3432f27b94 = 5:  887006eab46 t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
-- 
2.41.0.399.g887006eab46

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v2 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
  2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
@ 2023-07-24 16:39   ` Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()` Taylor Blau
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-24 16:39 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano, Eric Sunshine

The `graph_read_expect()` function is used to ensure that the output of
the "read-graph" test helper matches certain parameters (e.g., how many
commits are in the graph, which chunks were written, etc.).

It expects the Git repository being tested to be at the current working
directory. However, a handful of t5318 tests use different repositories
stored in sub-directories. To work around this, several tests in t5318
change into the relevant repository outside of a sub-shell, altering the
context for the rest of the suite.

Prepare to remove these globally-scoped directory changes by teaching
`graph_read_expect()` to take an optional "-C dir" to specify where the
repository containing the commit-graph being tested is.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/lib-commit-graph.sh | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
index 5d79e1a4e96..4d3e7f0623e 100755
--- a/t/lib-commit-graph.sh
+++ b/t/lib-commit-graph.sh
@@ -32,6 +32,13 @@ graph_git_behavior() {
 graph_read_expect() {
 	OPTIONAL=""
 	NUM_CHUNKS=3
+	DIR="."
+	if test "$1" = -C
+	then
+		shift
+		DIR="$1"
+		shift
+	fi
 	if test -n "$2"
 	then
 		OPTIONAL=" $2"
@@ -47,12 +54,15 @@ graph_read_expect() {
 	then
 		OPTIONS=" read_generation_data"
 	fi
-	cat >expect <<- EOF
+	cat >"$DIR/expect" <<-EOF
 	header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
 	num_commits: $1
 	chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL
 	options:$OPTIONS
 	EOF
-	test-tool read-graph >output &&
-	test_cmp expect output
+	(
+		cd "$DIR" &&
+		test-tool read-graph >output &&
+		test_cmp expect output
+	)
 }
-- 
2.41.0.399.g887006eab46


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
  2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
@ 2023-07-24 16:39   ` Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 3/5] t5318: avoid top-level directory changes Taylor Blau
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-24 16:39 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano, Eric Sunshine

The `graph_git_behavior()` helper asserts that a number of common Git
operations (such as `git log --oneline`, `git log --topo-order`, etc.)
produce identical output regardless of whether or not a commit-graph is
in use.

This helper takes as its second argument the location (relative to the
`$TRASH_DIRECTORY`) of the Git repostiory under test. In order to run
each of its commands within that repository, it first changes into that
directory, without the use of a sub-shell.

This pollutes future tests which expect to be run in the top-level
`$TRASH_DIRECTORY` as usual. We could wrap `graph_git_behavior()` in a
sub-shell, like:

    graph_git_behavior() {
      # ...
      (
        cd "$TRASH_DIRECTORY/$DIR" &&
        graph_git_two_modesl
      )
    }

, but since we're invoking git directly, we can pass along a "-C $DIR"
when "$DIR" is non-empty.

Note, however, that until the remaining callers are cleaned up to avoid
changing working directories outside of a sub-shell, that we need to
ensure that we are operating in the top-level $TRASH_DIRECTORY. The
inner-subshell will go away in a future commit once it is no longer
necessary.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/lib-commit-graph.sh | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
index 4d3e7f0623e..c8bd76a7777 100755
--- a/t/lib-commit-graph.sh
+++ b/t/lib-commit-graph.sh
@@ -14,18 +14,27 @@ graph_git_two_modes() {
 	test_cmp expect output
 }
 
+# graph_git_behavior <name> <directory> <branch> <compare>
+#
+# Ensures that a handful of traversal operations produce the same
+# results with and without the commit-graph in use.
+#
+# NOTE: it is a bug to call this function with <directory> containing
+# any characters in $IFS.
 graph_git_behavior() {
 	MSG=$1
 	DIR=$2
 	BRANCH=$3
 	COMPARE=$4
 	test_expect_success "check normal git operations: $MSG" '
-		cd "$TRASH_DIRECTORY/$DIR" &&
-		graph_git_two_modes "log --oneline $BRANCH" &&
-		graph_git_two_modes "log --topo-order $BRANCH" &&
-		graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
-		graph_git_two_modes "branch -vv" &&
-		graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
+		(
+			cd "$TRASH_DIRECTORY" &&
+			graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
+			graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
+			graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
+			graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
+			graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
+		)
 	'
 }
 
-- 
2.41.0.399.g887006eab46


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 3/5] t5318: avoid top-level directory changes
  2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()` Taylor Blau
@ 2023-07-24 16:39   ` Taylor Blau
  2023-07-24 21:48     ` Junio C Hamano
  2023-07-24 16:39   ` [PATCH v2 4/5] t5328: " Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()` Taylor Blau
  4 siblings, 1 reply; 22+ messages in thread
From: Taylor Blau @ 2023-07-24 16:39 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano, Eric Sunshine

Avoid changing the current working directory from outside of a sub-shell
during the tests in t5318.

Each test has mostly straightforward changes, either:

  - Removing the top-level `cd "$TRASH_DIRECTORY/full"`, which is
    unnecessary after ensuring that other tests don't change their
    working directory outside of a sub-shell.

  - Changing any Git invocations which want to be in a sub-directory by
    either (a) adding a "-C $DIR" argument, or (b) moving the whole test
    into a sub-shell.

While we're here, remove any explicit "git config core.commitGraph true"
invocations which were designed to enable use of the commit-graph. These
are unnecessary following 31b1de6a09b (commit-graph: turn on
commit-graph by default, 2019-08-13).

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/t5318-commit-graph.sh | 378 ++++++++++++++++++----------------------
 1 file changed, 172 insertions(+), 206 deletions(-)

diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
index bf8a92317b3..4df76173a8d 100755
--- a/t/t5318-commit-graph.sh
+++ b/t/t5318-commit-graph.sh
@@ -24,12 +24,10 @@ test_expect_success 'usage shown with an error on unknown sub-command' '
 	test_cmp expect actual
 '
 
+objdir=".git/objects"
+
 test_expect_success 'setup full repo' '
-	mkdir full &&
-	cd "$TRASH_DIRECTORY/full" &&
-	git init &&
-	git config core.commitGraph true &&
-	objdir=".git/objects"
+	git init full
 '
 
 test_expect_success POSIXPERM 'tweak umask for modebit tests' '
@@ -37,31 +35,28 @@ test_expect_success POSIXPERM 'tweak umask for modebit tests' '
 '
 
 test_expect_success 'verify graph with no graph file' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph verify
+	git -C full commit-graph verify
 '
 
 test_expect_success 'write graph with no packs' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write --object-dir $objdir &&
-	test_path_is_missing $objdir/info/commit-graph
+	git -C full commit-graph write --object-dir $objdir &&
+	test_path_is_missing full/$objdir/info/commit-graph
 '
 
 test_expect_success 'exit with correct error on bad input to --stdin-packs' '
-	cd "$TRASH_DIRECTORY/full" &&
 	echo doesnotexist >in &&
-	test_expect_code 1 git commit-graph write --stdin-packs <in 2>stderr &&
+	test_expect_code 1 git -C full commit-graph write --stdin-packs \
+		<in 2>stderr &&
 	test_i18ngrep "error adding pack" stderr
 '
 
 test_expect_success 'create commits and repack' '
-	cd "$TRASH_DIRECTORY/full" &&
 	for i in $(test_seq 3)
 	do
-		test_commit $i &&
-		git branch commits/$i || return 1
+		test_commit -C full $i &&
+		git -C full branch commits/$i || return 1
 	done &&
-	git repack
+	git -C full repack
 '
 
 . "$TEST_DIRECTORY"/lib-commit-graph.sh
@@ -69,117 +64,106 @@ test_expect_success 'create commits and repack' '
 graph_git_behavior 'no graph' full commits/3 commits/1
 
 test_expect_success 'exit with correct error on bad input to --stdin-commits' '
-	cd "$TRASH_DIRECTORY/full" &&
 	# invalid, non-hex OID
-	echo HEAD >in &&
-	test_expect_code 1 git commit-graph write --stdin-commits <in 2>stderr &&
+	echo HEAD | test_expect_code 1 git -C full commit-graph write \
+		--stdin-commits 2>stderr &&
 	test_i18ngrep "unexpected non-hex object ID: HEAD" stderr &&
 	# non-existent OID
-	echo $ZERO_OID >in &&
-	test_expect_code 1 git commit-graph write --stdin-commits <in 2>stderr &&
+	echo $ZERO_OID | test_expect_code 1 git -C full commit-graph write \
+		--stdin-commits 2>stderr &&
 	test_i18ngrep "invalid object" stderr &&
 	# valid commit and tree OID
-	git rev-parse HEAD HEAD^{tree} >in &&
-	git commit-graph write --stdin-commits <in &&
-	graph_read_expect 3 generation_data
+	git -C full rev-parse HEAD HEAD^{tree} >in &&
+	git -C full commit-graph write --stdin-commits <in &&
+	graph_read_expect -C full 3 generation_data
 '
 
 test_expect_success 'write graph' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "3" generation_data
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 3 generation_data
 '
 
 test_expect_success POSIXPERM 'write graph has correct permissions' '
-	test_path_is_file $objdir/info/commit-graph &&
+	test_path_is_file full/$objdir/info/commit-graph &&
 	echo "-r--r--r--" >expect &&
-	test_modebits $objdir/info/commit-graph >actual &&
+	test_modebits full/$objdir/info/commit-graph >actual &&
 	test_cmp expect actual
 '
 
 graph_git_behavior 'graph exists' full commits/3 commits/1
 
 test_expect_success 'Add more commits' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git reset --hard commits/1 &&
+	git -C full reset --hard commits/1 &&
 	for i in $(test_seq 4 5)
 	do
-		test_commit $i &&
-		git branch commits/$i || return 1
+		test_commit -C full $i &&
+		git -C full branch commits/$i || return 1
 	done &&
-	git reset --hard commits/2 &&
+	git -C full reset --hard commits/2 &&
 	for i in $(test_seq 6 7)
 	do
-		test_commit $i &&
-		git branch commits/$i || return 1
+		test_commit -C full $i &&
+		git -C full branch commits/$i || return 1
 	done &&
-	git reset --hard commits/2 &&
-	git merge commits/4 &&
-	git branch merge/1 &&
-	git reset --hard commits/4 &&
-	git merge commits/6 &&
-	git branch merge/2 &&
-	git reset --hard commits/3 &&
-	git merge commits/5 commits/7 &&
-	git branch merge/3 &&
-	git repack
+	git -C full reset --hard commits/2 &&
+	git -C full merge commits/4 &&
+	git -C full branch merge/1 &&
+	git -C full reset --hard commits/4 &&
+	git -C full merge commits/6 &&
+	git -C full branch merge/2 &&
+	git -C full reset --hard commits/3 &&
+	git -C full merge commits/5 commits/7 &&
+	git -C full branch merge/3 &&
+	git -C full repack
 '
 
 test_expect_success 'commit-graph write progress off for redirected stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write 2>err &&
+	git -C full commit-graph write 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph write force progress on for stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	GIT_PROGRESS_DELAY=0 git commit-graph write --progress 2>err &&
+	GIT_PROGRESS_DELAY=0 git -C full commit-graph write --progress 2>err &&
 	test_file_not_empty err
 '
 
 test_expect_success 'commit-graph write with the --no-progress option' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write --no-progress 2>err &&
+	git -C full commit-graph write --no-progress 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph write --stdin-commits progress off for redirected stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/5 >in &&
-	git commit-graph write --stdin-commits <in 2>err &&
+	git -C full rev-parse commits/5 >in &&
+	git -C full commit-graph write --stdin-commits <in 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph write --stdin-commits force progress on for stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/5 >in &&
-	GIT_PROGRESS_DELAY=0 git commit-graph write --stdin-commits --progress <in 2>err &&
+	git -C full rev-parse commits/5 >in &&
+	GIT_PROGRESS_DELAY=0 git -C full commit-graph write --stdin-commits \
+		--progress <in 2>err &&
 	test_i18ngrep "Collecting commits from input" err
 '
 
 test_expect_success 'commit-graph write --stdin-commits with the --no-progress option' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/5 >in &&
-	git commit-graph write --stdin-commits --no-progress <in 2>err &&
+	git -C full rev-parse commits/5 >in &&
+	git -C full commit-graph write --stdin-commits --no-progress <in 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph verify progress off for redirected stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph verify 2>err &&
+	git -C full commit-graph verify 2>err &&
 	test_must_be_empty err
 '
 
 test_expect_success 'commit-graph verify force progress on for stderr' '
-	cd "$TRASH_DIRECTORY/full" &&
-	GIT_PROGRESS_DELAY=0 git commit-graph verify --progress 2>err &&
+	GIT_PROGRESS_DELAY=0 git -C full commit-graph verify --progress 2>err &&
 	test_file_not_empty err
 '
 
 test_expect_success 'commit-graph verify with the --no-progress option' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph verify --no-progress 2>err &&
+	git -C full commit-graph verify --no-progress 2>err &&
 	test_must_be_empty err
 '
 
@@ -194,10 +178,9 @@ test_expect_success 'commit-graph verify with the --no-progress option' '
 # 1
 
 test_expect_success 'write graph with merges' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "10" "generation_data extra_edges"
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 10 "generation_data extra_edges"
 '
 
 graph_git_behavior 'merge 1 vs 2' full merge/1 merge/2
@@ -205,12 +188,11 @@ graph_git_behavior 'merge 1 vs 3' full merge/1 merge/3
 graph_git_behavior 'merge 2 vs 3' full merge/2 merge/3
 
 test_expect_success 'Add one more commit' '
-	cd "$TRASH_DIRECTORY/full" &&
-	test_commit 8 &&
-	git branch commits/8 &&
-	ls $objdir/pack | grep idx >existing-idx &&
-	git repack &&
-	ls $objdir/pack| grep idx | grep -v -f existing-idx >new-idx
+	test_commit -C full 8 &&
+	git -C full branch commits/8 &&
+	ls full/$objdir/pack | grep idx >existing-idx &&
+	git -C full repack &&
+	ls full/$objdir/pack| grep idx | grep -v -f existing-idx >new-idx
 '
 
 # Current graph structure:
@@ -229,114 +211,101 @@ graph_git_behavior 'mixed mode, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'mixed mode, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'write graph with new commit' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'full graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'full graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'write graph with nothing new' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C full commit-graph write &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'cleared graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'cleared graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph from latest pack with closure' '
-	cd "$TRASH_DIRECTORY/full" &&
-	cat new-idx | git commit-graph write --stdin-packs &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "9" "generation_data extra_edges"
+	git -C full commit-graph write --stdin-packs <new-idx &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 9 "generation_data extra_edges"
 '
 
 graph_git_behavior 'graph from pack, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'graph from pack, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph from commits with closure' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git tag -a -m "merge" tag/merge merge/2 &&
-	git rev-parse tag/merge >commits-in &&
-	git rev-parse merge/1 >>commits-in &&
-	cat commits-in | git commit-graph write --stdin-commits &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "6" "generation_data"
+	git -C full tag -a -m "merge" tag/merge merge/2 &&
+	git -C full rev-parse tag/merge >commits-in &&
+	git -C full rev-parse merge/1 >>commits-in &&
+	git -C full commit-graph write --stdin-commits <commits-in &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 6 "generation_data"
 '
 
 graph_git_behavior 'graph from commits, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'graph from commits, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph from commits with append' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse merge/3 | git commit-graph write --stdin-commits --append &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "10" "generation_data extra_edges"
+	git -C full rev-parse merge/3 >in &&
+	git -C full commit-graph write --stdin-commits --append <in &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 10 "generation_data extra_edges"
 '
 
 graph_git_behavior 'append graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'append graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'build graph using --reachable' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit-graph write --reachable &&
-	test_path_is_file $objdir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C full commit-graph write --reachable &&
+	test_path_is_file full/$objdir/info/commit-graph &&
+	graph_read_expect -C full 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'append graph, commit 8 vs merge 1' full commits/8 merge/1
 graph_git_behavior 'append graph, commit 8 vs merge 2' full commits/8 merge/2
 
 test_expect_success 'setup bare repo' '
-	cd "$TRASH_DIRECTORY" &&
-	git clone --bare --no-local full bare &&
-	cd bare &&
-	git config core.commitGraph true &&
-	baredir="./objects"
+	git clone --bare --no-local full bare
 '
 
 graph_git_behavior 'bare repo, commit 8 vs merge 1' bare commits/8 merge/1
 graph_git_behavior 'bare repo, commit 8 vs merge 2' bare commits/8 merge/2
 
 test_expect_success 'write graph in bare repo' '
-	cd "$TRASH_DIRECTORY/bare" &&
-	git commit-graph write &&
-	test_path_is_file $baredir/info/commit-graph &&
-	graph_read_expect "11" "generation_data extra_edges"
+	git -C bare commit-graph write &&
+	test_path_is_file bare/objects/info/commit-graph &&
+	graph_read_expect -C bare 11 "generation_data extra_edges"
 '
 
 graph_git_behavior 'bare repo with graph, commit 8 vs merge 1' bare commits/8 merge/1
 graph_git_behavior 'bare repo with graph, commit 8 vs merge 2' bare commits/8 merge/2
 
 test_expect_success 'perform fast-forward merge in full repo' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git checkout -b merge-5-to-8 commits/5 &&
-	git merge commits/8 &&
-	git show-ref -s merge-5-to-8 >output &&
-	git show-ref -s commits/8 >expect &&
+	git -C full checkout -b merge-5-to-8 commits/5 &&
+	git -C full merge commits/8 &&
+	git -C full show-ref -s merge-5-to-8 >output &&
+	git -C full show-ref -s commits/8 >expect &&
 	test_cmp expect output
 '
 
 test_expect_success 'check that gc computes commit-graph' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git commit --allow-empty -m "blank" &&
-	git commit-graph write --reachable &&
-	cp $objdir/info/commit-graph commit-graph-before-gc &&
-	git reset --hard HEAD~1 &&
-	git config gc.writeCommitGraph true &&
-	git gc &&
-	cp $objdir/info/commit-graph commit-graph-after-gc &&
+	test_commit -C full --no-tag blank &&
+	git -C full commit-graph write --reachable &&
+	cp full/$objdir/info/commit-graph commit-graph-before-gc &&
+	git -C full reset --hard HEAD~1 &&
+	test_config -C full gc.writeCommitGraph true &&
+	git -C full gc &&
+	cp full/$objdir/info/commit-graph commit-graph-after-gc &&
 	! test_cmp_bin commit-graph-before-gc commit-graph-after-gc &&
-	git commit-graph write --reachable &&
-	test_cmp_bin commit-graph-after-gc $objdir/info/commit-graph
+	git -C full commit-graph write --reachable &&
+	test_cmp_bin commit-graph-after-gc full/$objdir/info/commit-graph
 '
 
 test_expect_success 'replace-objects invalidates commit-graph' '
-	cd "$TRASH_DIRECTORY" &&
 	test_when_finished rm -rf replace &&
 	git clone full replace &&
 	(
@@ -359,7 +328,6 @@ test_expect_success 'replace-objects invalidates commit-graph' '
 '
 
 test_expect_success 'commit grafts invalidate commit-graph' '
-	cd "$TRASH_DIRECTORY" &&
 	test_when_finished rm -rf graft &&
 	git clone --template= full graft &&
 	(
@@ -384,7 +352,6 @@ test_expect_success 'commit grafts invalidate commit-graph' '
 '
 
 test_expect_success 'replace-objects invalidates commit-graph' '
-	cd "$TRASH_DIRECTORY" &&
 	test_when_finished rm -rf shallow &&
 	git clone --depth 2 "file://$TRASH_DIRECTORY/full" shallow &&
 	(
@@ -427,24 +394,25 @@ test_expect_success 'warn on improper hash version' '
 '
 
 test_expect_success TIME_IS_64BIT,TIME_T_IS_64BIT 'lower layers have overflow chunk' '
-	cd "$TRASH_DIRECTORY/full" &&
 	UNIX_EPOCH_ZERO="@0 +0000" &&
 	FUTURE_DATE="@4147483646 +0000" &&
-	rm -f .git/objects/info/commit-graph &&
-	test_commit --date "$FUTURE_DATE" future-1 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" old-1 &&
-	git commit-graph write --reachable &&
-	test_commit --date "$FUTURE_DATE" future-2 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" old-2 &&
-	git commit-graph write --reachable --split=no-merge &&
-	test_commit extra &&
-	git commit-graph write --reachable --split=no-merge &&
-	git commit-graph write --reachable &&
-	graph_read_expect 16 "generation_data generation_data_overflow extra_edges" &&
-	mv .git/objects/info/commit-graph commit-graph-upgraded &&
-	git commit-graph write --reachable &&
-	graph_read_expect 16 "generation_data generation_data_overflow extra_edges" &&
-	test_cmp .git/objects/info/commit-graph commit-graph-upgraded
+	rm -f full/.git/objects/info/commit-graph &&
+	test_commit -C full --date "$FUTURE_DATE" future-1 &&
+	test_commit -C full --date "$UNIX_EPOCH_ZERO" old-1 &&
+	git -C full commit-graph write --reachable &&
+	test_commit -C full --date "$FUTURE_DATE" future-2 &&
+	test_commit -C full --date "$UNIX_EPOCH_ZERO" old-2 &&
+	git -C full commit-graph write --reachable --split=no-merge &&
+	test_commit -C full extra &&
+	git -C full commit-graph write --reachable --split=no-merge &&
+	git -C full commit-graph write --reachable &&
+	graph_read_expect -C full 16 \
+		"generation_data generation_data_overflow extra_edges" &&
+	mv full/.git/objects/info/commit-graph commit-graph-upgraded &&
+	git -C full commit-graph write --reachable &&
+	graph_read_expect -C full 16 \
+		"generation_data generation_data_overflow extra_edges" &&
+	test_cmp full/.git/objects/info/commit-graph commit-graph-upgraded
 '
 
 # the verify tests below expect the commit-graph to contain
@@ -454,10 +422,11 @@ test_expect_success TIME_IS_64BIT,TIME_T_IS_64BIT 'lower layers have overflow ch
 # and the tests will likely break.
 
 test_expect_success 'git commit-graph verify' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/8 | git -c commitGraph.generationVersion=1 commit-graph write --stdin-commits &&
-	git commit-graph verify >output &&
-	graph_read_expect 9 extra_edges 1
+	git -C full rev-parse commits/8 >in &&
+	git -C full -c commitGraph.generationVersion=1 commit-graph write \
+		--stdin-commits <in &&
+	git -C full commit-graph verify >output &&
+	graph_read_expect -C full 9 extra_edges 1
 '
 
 NUM_COMMITS=9
@@ -495,25 +464,24 @@ GRAPH_BYTE_OCTOPUS=$(($GRAPH_OCTOPUS_DATA_OFFSET + 4))
 GRAPH_BYTE_FOOTER=$(($GRAPH_OCTOPUS_DATA_OFFSET + 4 * $NUM_OCTOPUS_EDGES))
 
 corrupt_graph_setup() {
-	cd "$TRASH_DIRECTORY/full" &&
-	test_when_finished mv commit-graph-backup $objdir/info/commit-graph &&
-	cp $objdir/info/commit-graph commit-graph-backup &&
-	chmod u+w $objdir/info/commit-graph
+	test_when_finished mv commit-graph-backup full/$objdir/info/commit-graph &&
+	cp full/$objdir/info/commit-graph commit-graph-backup &&
+	chmod u+w full/$objdir/info/commit-graph
 }
 
 corrupt_graph_verify() {
 	grepstr=$1
-	test_must_fail git commit-graph verify 2>test_err &&
+	test_must_fail git -C full commit-graph verify 2>test_err &&
 	grep -v "^+" test_err >err &&
 	test_i18ngrep "$grepstr" err &&
 	if test "$2" != "no-copy"
 	then
-		cp $objdir/info/commit-graph commit-graph-pre-write-test
+		cp full/$objdir/info/commit-graph commit-graph-pre-write-test
 	fi &&
-	git status --short &&
-	GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE=true git commit-graph write &&
-	chmod u+w $objdir/info/commit-graph &&
-	git commit-graph verify
+	git -C full status --short &&
+	GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE=true git -C full commit-graph write &&
+	chmod u+w full/$objdir/info/commit-graph &&
+	git -C full commit-graph verify
 }
 
 # usage: corrupt_graph_and_verify <position> <data> <string> [<zero_pos>]
@@ -527,24 +495,24 @@ corrupt_graph_and_verify() {
 	data="${2:-\0}"
 	grepstr=$3
 	corrupt_graph_setup &&
-	orig_size=$(wc -c < $objdir/info/commit-graph) &&
+	orig_size=$(wc -c <full/$objdir/info/commit-graph) &&
 	zero_pos=${4:-${orig_size}} &&
-	printf "$data" | dd of="$objdir/info/commit-graph" bs=1 seek="$pos" conv=notrunc &&
-	dd of="$objdir/info/commit-graph" bs=1 seek="$zero_pos" if=/dev/null &&
-	test-tool genzeros $(($orig_size - $zero_pos)) >>"$objdir/info/commit-graph" &&
+	printf "$data" | dd of="full/$objdir/info/commit-graph" bs=1 seek="$pos" conv=notrunc &&
+	dd of="full/$objdir/info/commit-graph" bs=1 seek="$zero_pos" if=/dev/null &&
+	test-tool genzeros $(($orig_size - $zero_pos)) >>"full/$objdir/info/commit-graph" &&
 	corrupt_graph_verify "$grepstr"
 
 }
 
 test_expect_success POSIXPERM,SANITY 'detect permission problem' '
 	corrupt_graph_setup &&
-	chmod 000 $objdir/info/commit-graph &&
+	chmod 000 full/$objdir/info/commit-graph &&
 	corrupt_graph_verify "Could not open" "no-copy"
 '
 
 test_expect_success 'detect too small' '
 	corrupt_graph_setup &&
-	echo "a small graph" >$objdir/info/commit-graph &&
+	echo "a small graph" >full/$objdir/info/commit-graph &&
 	corrupt_graph_verify "too small"
 '
 
@@ -655,33 +623,30 @@ test_expect_success 'detect incorrect chunk count' '
 '
 
 test_expect_success 'git fsck (checks commit-graph when config set to true)' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git fsck &&
+	git -C full fsck &&
 	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
 		"incorrect checksum" &&
-	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
-	test_must_fail git -c core.commitGraph=true fsck
+	cp commit-graph-pre-write-test full/$objdir/info/commit-graph &&
+	test_must_fail git -C full -c core.commitGraph=true fsck
 '
 
 test_expect_success 'git fsck (ignores commit-graph when config set to false)' '
-	cd "$TRASH_DIRECTORY/full" &&
-	git fsck &&
+	git -C full fsck &&
 	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
 		"incorrect checksum" &&
-	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
-	git -c core.commitGraph=false fsck
+	cp commit-graph-pre-write-test full/$objdir/info/commit-graph &&
+	git -C full -c core.commitGraph=false fsck
 '
 
 test_expect_success 'git fsck (checks commit-graph when config unset)' '
-	cd "$TRASH_DIRECTORY/full" &&
-	test_when_finished "git config core.commitGraph true" &&
+	test_when_finished "git -C full config core.commitGraph true" &&
 
-	git fsck &&
+	git -C full fsck &&
 	corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
 		"incorrect checksum" &&
-	test_unconfig core.commitGraph &&
-	cp commit-graph-pre-write-test $objdir/info/commit-graph &&
-	test_must_fail git fsck
+	test_unconfig -C full core.commitGraph &&
+	cp commit-graph-pre-write-test full/$objdir/info/commit-graph &&
+	test_must_fail git -C full fsck
 '
 
 test_expect_success 'git fsck shows commit-graph output with --progress' '
@@ -792,32 +757,33 @@ test_expect_success 'corrupt commit-graph write (missing tree)' '
 #
 
 test_expect_success 'set up and verify repo with generation data overflow chunk' '
-	objdir=".git/objects" &&
 	UNIX_EPOCH_ZERO="@0 +0000" &&
 	FUTURE_DATE="@2147483646 +0000" &&
-	cd "$TRASH_DIRECTORY" &&
-	mkdir repo &&
-	cd repo &&
-	git init &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
-	test_commit 2 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
-	git commit-graph write --reachable &&
-	graph_read_expect 3 generation_data &&
-	test_commit --date "$FUTURE_DATE" 4 &&
-	test_commit 5 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
-	git branch left &&
-	git reset --hard 3 &&
-	test_commit 7 &&
-	test_commit --date "$FUTURE_DATE" 8 &&
-	test_commit 9 &&
-	git branch right &&
-	git reset --hard 3 &&
-	test_merge M left right &&
-	git commit-graph write --reachable &&
-	graph_read_expect 10 "generation_data generation_data_overflow" &&
-	git commit-graph verify
+
+	git init repo &&
+	(
+		cd repo &&
+
+		test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
+		test_commit 2 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
+		git commit-graph write --reachable &&
+		graph_read_expect 3 generation_data &&
+		test_commit --date "$FUTURE_DATE" 4 &&
+		test_commit 5 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
+		git branch left &&
+		git reset --hard 3 &&
+		test_commit 7 &&
+		test_commit --date "$FUTURE_DATE" 8 &&
+		test_commit 9 &&
+		git branch right &&
+		git reset --hard 3 &&
+		test_merge M left right &&
+		git commit-graph write --reachable &&
+		graph_read_expect 10 "generation_data generation_data_overflow" &&
+		git commit-graph verify
+	)
 '
 
 graph_git_behavior 'generation data overflow chunk repo' repo left right
-- 
2.41.0.399.g887006eab46


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 4/5] t5328: avoid top-level directory changes
  2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
                     ` (2 preceding siblings ...)
  2023-07-24 16:39   ` [PATCH v2 3/5] t5318: avoid top-level directory changes Taylor Blau
@ 2023-07-24 16:39   ` Taylor Blau
  2023-07-24 16:39   ` [PATCH v2 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()` Taylor Blau
  4 siblings, 0 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-24 16:39 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano, Eric Sunshine

In a similar spirit as the last commit, avoid top-level directory
changes in the last remaining commit-graph related test, t5328.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/t5328-commit-graph-64bit-time.sh | 54 +++++++++++++++---------------
 1 file changed, 27 insertions(+), 27 deletions(-)

diff --git a/t/t5328-commit-graph-64bit-time.sh b/t/t5328-commit-graph-64bit-time.sh
index 57e4d9c6998..e9c521c061c 100755
--- a/t/t5328-commit-graph-64bit-time.sh
+++ b/t/t5328-commit-graph-64bit-time.sh
@@ -37,39 +37,39 @@ test_expect_success 'lower layers have overflow chunk' '
 graph_git_behavior 'overflow' '' HEAD~2 HEAD
 
 test_expect_success 'set up and verify repo with generation data overflow chunk' '
-	mkdir repo &&
-	cd repo &&
-	git init &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
-	test_commit 2 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
-	git commit-graph write --reachable &&
-	graph_read_expect 3 generation_data &&
-	test_commit --date "$FUTURE_DATE" 4 &&
-	test_commit 5 &&
-	test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
-	git branch left &&
-	git reset --hard 3 &&
-	test_commit 7 &&
-	test_commit --date "$FUTURE_DATE" 8 &&
-	test_commit 9 &&
-	git branch right &&
-	git reset --hard 3 &&
-	test_merge M left right &&
-	git commit-graph write --reachable &&
-	graph_read_expect 10 "generation_data generation_data_overflow" &&
-	git commit-graph verify
+	git init repo &&
+	(
+		cd repo &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
+		test_commit 2 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
+		git commit-graph write --reachable &&
+		graph_read_expect 3 generation_data &&
+		test_commit --date "$FUTURE_DATE" 4 &&
+		test_commit 5 &&
+		test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
+		git branch left &&
+		git reset --hard 3 &&
+		test_commit 7 &&
+		test_commit --date "$FUTURE_DATE" 8 &&
+		test_commit 9 &&
+		git branch right &&
+		git reset --hard 3 &&
+		test_merge M left right &&
+		git commit-graph write --reachable &&
+		graph_read_expect 10 "generation_data generation_data_overflow" &&
+		git commit-graph verify
+	)
 '
 
 graph_git_behavior 'overflow 2' repo left right
 
 test_expect_success 'single commit with generation data exceeding UINT32_MAX' '
 	git init repo-uint32-max &&
-	cd repo-uint32-max &&
-	test_commit --date "@4294967297 +0000" 1 &&
-	git commit-graph write --reachable &&
-	graph_read_expect 1 "generation_data" &&
-	git commit-graph verify
+	test_commit -C repo-uint32-max --date "@4294967297 +0000" 1 &&
+	git -C repo-uint32-max commit-graph write --reachable &&
+	graph_read_expect -C repo-uint32-max 1 "generation_data" &&
+	git -C repo-uint32-max commit-graph verify
 '
 
 test_done
-- 
2.41.0.399.g887006eab46


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
  2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
                     ` (3 preceding siblings ...)
  2023-07-24 16:39   ` [PATCH v2 4/5] t5328: " Taylor Blau
@ 2023-07-24 16:39   ` Taylor Blau
  4 siblings, 0 replies; 22+ messages in thread
From: Taylor Blau @ 2023-07-24 16:39 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano, Eric Sunshine

In a previous commit, we introduced a sub-shell in the implementation of
`graph_git_behavior()`, in order to allow us to pass `-C "$DIR"`
directly to the git processes spawned by `graph_git_two_modes()`.

Now that its callers are always operating from the "$TRASH_DIRECTORY"
instead of one of its sub-directories, we can drop the inner sub-shell,
as it is no longer required.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/lib-commit-graph.sh | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
index c8bd76a7777..89b26676fbb 100755
--- a/t/lib-commit-graph.sh
+++ b/t/lib-commit-graph.sh
@@ -27,14 +27,11 @@ graph_git_behavior() {
 	BRANCH=$3
 	COMPARE=$4
 	test_expect_success "check normal git operations: $MSG" '
-		(
-			cd "$TRASH_DIRECTORY" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
-			graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
-			graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
-		)
+		graph_git_two_modes "${DIR:+-C $DIR} log --oneline $BRANCH" &&
+		graph_git_two_modes "${DIR:+-C $DIR} log --topo-order $BRANCH" &&
+		graph_git_two_modes "${DIR:+-C $DIR} log --graph $COMPARE..$BRANCH" &&
+		graph_git_two_modes "${DIR:+-C $DIR} branch -vv" &&
+		graph_git_two_modes "${DIR:+-C $DIR} merge-base -a $BRANCH $COMPARE"
 	'
 }
 
-- 
2.41.0.399.g887006eab46

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 3/5] t5318: avoid top-level directory changes
  2023-07-24 16:39   ` [PATCH v2 3/5] t5318: avoid top-level directory changes Taylor Blau
@ 2023-07-24 21:48     ` Junio C Hamano
  0 siblings, 0 replies; 22+ messages in thread
From: Junio C Hamano @ 2023-07-24 21:48 UTC (permalink / raw)
  To: Taylor Blau; +Cc: git, Derrick Stolee, Eric Sunshine

Taylor Blau <me@ttaylorr.com> writes:

>  test_expect_success 'exit with correct error on bad input to --stdin-packs' '
> -	cd "$TRASH_DIRECTORY/full" &&
>  	echo doesnotexist >in &&
> -	test_expect_code 1 git commit-graph write --stdin-packs <in 2>stderr &&
> +	test_expect_code 1 git -C full commit-graph write --stdin-packs \
> +		<in 2>stderr &&
>  	test_i18ngrep "error adding pack" stderr
>  '

Strictly speaking, this changes behaviour in that "in" and "stderr"
files are now left in the top-level directory (they used to be in
the "full" directory).  It is rather hard to make sure that this
difference (and similar ones the patch makes) does not matter in the
rest of the tests only from the patch context, but I'll read through
"git diff -U999" and did not spot anything questionable.

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2023-07-24 21:48 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-21 17:30 [PATCH 0/5] commit-graph: test cleanup and modernization Taylor Blau
2023-07-21 17:30 ` [PATCH 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
2023-07-21 17:41   ` Eric Sunshine
2023-07-21 18:33     ` Taylor Blau
2023-07-21 18:54       ` Junio C Hamano
2023-07-21 17:30 ` [PATCH 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()` Taylor Blau
2023-07-21 18:01   ` Eric Sunshine
2023-07-21 18:39     ` Taylor Blau
2023-07-21 19:02       ` Junio C Hamano
2023-07-21 17:30 ` [PATCH 3/5] t5318: avoid top-level directory changes Taylor Blau
2023-07-21 18:28   ` Eric Sunshine
2023-07-21 17:30 ` [PATCH 4/5] t5328: " Taylor Blau
2023-07-21 17:30 ` [PATCH 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()` Taylor Blau
2023-07-21 18:34 ` [PATCH 0/5] commit-graph: test cleanup and modernization Eric Sunshine
2023-07-21 22:35 ` Junio C Hamano
2023-07-24 16:39 ` [PATCH v2 " Taylor Blau
2023-07-24 16:39   ` [PATCH v2 1/5] t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories Taylor Blau
2023-07-24 16:39   ` [PATCH v2 2/5] t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()` Taylor Blau
2023-07-24 16:39   ` [PATCH v2 3/5] t5318: avoid top-level directory changes Taylor Blau
2023-07-24 21:48     ` Junio C Hamano
2023-07-24 16:39   ` [PATCH v2 4/5] t5328: " Taylor Blau
2023-07-24 16:39   ` [PATCH v2 5/5] t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()` Taylor Blau

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.