Merge branch 'jk/test-commit-bulk'
A test helper has been introduced to optimize preparation of test repositories with many simple commits, and a handful of test scripts have been updated to use it. * jk/test-commit-bulk: t6200: use test_commit_bulk t5703: use test_commit_bulk t5702: use test_commit_bulk t3311: use test_commit_bulk t5310: increase the number of bitmapped commits test-lib: introduce test_commit_bulk
This commit is contained in:
commit
df63c2e503
@ -114,12 +114,12 @@ cp expect_log_x expect_log_y
|
|||||||
test_expect_success 'Add a few hundred commits w/notes to trigger fanout (x -> y)' '
|
test_expect_success 'Add a few hundred commits w/notes to trigger fanout (x -> y)' '
|
||||||
git update-ref refs/notes/y refs/notes/x &&
|
git update-ref refs/notes/y refs/notes/x &&
|
||||||
git config core.notesRef refs/notes/y &&
|
git config core.notesRef refs/notes/y &&
|
||||||
i=5 &&
|
test_commit_bulk --start=6 --id=commit $((num - 5)) &&
|
||||||
while test $i -lt $num
|
i=0 &&
|
||||||
|
while test $i -lt $((num - 5))
|
||||||
do
|
do
|
||||||
i=$(($i + 1)) &&
|
git notes add -m "notes for commit$i" HEAD~$i || return 1
|
||||||
test_commit "commit$i" >/dev/null &&
|
i=$((i + 1))
|
||||||
git notes add -m "notes for commit$i" || return 1
|
|
||||||
done &&
|
done &&
|
||||||
test "$(git rev-parse refs/notes/y)" != "$(git rev-parse refs/notes/x)" &&
|
test "$(git rev-parse refs/notes/y)" != "$(git rev-parse refs/notes/x)" &&
|
||||||
# Expected number of commits and notes
|
# Expected number of commits and notes
|
||||||
|
@ -21,15 +21,9 @@ has_any () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test_expect_success 'setup repo with moderate-sized history' '
|
test_expect_success 'setup repo with moderate-sized history' '
|
||||||
for i in $(test_seq 1 10)
|
test_commit_bulk --id=file 100 &&
|
||||||
do
|
|
||||||
test_commit $i
|
|
||||||
done &&
|
|
||||||
git checkout -b other HEAD~5 &&
|
git checkout -b other HEAD~5 &&
|
||||||
for i in $(test_seq 1 10)
|
test_commit_bulk --id=side 10 &&
|
||||||
do
|
|
||||||
test_commit side-$i
|
|
||||||
done &&
|
|
||||||
git checkout master &&
|
git checkout master &&
|
||||||
bitmaptip=$(git rev-parse master) &&
|
bitmaptip=$(git rev-parse master) &&
|
||||||
blob=$(echo tagged-blob | git hash-object -w --stdin) &&
|
blob=$(echo tagged-blob | git hash-object -w --stdin) &&
|
||||||
@ -106,10 +100,7 @@ test_expect_success 'clone from bitmapped repository' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'setup further non-bitmapped commits' '
|
test_expect_success 'setup further non-bitmapped commits' '
|
||||||
for i in $(test_seq 1 10)
|
test_commit_bulk --id=further 10
|
||||||
do
|
|
||||||
test_commit further-$i
|
|
||||||
done
|
|
||||||
'
|
'
|
||||||
|
|
||||||
rev_list_tests 'partial bitmap'
|
rev_list_tests 'partial bitmap'
|
||||||
|
@ -499,10 +499,7 @@ test_expect_success 'upload-pack respects client shallows' '
|
|||||||
|
|
||||||
# Add extra commits to the client so that the whole fetch takes more
|
# Add extra commits to the client so that the whole fetch takes more
|
||||||
# than 1 request (due to negotiation)
|
# than 1 request (due to negotiation)
|
||||||
for i in $(test_seq 1 32)
|
test_commit_bulk -C client --id=c 32 &&
|
||||||
do
|
|
||||||
test_commit -C client c$i
|
|
||||||
done &&
|
|
||||||
|
|
||||||
git -C server checkout -b newbranch base &&
|
git -C server checkout -b newbranch base &&
|
||||||
test_commit -C server client_wants &&
|
test_commit -C server client_wants &&
|
||||||
@ -711,10 +708,7 @@ test_expect_success 'when server does not send "ready", expect FLUSH' '
|
|||||||
# Create many commits to extend the negotiation phase across multiple
|
# Create many commits to extend the negotiation phase across multiple
|
||||||
# requests, so that the server does not send "ready" in the first
|
# requests, so that the server does not send "ready" in the first
|
||||||
# request.
|
# request.
|
||||||
for i in $(test_seq 1 32)
|
test_commit_bulk -C http_child --id=c 32 &&
|
||||||
do
|
|
||||||
test_commit -C http_child c$i
|
|
||||||
done &&
|
|
||||||
|
|
||||||
# After the acknowledgments section, pretend that a DELIM
|
# After the acknowledgments section, pretend that a DELIM
|
||||||
# (0001) was sent instead of a FLUSH (0000).
|
# (0001) was sent instead of a FLUSH (0000).
|
||||||
|
@ -176,7 +176,7 @@ test_expect_success 'setup repos for change-while-negotiating test' '
|
|||||||
git clone "http://127.0.0.1:$LIB_HTTPD_PORT/smart/repo" "$LOCAL_PRISTINE" &&
|
git clone "http://127.0.0.1:$LIB_HTTPD_PORT/smart/repo" "$LOCAL_PRISTINE" &&
|
||||||
cd "$LOCAL_PRISTINE" &&
|
cd "$LOCAL_PRISTINE" &&
|
||||||
git checkout -b side &&
|
git checkout -b side &&
|
||||||
for i in $(test_seq 1 33); do test_commit s$i; done &&
|
test_commit_bulk --id=s 33 &&
|
||||||
|
|
||||||
# Add novel commits to upstream
|
# Add novel commits to upstream
|
||||||
git checkout master &&
|
git checkout master &&
|
||||||
@ -287,7 +287,7 @@ test_expect_success 'setup repos for fetching with ref-in-want tests' '
|
|||||||
git clone "file://$REPO" "$LOCAL_PRISTINE" &&
|
git clone "file://$REPO" "$LOCAL_PRISTINE" &&
|
||||||
cd "$LOCAL_PRISTINE" &&
|
cd "$LOCAL_PRISTINE" &&
|
||||||
git checkout -b side &&
|
git checkout -b side &&
|
||||||
for i in $(test_seq 1 33); do test_commit s$i; done &&
|
test_commit_bulk --id=s 33 &&
|
||||||
|
|
||||||
# Add novel commits to upstream
|
# Add novel commits to upstream
|
||||||
git checkout master &&
|
git checkout master &&
|
||||||
|
@ -66,12 +66,7 @@ test_expect_success setup '
|
|||||||
git commit -a -m "Right #5" &&
|
git commit -a -m "Right #5" &&
|
||||||
|
|
||||||
git checkout -b long &&
|
git checkout -b long &&
|
||||||
i=0 &&
|
test_commit_bulk --start=0 --message=%s --filename=one 30 &&
|
||||||
while test $i -lt 30
|
|
||||||
do
|
|
||||||
test_commit $i one &&
|
|
||||||
i=$(($i+1))
|
|
||||||
done &&
|
|
||||||
|
|
||||||
git show-branch &&
|
git show-branch &&
|
||||||
|
|
||||||
|
@ -233,6 +233,129 @@ test_merge () {
|
|||||||
git tag "$1"
|
git tag "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Efficiently create <nr> commits, each with a unique number (from 1 to <nr>
|
||||||
|
# by default) in the commit message.
|
||||||
|
#
|
||||||
|
# Usage: test_commit_bulk [options] <nr>
|
||||||
|
# -C <dir>:
|
||||||
|
# Run all git commands in directory <dir>
|
||||||
|
# --ref=<n>:
|
||||||
|
# ref on which to create commits (default: HEAD)
|
||||||
|
# --start=<n>:
|
||||||
|
# number commit messages from <n> (default: 1)
|
||||||
|
# --message=<msg>:
|
||||||
|
# use <msg> as the commit mesasge (default: "commit %s")
|
||||||
|
# --filename=<fn>:
|
||||||
|
# modify <fn> in each commit (default: %s.t)
|
||||||
|
# --contents=<string>:
|
||||||
|
# place <string> in each file (default: "content %s")
|
||||||
|
# --id=<string>:
|
||||||
|
# shorthand to use <string> and %s in message, filename, and contents
|
||||||
|
#
|
||||||
|
# The message, filename, and contents strings are evaluated by printf, with the
|
||||||
|
# first "%s" replaced by the current commit number. So you can do:
|
||||||
|
#
|
||||||
|
# test_commit_bulk --filename=file --contents="modification %s"
|
||||||
|
#
|
||||||
|
# to have every commit touch the same file, but with unique content.
|
||||||
|
#
|
||||||
|
test_commit_bulk () {
|
||||||
|
tmpfile=.bulk-commit.input
|
||||||
|
indir=.
|
||||||
|
ref=HEAD
|
||||||
|
n=1
|
||||||
|
message='commit %s'
|
||||||
|
filename='%s.t'
|
||||||
|
contents='content %s'
|
||||||
|
while test $# -gt 0
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
-C)
|
||||||
|
indir=$2
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--ref=*)
|
||||||
|
ref=${1#--*=}
|
||||||
|
;;
|
||||||
|
--start=*)
|
||||||
|
n=${1#--*=}
|
||||||
|
;;
|
||||||
|
--message=*)
|
||||||
|
message=${1#--*=}
|
||||||
|
;;
|
||||||
|
--filename=*)
|
||||||
|
filename=${1#--*=}
|
||||||
|
;;
|
||||||
|
--contents=*)
|
||||||
|
contents=${1#--*=}
|
||||||
|
;;
|
||||||
|
--id=*)
|
||||||
|
message="${1#--*=} %s"
|
||||||
|
filename="${1#--*=}-%s.t"
|
||||||
|
contents="${1#--*=} %s"
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
BUG "invalid test_commit_bulk option: $1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
total=$1
|
||||||
|
|
||||||
|
add_from=
|
||||||
|
if git -C "$indir" rev-parse --verify "$ref"
|
||||||
|
then
|
||||||
|
add_from=t
|
||||||
|
fi
|
||||||
|
|
||||||
|
while test "$total" -gt 0
|
||||||
|
do
|
||||||
|
test_tick &&
|
||||||
|
echo "commit $ref"
|
||||||
|
printf 'author %s <%s> %s\n' \
|
||||||
|
"$GIT_AUTHOR_NAME" \
|
||||||
|
"$GIT_AUTHOR_EMAIL" \
|
||||||
|
"$GIT_AUTHOR_DATE"
|
||||||
|
printf 'committer %s <%s> %s\n' \
|
||||||
|
"$GIT_COMMITTER_NAME" \
|
||||||
|
"$GIT_COMMITTER_EMAIL" \
|
||||||
|
"$GIT_COMMITTER_DATE"
|
||||||
|
echo "data <<EOF"
|
||||||
|
printf "$message\n" $n
|
||||||
|
echo "EOF"
|
||||||
|
if test -n "$add_from"
|
||||||
|
then
|
||||||
|
echo "from $ref^0"
|
||||||
|
add_from=
|
||||||
|
fi
|
||||||
|
printf "M 644 inline $filename\n" $n
|
||||||
|
echo "data <<EOF"
|
||||||
|
printf "$contents\n" $n
|
||||||
|
echo "EOF"
|
||||||
|
echo
|
||||||
|
n=$((n + 1))
|
||||||
|
total=$((total - 1))
|
||||||
|
done >"$tmpfile"
|
||||||
|
|
||||||
|
git -C "$indir" \
|
||||||
|
-c fastimport.unpacklimit=0 \
|
||||||
|
fast-import <"$tmpfile" || return 1
|
||||||
|
|
||||||
|
# This will be left in place on failure, which may aid debugging.
|
||||||
|
rm -f "$tmpfile"
|
||||||
|
|
||||||
|
# If we updated HEAD, then be nice and update the index and working
|
||||||
|
# tree, too.
|
||||||
|
if test "$ref" = "HEAD"
|
||||||
|
then
|
||||||
|
git -C "$indir" checkout -f HEAD || return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
# This function helps systems where core.filemode=false is set.
|
# This function helps systems where core.filemode=false is set.
|
||||||
# Use it instead of plain 'chmod +x' to set or unset the executable bit
|
# Use it instead of plain 'chmod +x' to set or unset the executable bit
|
||||||
# of a file in the working directory and add it to the index.
|
# of a file in the working directory and add it to the index.
|
||||||
|
Loading…
Reference in New Issue
Block a user