Skip to content

Commit f8cf14b

Browse files
authored
Merge pull request git-lfs#5879 from chrisd8088/tests-cleanup-dirs-fix-counts
Run tests in parallel on Windows and always cleanup test directories
2 parents 2daf828 + 1f4a99c commit f8cf14b

File tree

11 files changed

+45
-86
lines changed

11 files changed

+45
-86
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ jobs:
8181
shell: bash
8282
- run: set GOPATH=%HOME%\go
8383
- run: choco install -y InnoSetup
84-
- run: choco install -y strawberryperl
8584
- run: make man
8685
shell: bash
8786
- run: GOPATH="$HOME/go" PATH="$HOME/go/bin:$PATH" go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@latest

.github/workflows/release.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ jobs:
3333
shell: bash
3434
- run: set GOPATH=%HOME%\go
3535
- run: choco install -y InnoSetup
36-
- run: choco install -y strawberryperl
3736
- run: choco install -y zip
3837
- run: choco install -y jq
3938
- run: GOPATH="$HOME/go" PATH="$HOME/go/bin:$PATH" go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@latest

rpm/SPECS/git-lfs.spec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export SKIPAPITESTCOMPILE=1
7171

7272
pushd src/github.com/git-lfs/%{name}
7373
make test
74-
make -C t PROVE_EXTRA_ARGS=-j4 test
74+
make -C t PROVE_EXTRA_ARGS=-j9 test
7575
popd
7676

7777
rm -rf ${GIT_LFS_TEST_DIR}

script/cibuild

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ X=""
99
if [[ $UNAME == MINGW* || $UNAME == MSYS* || $UNAME == CYGWIN* ]]; then
1010
X=".exe"
1111
WINDOWS=1
12-
export GIT_LFS_NO_TEST_COUNT=1
13-
export GIT_LFS_LOCK_ACQUIRE_DISABLED=1
1412
fi
1513

1614
# Build git-lfs-transfer from scutiger.
@@ -30,12 +28,6 @@ GIT_TRACE=1 make GOIMPORTS="$GOIMPORTS" PKGS=git test
3028
pushd t >/dev/null
3129
PROVE="prove"
3230
PROVE_EXTRA_ARGS="-j9"
33-
if [ "$WINDOWS" ]; then
34-
export PATH="/c/Strawberry/perl/bin:.:$PATH"
35-
PROVE="prove.bat"
36-
PROVE_EXTRA_ARGS="$PROVE_EXTRA_ARGS --exec bash"
37-
fi
38-
3931
VERBOSE_LOGS=1 make X="$X" clean
4032
VERBOSE_LOGS=1 make X="$X" PROVE="$PROVE" PROVE_EXTRA_ARGS="$PROVE_EXTRA_ARGS"
4133
popd >/dev/null

t/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ test-commands : $(TEST_CMDS)
4545

4646
test : test-commands
4747
$(RM) -r remote test_count{,.lock}
48-
@GIT_LFS_NO_TEST_COUNT= bash -c '. ./testenv.sh && setup'
49-
$(PROVE) $(PROVE_EXTRA_ARGS) ./t-*.sh
50-
@GIT_LFS_NO_TEST_COUNT= bash -c '. ./testenv.sh && shutdown'
48+
@bash -c ". ./testenv.sh && setup && cd t && \
49+
RM_GIT_LFS_TEST_DIR=no $(PROVE) $(PROVE_EXTRA_ARGS) t-*.sh && \
50+
shutdown"
5151

5252
.PHONY : $(TEST_SRCS)
5353
$(TEST_SRCS) : $(TEST_CMDS)

t/cmd/lfstest-count-tests.go

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ func main() {
6262
if err := acquire(ctx); err != nil {
6363
fatal(err)
6464
}
65-
defer release()
65+
defer func() {
66+
if err := release(); err != nil {
67+
fmt.Fprintf(os.Stderr, "unable to release lock file: %s\n", err)
68+
}
69+
}()
6670

6771
if len(os.Args) == 1 {
6872
// Calling with no arguments indicates that we simply want to
@@ -166,10 +170,6 @@ var (
166170
// acquire acquires the lock file necessary to perform updates to test_count,
167171
// and returns an error if that lock cannot be acquired.
168172
func acquire(ctx context.Context) error {
169-
if disabled() {
170-
return nil
171-
}
172-
173173
path, err := path(lockFile)
174174
if err != nil {
175175
return err
@@ -183,8 +183,11 @@ func acquire(ctx context.Context) error {
183183
case <-tick.C:
184184
// Try every tick of the above ticker before giving up
185185
// and trying again.
186-
_, err := os.OpenFile(path, os.O_CREATE|os.O_EXCL, 0666)
186+
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
187187
if err == nil || !os.IsExist(err) {
188+
if err == nil {
189+
f.Close()
190+
}
188191
return err
189192
}
190193
case <-ctx.Done():
@@ -198,10 +201,6 @@ func acquire(ctx context.Context) error {
198201
// release releases the lock file so that another process can take over, or
199202
// returns an error.
200203
func release() error {
201-
if disabled() {
202-
return nil
203-
}
204-
205204
path, err := path(lockFile)
206205
if err != nil {
207206
return err
@@ -266,22 +265,12 @@ func callWithCount(fn countFn) error {
266265
// 't' directory of the current checkout of Git LFS.
267266
func path(s string) (string, error) {
268267
p := filepath.Join(filepath.Dir(os.Getenv("LFSTEST_DIR")), s)
269-
if err := os.MkdirAll(filepath.Dir(p), 0666); err != nil {
268+
if err := os.MkdirAll(filepath.Dir(p), 0777); err != nil {
270269
return "", err
271270
}
272271
return p, nil
273272
}
274273

275-
// disabled returns true if and only if the lock acquisition phase is disabled.
276-
func disabled() bool {
277-
s := os.Getenv("GIT_LFS_LOCK_ACQUIRE_DISABLED")
278-
b, err := strconv.ParseBool(s)
279-
if err != nil {
280-
return false
281-
}
282-
return b
283-
}
284-
285274
// fatal reports the given error (if non-nil), and then dies. If the error was
286275
// nil, nothing happens.
287276
func fatal(err error) {

t/t-env.sh

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ envInitConfig='git config filter.lfs.process = "git-lfs filter-process"
66
git config filter.lfs.smudge = "git-lfs smudge -- %f"
77
git config filter.lfs.clean = "git-lfs clean -- %f"'
88

9-
unset_vars() {
10-
# If set, these will cause the test to fail.
11-
unset GIT_LFS_NO_TEST_COUNT GIT_LFS_LOCK_ACQUIRE_DISABLED
12-
}
9+
if [ "$IS_WINDOWS" -eq 1 ]; then
10+
export MSYS2_ENV_CONV_EXCL="GIT_LFS_TEST_DIR"
11+
fi
1312

1413
begin_test "env with no remote"
1514
(
1615
set -e
1716
reponame="env-no-remote"
18-
unset_vars
1917
mkdir $reponame
2018
cd $reponame
2119
git init
@@ -67,7 +65,6 @@ begin_test "env with origin remote"
6765
(
6866
set -e
6967
reponame="env-origin-remote"
70-
unset_vars
7168
mkdir $reponame
7269
cd $reponame
7370
git init
@@ -125,7 +122,6 @@ begin_test "env with multiple remotes"
125122
(
126123
set -e
127124
reponame="env-multiple-remotes"
128-
unset_vars
129125
mkdir $reponame
130126
cd $reponame
131127
git init
@@ -186,7 +182,6 @@ begin_test "env with other remote"
186182
(
187183
set -e
188184
reponame="env-other-remote"
189-
unset_vars
190185
mkdir $reponame
191186
cd $reponame
192187
git init
@@ -245,7 +240,6 @@ begin_test "env with multiple remotes and lfs.url config"
245240
(
246241
set -e
247242
reponame="env-multiple-remotes-with-lfs-url"
248-
unset_vars
249243
mkdir $reponame
250244
cd $reponame
251245
git init
@@ -305,7 +299,6 @@ begin_test "env with multiple remotes and lfs configs"
305299
(
306300
set -e
307301
reponame="env-multiple-remotes-lfs-configs"
308-
unset_vars
309302
mkdir $reponame
310303
cd $reponame
311304
git init
@@ -367,7 +360,6 @@ begin_test "env with multiple remotes and batch configs"
367360
(
368361
set -e
369362
reponame="env-multiple-remotes-lfs-batch-configs"
370-
unset_vars
371363
mkdir $reponame
372364
cd $reponame
373365
git init
@@ -429,8 +421,6 @@ begin_test "env with .lfsconfig"
429421
(
430422
set -e
431423
reponame="env-with-lfsconfig"
432-
unset_vars
433-
434424
git init $reponame
435425
cd $reponame
436426

@@ -499,7 +489,6 @@ begin_test "env with environment variables"
499489
(
500490
set -e
501491
reponame="env-with-envvars"
502-
unset_vars
503492
git init $reponame
504493
mkdir -p $reponame/a/b/c
505494

@@ -677,7 +666,6 @@ begin_test "env with bare repo"
677666
(
678667
set -e
679668
reponame="env-with-bare-repo"
680-
unset_vars
681669
git init --bare $reponame
682670
cd $reponame
683671

@@ -725,7 +713,6 @@ begin_test "env with multiple ssh remotes"
725713
(
726714
set -e
727715
reponame="env-with-ssh"
728-
unset_vars
729716
mkdir $reponame
730717
cd $reponame
731718
git init
@@ -877,7 +864,6 @@ begin_test "env with extra transfer methods"
877864
(
878865
set -e
879866
reponame="env-with-transfers"
880-
unset_vars
881867
git init $reponame
882868
cd $reponame
883869

@@ -938,7 +924,6 @@ begin_test "env with multiple remotes and ref"
938924
(
939925
set -e
940926
reponame="env-multiple-remotes-ref"
941-
unset_vars
942927
mkdir $reponame
943928
cd $reponame
944929
git init
@@ -1001,7 +986,6 @@ begin_test "env with unicode"
1001986
# This contains a Unicode apostrophe, an E with grave accent, and a Euro sign.
1002987
# Only the middle one is representable in ISO-8859-1.
1003988
reponame="env-d’autre-nom-très-bizarr€"
1004-
unset_vars
1005989
mkdir $reponame
1006990
cd $reponame
1007991
git init
@@ -1063,7 +1047,6 @@ end_test
10631047
begin_test "env outside a repository"
10641048
(
10651049
set -e
1066-
unset_vars
10671050

10681051
# This may or may not work, depending on the system, but it should at least
10691052
# potentially cause Git to print non-English messages.
@@ -1113,7 +1096,6 @@ begin_test "env with duplicate endpoints"
11131096
(
11141097
set -e
11151098
reponame="env-duplicate-endpoints"
1116-
unset_vars
11171099
mkdir $reponame
11181100
cd $reponame
11191101
git init

t/t-worktree.sh

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,14 @@ envInitConfig='git config filter.lfs.process = "git-lfs filter-process"
77
git config filter.lfs.smudge = "git-lfs smudge -- %f"
88
git config filter.lfs.clean = "git-lfs clean -- %f"'
99

10-
unset_vars () {
11-
# If set, these will cause the test to fail.
12-
unset GIT_LFS_NO_TEST_COUNT GIT_LFS_LOCK_ACQUIRE_DISABLED
13-
}
10+
if [ "$IS_WINDOWS" -eq 1 ]; then
11+
export MSYS2_ENV_CONV_EXCL="GIT_LFS_TEST_DIR"
12+
fi
1413

1514
begin_test "git worktree"
1615
(
1716
set -e
1817
reponame="worktree-main"
19-
unset_vars
2018
mkdir $reponame
2119
cd $reponame
2220
git init
@@ -99,7 +97,6 @@ begin_test "git worktree with hooks"
9997
(
10098
set -e
10199
reponame="worktree-hooks"
102-
unset_vars
103100
mkdir $reponame
104101
cd $reponame
105102
git init

t/testenv.sh

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ resolve_symlink() {
6262
else
6363
readlink -f "$arg"
6464
fi
65-
6665
}
6766

6867
# The root directory for the git-lfs repository by default.
@@ -84,11 +83,17 @@ else
8483
fi
8584

8685
if [ -z "$GIT_LFS_TEST_DIR" ]; then
87-
GIT_LFS_TEST_DIR=$(mktemp -d -t "$TEMPDIR_PREFIX")
88-
GIT_LFS_TEST_DIR=$(resolve_symlink $GIT_LFS_TEST_DIR)
86+
GIT_LFS_TEST_DIR="$(mktemp -d -t "$TEMPDIR_PREFIX")"
87+
GIT_LFS_TEST_DIR="$(resolve_symlink "$GIT_LFS_TEST_DIR")"
8988
# cleanup either after single test or at end of integration (except on fail)
90-
RM_GIT_LFS_TEST_DIR=yes
89+
RM_GIT_LFS_TEST_DIR="yes"
9190
fi
91+
92+
# Make these variables available to all test files run in the same shell,
93+
# particularly when setup() is run first by itself to start a single
94+
# common lfstest-gitserver instance.
95+
export GIT_LFS_TEST_DIR RM_GIT_LFS_TEST_DIR
96+
9297
# create a temporary work space
9398
TMPDIR=$GIT_LFS_TEST_DIR
9499

@@ -111,10 +116,6 @@ REMOTEDIR="$ROOTDIR/t/remote"
111116
#
112117
CREDSDIR="$REMOTEDIR/creds/"
113118

114-
# This is the prefix for Git config files. See the "Test Suite" section in
115-
# t/README.md
116-
LFS_CONFIG="$REMOTEDIR/config"
117-
118119
# This file contains the URL of the test Git server. See the "Test Suite"
119120
# section in t/README.md
120121
LFS_URL_FILE="$REMOTEDIR/url"

t/testhelpers.sh

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -578,17 +578,15 @@ setup() {
578578
git lfs version | sed -e 's/^/# /g'
579579
git version | sed -e 's/^/# /g'
580580

581-
if [ -z "$GIT_LFS_NO_TEST_COUNT" ]; then
582-
LFSTEST_URL="$LFS_URL_FILE" \
583-
LFSTEST_SSL_URL="$LFS_SSL_URL_FILE" \
584-
LFSTEST_CLIENT_CERT_URL="$LFS_CLIENT_CERT_URL_FILE" \
585-
LFSTEST_DIR="$REMOTEDIR" \
586-
LFSTEST_CERT="$LFS_CERT_FILE" \
587-
LFSTEST_CLIENT_CERT="$LFS_CLIENT_CERT_FILE" \
588-
LFSTEST_CLIENT_KEY="$LFS_CLIENT_KEY_FILE" \
589-
LFSTEST_CLIENT_KEY_ENCRYPTED="$LFS_CLIENT_KEY_FILE_ENCRYPTED" \
590-
lfstest-count-tests increment
591-
fi
581+
LFSTEST_URL="$LFS_URL_FILE" \
582+
LFSTEST_SSL_URL="$LFS_SSL_URL_FILE" \
583+
LFSTEST_CLIENT_CERT_URL="$LFS_CLIENT_CERT_URL_FILE" \
584+
LFSTEST_DIR="$REMOTEDIR" \
585+
LFSTEST_CERT="$LFS_CERT_FILE" \
586+
LFSTEST_CLIENT_CERT="$LFS_CLIENT_CERT_FILE" \
587+
LFSTEST_CLIENT_KEY="$LFS_CLIENT_KEY_FILE" \
588+
LFSTEST_CLIENT_KEY_ENCRYPTED="$LFS_CLIENT_KEY_FILE_ENCRYPTED" \
589+
lfstest-count-tests increment
592590

593591
wait_for_file "$LFS_URL_FILE"
594592
wait_for_file "$LFS_SSL_URL_FILE"
@@ -646,10 +644,13 @@ shutdown() {
646644
# every t/t-*.sh file should cleanup its trashdir
647645
[ -z "$KEEPTRASH" ] && rm -rf "$TRASHDIR"
648646

649-
if [ -z "$GIT_LFS_NO_TEST_COUNT" ]; then
650-
LFSTEST_DIR="$REMOTEDIR" \
651-
LFS_URL_FILE="$LFS_URL_FILE" \
652-
lfstest-count-tests decrement
647+
LFSTEST_DIR="$REMOTEDIR" \
648+
LFS_URL_FILE="$LFS_URL_FILE" \
649+
lfstest-count-tests decrement
650+
651+
# delete entire lfs test root if we created it (double check pattern)
652+
if [ -z "$KEEPTRASH" ] && [ "$RM_GIT_LFS_TEST_DIR" = "yes" ] && [[ $GIT_LFS_TEST_DIR == *"$TEMPDIR_PREFIX"* ]]; then
653+
rm -rf "$GIT_LFS_TEST_DIR"
653654
fi
654655
}
655656

0 commit comments

Comments
 (0)