From ca187076ac7259ce1c94f56625c1b09b04607495 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 10:21:53 +0100 Subject: [PATCH 01/10] chore: rename `couch` make target to `couch-core` This is in preparation for using parallel make features. Since both .PHONY couch and src/couch exist, the parallising of src/* would clobber the top level .PHONY couch target. --- Makefile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 06578a6ebf..279460f93e 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,7 @@ endif .PHONY: all # target: all - Build everything -all: couch fauxton docs escriptize nouveau +all: couch-core fauxton docs escriptize nouveau .PHONY: help @@ -123,9 +123,9 @@ help: ################################################################################ -.PHONY: couch -# target: couch - Build CouchDB core, use ERL_COMPILER_OPTIONS to provide custom compiler's options -couch: config.erl +.PHONY: couch-core +# target: couch-core - Build CouchDB core, use ERL_COMPILER_OPTIONS to provide custom compiler's options +couch-core: config.erl @COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) compile $(COMPILE_OPTS) ifeq ($(with_spidermonkey), true) @cp src/couch/priv/couchjs bin/ @@ -146,7 +146,7 @@ fauxton: share/www .PHONY: escriptize # target: escriptize - Build CLI tools -escriptize: couch +escriptize: couch-core @$(REBAR) -r escriptize apps=weatherreport @cp src/weatherreport/weatherreport bin/weatherreport @@ -199,7 +199,7 @@ just-eunit: .PHONY: soak-eunit soak-eunit: export BUILDDIR = $(CURDIR) soak-eunit: export ERL_AFLAGS = -config $(CURDIR)/rel/files/eunit.config -soak-eunit: couch +soak-eunit: couch-core @$(REBAR) setup_eunit 2> /dev/null while [ $$? -eq 0 ] ; do $(REBAR) -r eunit $(EUNIT_OPTS) ; done @@ -356,7 +356,7 @@ weatherreport-test: devclean escriptize .PHONY: quickjs-test262 # target: quickjs-javascript-tests - Run QuickJS JS conformance tests -quickjs-test262: couch +quickjs-test262: couch-core make -C src/couch_quickjs/quickjs test2-bootstrap make -C src/couch_quickjs/quickjs test2 @@ -578,7 +578,7 @@ endif nouveau-test: nouveau-test-gradle nouveau-test-elixir .PHONY: nouveau-test-gradle -nouveau-test-gradle: couch nouveau +nouveau-test-gradle: couch-core nouveau ifeq ($(with_nouveau), true) @cd nouveau && $(GRADLE) test --info --rerun endif @@ -586,7 +586,7 @@ endif .PHONY: nouveau-test-elixir nouveau-test-elixir: export MIX_ENV=integration nouveau-test-elixir: elixir-init devclean -nouveau-test-elixir: couch nouveau +nouveau-test-elixir: couch-core nouveau ifeq ($(with_nouveau), true) @dev/run "$(TEST_OPTS)" -n 1 -q -a adm:pass --with-nouveau \ --locald-config test/config/test-config.ini \ From 8604e57f29b4c118b080db7fa6d7f4a1f0fc4e4c Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 10:23:06 +0100 Subject: [PATCH 02/10] feat: allow for parallel execution of `make eunit` sub-targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When called with -jN for N>1, make will run `rebar -r eunit` for all src/* Erlang apps (without the default skipped ones) up to the limit of N times in parallel. This is best used with GNU Make, as it allows for controlling the output of each subtask to be grouped. BSD Make has no such feature and interleaves all parallel target’s output, making it hard to read. For example: gmake -j2 --output-sync=target will run two test suites in parallel and keep their respective outputs separated. It does this by buffering all output before a task is done that means for the first few tests, you don’t see output as you do with serial execution. On my machine I can run up to -j6 relatively stable, making use of all 14 cores. Beyond that, Spurious errors can occur. I’ll file those separately. -j2 shows an almost 2x speed improvement, as expected and things scale relatively linarly up until ~2.5 minutes of runtime, which seems to be a lower bound with all our various setup and wait bits. For comparison, -j1, that is serial execution takes about 10.5 minutes on this machine. Use with care in CI, but definitely use on your local dev machine. --- Makefile | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 279460f93e..eaa443f2f7 100644 --- a/Makefile +++ b/Makefile @@ -168,23 +168,34 @@ check: all @$(MAKE) nouveau-test ifdef apps -subdirs = $(apps) +SUBDIRS = $(apps) else -subdirs=$(shell ls src) +SUBDIRS=$(shell ls src) endif -.PHONY: eunit +# Used for comparing behaviour against he new `eunit` target, delete once we +# are happy with the new `eunit`. +.PHONY: old-eunit +old-eunit: export BUILDDIR = $(CURDIR) +old-eunit: export ERL_AFLAGS = -config $(CURDIR)/rel/files/eunit.config +old-eunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(CURDIR)/bin/couchjs $(CURDIR)/share/server/main.js +old-eunit: export COUCHDB_TEST_ADMIN_PARTY_OVERRIDE=1 +old-eunit: + @COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) setup_eunit 2> /dev/null + @for dir in $(SUBDIRS); do \ + COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) -r eunit $(EUNIT_OPTS) apps=$$dir || exit 1; \ + done + # target: eunit - Run EUnit tests, use EUNIT_OPTS to provide custom options +.PHONY: eunit $(SUBDIRS) eunit: export BUILDDIR = $(CURDIR) eunit: export ERL_AFLAGS = -config $(CURDIR)/rel/files/eunit.config eunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(CURDIR)/bin/couchjs $(CURDIR)/share/server/main.js eunit: export COUCHDB_TEST_ADMIN_PARTY_OVERRIDE=1 -eunit: couch - @COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) setup_eunit 2> /dev/null - @for dir in $(subdirs); do \ - COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) -r eunit $(EUNIT_OPTS) apps=$$dir || exit 1; \ - done +eunit: ${SUBDIRS} +$(SUBDIRS): setup-eunit + @COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) -r eunit $(EUNIT_OPTS) apps=$@ #|| exit 1 setup-eunit: export BUILDDIR = $(CURDIR) setup-eunit: export ERL_AFLAGS = -config $(CURDIR)/rel/files/eunit.config From bb6e053f11ede39108a0ce00fd6358113c09ea7c Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 10:33:12 +0100 Subject: [PATCH 03/10] chore: move nouveau to extra/nouveau to avoid parallel make target clobbering --- .gitattributes | 6 +- Makefile | 24 +-- dev/run | 4 +- {nouveau => extra/nouveau}/.gitignore | 0 {nouveau => extra/nouveau}/LICENSE | 0 {nouveau => extra/nouveau}/README.md | 0 {nouveau => extra/nouveau}/TODO | 0 {nouveau => extra/nouveau}/build.gradle | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 {nouveau => extra/nouveau}/gradlew | 0 {nouveau => extra/nouveau}/gradlew.bat | 184 +++++++++--------- {nouveau => extra/nouveau}/settings.gradle | 0 .../couchdb/nouveau/NouveauApplication.java | 0 .../NouveauApplicationConfiguration.java | 0 .../couchdb/nouveau/api/AnalyzeRequest.java | 0 .../couchdb/nouveau/api/AnalyzeResponse.java | 0 .../nouveau/api/DocumentDeleteRequest.java | 0 .../nouveau/api/DocumentUpdateRequest.java | 0 .../couchdb/nouveau/api/DoubleField.java | 0 .../couchdb/nouveau/api/DoubleRange.java | 0 .../org/apache/couchdb/nouveau/api/Field.java | 0 .../couchdb/nouveau/api/IndexDefinition.java | 0 .../apache/couchdb/nouveau/api/IndexInfo.java | 0 .../couchdb/nouveau/api/IndexInfoRequest.java | 0 .../org/apache/couchdb/nouveau/api/Ok.java | 0 .../org/apache/couchdb/nouveau/api/Range.java | 0 .../apache/couchdb/nouveau/api/SearchHit.java | 0 .../couchdb/nouveau/api/SearchRequest.java | 0 .../couchdb/nouveau/api/SearchResults.java | 0 .../couchdb/nouveau/api/StoredField.java | 0 .../couchdb/nouveau/api/StringField.java | 0 .../apache/couchdb/nouveau/api/TextField.java | 0 .../apache/couchdb/nouveau/core/IOUtils.java | 0 .../apache/couchdb/nouveau/core/Index.java | 0 .../couchdb/nouveau/core/IndexFunction.java | 0 .../couchdb/nouveau/core/IndexManager.java | 0 .../nouveau/core/StaleIndexException.java | 0 .../couchdb/nouveau/core/StripedLock.java | 0 .../core/UpdatesOutOfOrderException.java | 0 .../couchdb/nouveau/core/UserAgentFilter.java | 0 .../nouveau/core/ser/ByteArrayWrapper.java | 0 .../nouveau/core/ser/DoubleWrapper.java | 0 .../nouveau/core/ser/FloatWrapper.java | 0 .../couchdb/nouveau/core/ser/IntWrapper.java | 0 .../couchdb/nouveau/core/ser/LongWrapper.java | 0 .../couchdb/nouveau/core/ser/NullWrapper.java | 0 .../nouveau/core/ser/PrimitiveWrapper.java | 0 .../nouveau/core/ser/StringWrapper.java | 0 .../nouveau/health/AnalyzeHealthCheck.java | 0 .../nouveau/health/IndexHealthCheck.java | 0 .../lucene9/Lucene9AnalyzerFactory.java | 0 .../couchdb/nouveau/lucene9/Lucene9Index.java | 0 .../nouveau/lucene9/Lucene9IndexSchema.java | 0 .../nouveau/lucene9/Lucene9Module.java | 0 .../nouveau/lucene9/NouveauQueryParser.java | 0 .../lucene9/ParallelSearcherFactory.java | 0 .../nouveau/lucene9/QueryDeserializer.java | 0 .../nouveau/lucene9/QuerySerializer.java | 0 .../lucene9/SimpleAsciiFoldingAnalyzer.java | 0 .../nouveau/resources/AnalyzeResource.java | 0 .../nouveau/resources/IndexResource.java | 0 .../nouveau/tasks/CloseAllIndexesTask.java | 0 .../nouveau}/src/main/resources/banner.txt | 0 .../nouveau}/src/main/resources/openapi.yaml | 0 .../nouveau/api/SearchRequestTest.java | 0 .../nouveau/core/IndexManagerTest.java | 0 .../health/AnalyzeHealthCheckTest.java | 0 .../nouveau/health/IndexHealthCheckTest.java | 0 .../lucene9/Lucene9AnalyzerFactoryTest.java | 0 .../nouveau/lucene9/Lucene9IndexTest.java | 0 .../lucene9/NouveauQueryParserTest.java | 0 .../lucene9/QuerySerializationTest.java | 0 .../fixtures/DocumentUpdateRequest.json | 0 .../resources/fixtures/SearchRequest.json | 0 75 files changed, 109 insertions(+), 109 deletions(-) rename {nouveau => extra/nouveau}/.gitignore (100%) rename {nouveau => extra/nouveau}/LICENSE (100%) rename {nouveau => extra/nouveau}/README.md (100%) rename {nouveau => extra/nouveau}/TODO (100%) rename {nouveau => extra/nouveau}/build.gradle (100%) rename {nouveau => extra/nouveau}/gradle/wrapper/gradle-wrapper.jar (100%) rename {nouveau => extra/nouveau}/gradle/wrapper/gradle-wrapper.properties (100%) rename {nouveau => extra/nouveau}/gradlew (100%) rename {nouveau => extra/nouveau}/gradlew.bat (96%) rename {nouveau => extra/nouveau}/settings.gradle (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeResponse.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/DoubleRange.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/Field.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/Ok.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/Range.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/SearchRequest.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/StringField.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/api/TextField.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/IOUtils.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/Index.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/IndexFunction.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/StaleIndexException.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/StripedLock.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/UpdatesOutOfOrderException.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/UserAgentFilter.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/ByteArrayWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/DoubleWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/FloatWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/IntWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/LongWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/NullWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/PrimitiveWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/core/ser/StringWrapper.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/health/IndexHealthCheck.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexSchema.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/resources/AnalyzeResource.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java (100%) rename {nouveau => extra/nouveau}/src/main/java/org/apache/couchdb/nouveau/tasks/CloseAllIndexesTask.java (100%) rename {nouveau => extra/nouveau}/src/main/resources/banner.txt (100%) rename {nouveau => extra/nouveau}/src/main/resources/openapi.yaml (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/api/SearchRequestTest.java (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheckTest.java (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactoryTest.java (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParserTest.java (100%) rename {nouveau => extra/nouveau}/src/test/java/org/apache/couchdb/nouveau/lucene9/QuerySerializationTest.java (100%) rename {nouveau => extra/nouveau}/src/test/resources/fixtures/DocumentUpdateRequest.json (100%) rename {nouveau => extra/nouveau}/src/test/resources/fixtures/SearchRequest.json (100%) diff --git a/.gitattributes b/.gitattributes index 7b7f56abb7..0c4d7cf7be 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,3 @@ -nouveau/**/* text eol=lf -nouveau/**/*.bat text eol=crlf -nouveau/**/*.jar binary +extra/nouveau/**/* text eol=lf +extra/nouveau/**/*.bat text eol=crlf +extra/nouveau/**/*.jar binary diff --git a/Makefile b/Makefile index eaa443f2f7..947371e3c6 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ include version.mk REBAR?=$(CURDIR)/bin/rebar REBAR3?=$(CURDIR)/bin/rebar3 ERLFMT?=$(CURDIR)/bin/erlfmt -GRADLE?=$(CURDIR)/nouveau/gradlew +GRADLE?=$(CURDIR)/extra/nouveau/gradlew # Handle the following scenarios: # 1. When building from a tarball, use version.mk. @@ -106,7 +106,7 @@ endif .PHONY: all # target: all - Build everything -all: couch-core fauxton docs escriptize nouveau +all: couch-core fauxton docs escriptize extra/nouveau .PHONY: help @@ -461,8 +461,8 @@ endif ifeq ($(with_nouveau), true) @mkdir rel/couchdb/nouveau - @cd nouveau && $(GRADLE) installDist - @cp -R nouveau/build/install/nouveau rel/couchdb + @cd extra/nouveau && $(GRADLE) installDist + @cp -R extra/nouveau/build/install/nouveau rel/couchdb endif @echo "... done" @@ -511,7 +511,7 @@ clean: @rm -rf src/couch_dist/certs/out @rm -rf src/docs/build src/docs/.venv ifeq ($(with_nouveau), true) - @cd nouveau && $(GRADLE) clean + @cd extra/nouveau && $(GRADLE) clean endif @@ -576,12 +576,12 @@ derived: # Nouveau ################################################################################ -.PHONY: nouveau +.PHONY: extra/nouveau # target: nouveau - Build nouveau -nouveau: +extra/nouveau: ifeq ($(with_nouveau), true) - @cd nouveau && $(GRADLE) spotlessApply - @cd nouveau && $(GRADLE) build -x test + @cd extra/nouveau && $(GRADLE) spotlessApply + @cd extra/nouveau && $(GRADLE) build -x test endif .PHONY: nouveau-test @@ -589,15 +589,15 @@ endif nouveau-test: nouveau-test-gradle nouveau-test-elixir .PHONY: nouveau-test-gradle -nouveau-test-gradle: couch-core nouveau +nouveau-test-gradle: couch-core extra/nouveau ifeq ($(with_nouveau), true) - @cd nouveau && $(GRADLE) test --info --rerun + @cd extra/nouveau && $(GRADLE) test --info --rerun endif .PHONY: nouveau-test-elixir nouveau-test-elixir: export MIX_ENV=integration nouveau-test-elixir: elixir-init devclean -nouveau-test-elixir: couch-core nouveau +nouveau-test-elixir: couch-core extra/nouveau ifeq ($(with_nouveau), true) @dev/run "$(TEST_OPTS)" -n 1 -q -a adm:pass --with-nouveau \ --locald-config test/config/test-config.ini \ diff --git a/dev/run b/dev/run index 640d15d22f..c58b8a7cf2 100755 --- a/dev/run +++ b/dev/run @@ -546,7 +546,7 @@ def boot_nouveau(ctx): config = os.path.join(ctx["devdir"], "lib", "nouveau.yaml") gradle = "gradlew.bat" if os.name == "nt" else "gradlew" cmd = [ - os.path.join(ctx["rootdir"], "nouveau", gradle), + os.path.join(ctx["rootdir"], "extra", "nouveau", gradle), "run", "--args", f"server '{config}'", @@ -555,7 +555,7 @@ def boot_nouveau(ctx): log = open(logfname, "w") return sp.Popen( cmd, - cwd=os.path.join(ctx["rootdir"], "nouveau"), + cwd=os.path.join(ctx["rootdir"], "extra", "nouveau"), stdin=sp.PIPE, stdout=log, stderr=sp.STDOUT, diff --git a/nouveau/.gitignore b/extra/nouveau/.gitignore similarity index 100% rename from nouveau/.gitignore rename to extra/nouveau/.gitignore diff --git a/nouveau/LICENSE b/extra/nouveau/LICENSE similarity index 100% rename from nouveau/LICENSE rename to extra/nouveau/LICENSE diff --git a/nouveau/README.md b/extra/nouveau/README.md similarity index 100% rename from nouveau/README.md rename to extra/nouveau/README.md diff --git a/nouveau/TODO b/extra/nouveau/TODO similarity index 100% rename from nouveau/TODO rename to extra/nouveau/TODO diff --git a/nouveau/build.gradle b/extra/nouveau/build.gradle similarity index 100% rename from nouveau/build.gradle rename to extra/nouveau/build.gradle diff --git a/nouveau/gradle/wrapper/gradle-wrapper.jar b/extra/nouveau/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from nouveau/gradle/wrapper/gradle-wrapper.jar rename to extra/nouveau/gradle/wrapper/gradle-wrapper.jar diff --git a/nouveau/gradle/wrapper/gradle-wrapper.properties b/extra/nouveau/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from nouveau/gradle/wrapper/gradle-wrapper.properties rename to extra/nouveau/gradle/wrapper/gradle-wrapper.properties diff --git a/nouveau/gradlew b/extra/nouveau/gradlew similarity index 100% rename from nouveau/gradlew rename to extra/nouveau/gradlew diff --git a/nouveau/gradlew.bat b/extra/nouveau/gradlew.bat similarity index 96% rename from nouveau/gradlew.bat rename to extra/nouveau/gradlew.bat index 25da30dbde..7101f8e467 100644 --- a/nouveau/gradlew.bat +++ b/extra/nouveau/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/nouveau/settings.gradle b/extra/nouveau/settings.gradle similarity index 100% rename from nouveau/settings.gradle rename to extra/nouveau/settings.gradle diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeResponse.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeResponse.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeResponse.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeResponse.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentDeleteRequest.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DocumentUpdateRequest.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleRange.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleRange.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleRange.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleRange.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Ok.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Ok.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/Ok.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Ok.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Range.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Range.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/Range.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Range.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchRequest.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchRequest.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchRequest.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchRequest.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IOUtils.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IOUtils.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/IOUtils.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IOUtils.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexFunction.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexFunction.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexFunction.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexFunction.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/StaleIndexException.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/StaleIndexException.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/StaleIndexException.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/StaleIndexException.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/StripedLock.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/StripedLock.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/StripedLock.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/StripedLock.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/UpdatesOutOfOrderException.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/UpdatesOutOfOrderException.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/UpdatesOutOfOrderException.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/UpdatesOutOfOrderException.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/UserAgentFilter.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/UserAgentFilter.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/UserAgentFilter.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/UserAgentFilter.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/ByteArrayWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/ByteArrayWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/ByteArrayWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/ByteArrayWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/DoubleWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/DoubleWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/DoubleWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/DoubleWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/FloatWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/FloatWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/FloatWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/FloatWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/IntWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/IntWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/IntWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/IntWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/LongWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/LongWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/LongWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/LongWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/NullWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/NullWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/NullWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/NullWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/PrimitiveWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/PrimitiveWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/PrimitiveWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/PrimitiveWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/StringWrapper.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/StringWrapper.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/StringWrapper.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/ser/StringWrapper.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexHealthCheck.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexHealthCheck.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexHealthCheck.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexHealthCheck.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexSchema.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexSchema.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexSchema.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexSchema.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/AnalyzeResource.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/AnalyzeResource.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/resources/AnalyzeResource.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/AnalyzeResource.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/tasks/CloseAllIndexesTask.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/tasks/CloseAllIndexesTask.java similarity index 100% rename from nouveau/src/main/java/org/apache/couchdb/nouveau/tasks/CloseAllIndexesTask.java rename to extra/nouveau/src/main/java/org/apache/couchdb/nouveau/tasks/CloseAllIndexesTask.java diff --git a/nouveau/src/main/resources/banner.txt b/extra/nouveau/src/main/resources/banner.txt similarity index 100% rename from nouveau/src/main/resources/banner.txt rename to extra/nouveau/src/main/resources/banner.txt diff --git a/nouveau/src/main/resources/openapi.yaml b/extra/nouveau/src/main/resources/openapi.yaml similarity index 100% rename from nouveau/src/main/resources/openapi.yaml rename to extra/nouveau/src/main/resources/openapi.yaml diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/api/SearchRequestTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/api/SearchRequestTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/api/SearchRequestTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/api/SearchRequestTest.java diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheckTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheckTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheckTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheckTest.java diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactoryTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactoryTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactoryTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactoryTest.java diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexTest.java diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParserTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParserTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParserTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParserTest.java diff --git a/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/QuerySerializationTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/QuerySerializationTest.java similarity index 100% rename from nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/QuerySerializationTest.java rename to extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene9/QuerySerializationTest.java diff --git a/nouveau/src/test/resources/fixtures/DocumentUpdateRequest.json b/extra/nouveau/src/test/resources/fixtures/DocumentUpdateRequest.json similarity index 100% rename from nouveau/src/test/resources/fixtures/DocumentUpdateRequest.json rename to extra/nouveau/src/test/resources/fixtures/DocumentUpdateRequest.json diff --git a/nouveau/src/test/resources/fixtures/SearchRequest.json b/extra/nouveau/src/test/resources/fixtures/SearchRequest.json similarity index 100% rename from nouveau/src/test/resources/fixtures/SearchRequest.json rename to extra/nouveau/src/test/resources/fixtures/SearchRequest.json From b808bf56080ee679fa70d21a2fccc3fa1760bcd5 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 10:33:59 +0100 Subject: [PATCH 04/10] doc: explain parallel make feature --- README-DEV.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README-DEV.rst b/README-DEV.rst index a2eec4b44f..6726db0055 100644 --- a/README-DEV.rst +++ b/README-DEV.rst @@ -223,6 +223,22 @@ to specify exact ``rebar eunit`` options:: make eunit EUNIT_OPTS="apps=couch,chttpd" +Running Erlang tests in Parallel +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you have GNU make (`gmake`) installed, you can supply a `-jN` parameter to +run as many jobs in parallel. To avoid clobbering output, use the +`--output-sync` option. + + gmake eunit -j2 --output-sync=target + +This runs two test modules in parallel at a time. On a machine with two or more +CPUs, this should reduce the total wall clock time of testing to up to one half. + +Higher `N` might also work, but the test suite is still undergoing hardening to +support full parallelism, so spurious errors that do not occur with `-j1` might +show up. + Elixir Integration Tests ~~~~~~~~~~~~~~~~~~~~~~~~ From f414e99de163cefaea59f8c956f7e70e91909501 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 10:37:28 +0100 Subject: [PATCH 05/10] chore: simplify test setup calls --- src/chttpd/src/chttpd_test_util.erl | 2 +- src/ddoc_cache/test/eunit/ddoc_cache_tutil.erl | 2 +- src/mem3/test/eunit/mem3_reshard_changes_feed_test.erl | 2 +- src/mem3/test/eunit/mem3_reshard_test.erl | 2 +- src/mem3/test/eunit/mem3_shards_test.erl | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/chttpd/src/chttpd_test_util.erl b/src/chttpd/src/chttpd_test_util.erl index 8a849acda1..43bb72cf68 100644 --- a/src/chttpd/src/chttpd_test_util.erl +++ b/src/chttpd/src/chttpd_test_util.erl @@ -17,7 +17,7 @@ -include_lib("couch/include/couch_eunit.hrl"). start_couch() -> - start_couch(?CONFIG_CHAIN). + test_util:start_couch([chttpd]). start_couch(IniFiles) -> test_util:start_couch(IniFiles, [chttpd]). diff --git a/src/ddoc_cache/test/eunit/ddoc_cache_tutil.erl b/src/ddoc_cache/test/eunit/ddoc_cache_tutil.erl index 5e2efbffac..7a860b1456 100644 --- a/src/ddoc_cache/test/eunit/ddoc_cache_tutil.erl +++ b/src/ddoc_cache/test/eunit/ddoc_cache_tutil.erl @@ -32,7 +32,7 @@ start_couch() -> start_couch(Options) -> WriteDDocs = couch_util:get_value(write_ddocs, Options, true), purge_modules(), - Ctx = test_util:start_couch(?CONFIG_CHAIN, [chttpd, ddoc_cache]), + Ctx = test_util:start_couch([chttpd, ddoc_cache]), TmpDb = ?tempdb(), ok = fabric:create_db(TmpDb, [{q, "1"}, {n, "1"}]), if diff --git a/src/mem3/test/eunit/mem3_reshard_changes_feed_test.erl b/src/mem3/test/eunit/mem3_reshard_changes_feed_test.erl index 140b376358..799c0721fe 100644 --- a/src/mem3/test/eunit/mem3_reshard_changes_feed_test.erl +++ b/src/mem3/test/eunit/mem3_reshard_changes_feed_test.erl @@ -37,7 +37,7 @@ teardown(#{} = Dbs) -> maps:map(fun(_, Db) -> delete_db(Db) end, Dbs). start_couch() -> - test_util:start_couch(?CONFIG_CHAIN, [mem3, fabric]). + test_util:start_couch([mem3, fabric]). stop_couch(Ctx) -> test_util:stop_couch(Ctx). diff --git a/src/mem3/test/eunit/mem3_reshard_test.erl b/src/mem3/test/eunit/mem3_reshard_test.erl index ec369bfe82..839e7b2931 100644 --- a/src/mem3/test/eunit/mem3_reshard_test.erl +++ b/src/mem3/test/eunit/mem3_reshard_test.erl @@ -39,7 +39,7 @@ teardown(#{} = Dbs) -> meck:unload(). start_couch() -> - test_util:start_couch(?CONFIG_CHAIN, [mem3, fabric]). + test_util:start_couch([mem3, fabric]). stop_couch(Ctx) -> test_util:stop_couch(Ctx). diff --git a/src/mem3/test/eunit/mem3_shards_test.erl b/src/mem3/test/eunit/mem3_shards_test.erl index 14f4bc0846..c853dc4d08 100644 --- a/src/mem3/test/eunit/mem3_shards_test.erl +++ b/src/mem3/test/eunit/mem3_shards_test.erl @@ -32,7 +32,7 @@ teardown(#{dbname := DbName}) -> delete_db(DbName). start_couch() -> - test_util:start_couch(?CONFIG_CHAIN, [mem3, fabric]). + test_util:start_couch([mem3, fabric]). stop_couch(Ctx) -> test_util:stop_couch(Ctx). From 01afb59a1c9c98effd490185c7577646a6c06867 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 10:38:30 +0100 Subject: [PATCH 06/10] feat: make fabric test setup more reliable by just asserting the deletion of a shards db --- src/fabric/test/eunit/fabric_tests.erl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/fabric/test/eunit/fabric_tests.erl b/src/fabric/test/eunit/fabric_tests.erl index 77327f4458..63a55ff9a2 100644 --- a/src/fabric/test/eunit/fabric_tests.erl +++ b/src/fabric/test/eunit/fabric_tests.erl @@ -386,7 +386,10 @@ delete_dbs(DbList) -> setup_fabric() -> Ctx = test_util:start_couch([fabric]), - ok = clear_shards_db(), + ok = case clear_shards_db() of + ok -> ok; + not_found -> ok + end, Ctx. teardown_fabric(Ctx) -> From e6efff60b87f8a748bee92eaaddb8ca20c27569b Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 10:38:43 +0100 Subject: [PATCH 07/10] feat: allow parallel execution of eunit tests This is achived by configuring each couch_server launched with separate etc, data and log directories. These directories are cleaned up after successful test runs. --- src/couch/src/test_util.erl | 48 +++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/src/couch/src/test_util.erl b/src/couch/src/test_util.erl index b8001840fb..eb22217286 100644 --- a/src/couch/src/test_util.erl +++ b/src/couch/src/test_util.erl @@ -44,7 +44,7 @@ -include("couch_db_int.hrl"). -include("couch_bt_engine.hrl"). --record(test_context, {mocked = [], started = [], module}). +-record(test_context, {mocked = [], started = [], module, dir}). -define(DEFAULT_APPS, [inets, ibrowse, ssl, config, couch_epi, couch_event, couch]). @@ -81,21 +81,58 @@ start_couch() -> start_couch(ExtraApps) -> start_couch(?CONFIG_CHAIN, ExtraApps). +% This function starts CouchDB with optional extra apps in a dedicated +% directory under tmp/couchdb-tests// — That is, all instances +% run isolated so that if more than one runs at a time, it does not +% interfere with any of the others. +% The sub-directories here are etc/ log/ and data/ for configuration +% logs and databases and view indexes respectively. +% The function copies the initial bespoke test-ini files to the new +% random directory and configures CouchDB to use those. +% The two pieces of state created here are the random dir in the file system and +% the process env var {config, ini_files} that is read by couch_config on +% startup. These need to be reset at the right points in time. +% the random dir is deleted and the env var reset when CouchDB is stopped. +% Note: there is currently a case where stop_couch/0 could be called and +% the file system cleanup can’t be run because we don’t get passed the test +% context with the random directory value. At the moment stop_couch/0 is not +% used anywhere, tho. Maybe we should remove it? start_couch(IniFiles, ExtraApps) -> + RandomDir = filename:join([builddir(), "tmp", "couchdb-tests", couch_uuids:random()]), + RandomEtcDir = filename:join([RandomDir, "etc"]), + RandomDataDir = ?b2l(filename:join([RandomDir, "data"])), + RandomLogFile = ?b2l(filename:join([RandomDir, "log", "couch.log"])), + + ok = filelib:ensure_path(RandomDir), + ok = filelib:ensure_path(RandomEtcDir), + ok = filelib:ensure_path(RandomDataDir), + ok = filelib:ensure_dir(RandomLogFile), + + RandomIniFiles = lists:map(fun(SourceFile) -> + TargetFileName = lists:last(filename:split(SourceFile)), + TargetFile = filename:join([RandomEtcDir, TargetFileName]), + {ok, _} = file:copy(SourceFile, TargetFile), + ?b2l(TargetFile) + end, IniFiles), load_applications_with_stats(), - ok = application:set_env(config, ini_files, IniFiles), + ok = application:set_env(config, ini_files, RandomIniFiles), Apps = start_applications(?DEFAULT_APPS ++ ExtraApps), + + ok = config:set("couchdb", "database_dir", RandomDataDir, false), + ok = config:set("couchdb", "view_index_dir", RandomDataDir, false), + ok = config:set("log", "file", RandomLogFile, false), ok = config:delete("compactions", "_default", false), - #test_context{started = Apps}. + #test_context{started = Apps, dir = RandomDir}. stop_couch() -> ok = stop_applications(?DEFAULT_APPS). -stop_couch(#test_context{started = Apps}) -> +stop_couch(#test_context{started = Apps, dir = RandomDir }) -> + file:del_dir_r(RandomDir), stop_applications(Apps); + stop_couch(_) -> stop_couch(). - with_couch_server_restart(Fun) -> Servers = couch_server:names(), test_util:with_processes_restart(Servers, Fun). @@ -125,6 +162,7 @@ start_applications([App | Apps], Acc) -> stop_applications(Apps) -> [application:stop(App) || App <- lists:reverse(Apps)], + ok = application:unset_env(config, ini_files), ok. start_config(Chain) -> From 0473e0fed406f5ecc2527cdeee96d589ffd13d83 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Thu, 4 Dec 2025 15:11:29 +0100 Subject: [PATCH 08/10] chore: lint --- src/couch/src/test_util.erl | 18 ++++++++++-------- src/fabric/test/eunit/fabric_tests.erl | 9 +++++---- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/couch/src/test_util.erl b/src/couch/src/test_util.erl index eb22217286..4b3e63ad33 100644 --- a/src/couch/src/test_util.erl +++ b/src/couch/src/test_util.erl @@ -108,12 +108,15 @@ start_couch(IniFiles, ExtraApps) -> ok = filelib:ensure_path(RandomDataDir), ok = filelib:ensure_dir(RandomLogFile), - RandomIniFiles = lists:map(fun(SourceFile) -> - TargetFileName = lists:last(filename:split(SourceFile)), - TargetFile = filename:join([RandomEtcDir, TargetFileName]), - {ok, _} = file:copy(SourceFile, TargetFile), - ?b2l(TargetFile) - end, IniFiles), + RandomIniFiles = lists:map( + fun(SourceFile) -> + TargetFileName = lists:last(filename:split(SourceFile)), + TargetFile = filename:join([RandomEtcDir, TargetFileName]), + {ok, _} = file:copy(SourceFile, TargetFile), + ?b2l(TargetFile) + end, + IniFiles + ), load_applications_with_stats(), ok = application:set_env(config, ini_files, RandomIniFiles), Apps = start_applications(?DEFAULT_APPS ++ ExtraApps), @@ -127,10 +130,9 @@ start_couch(IniFiles, ExtraApps) -> stop_couch() -> ok = stop_applications(?DEFAULT_APPS). -stop_couch(#test_context{started = Apps, dir = RandomDir }) -> +stop_couch(#test_context{started = Apps, dir = RandomDir}) -> file:del_dir_r(RandomDir), stop_applications(Apps); - stop_couch(_) -> stop_couch(). with_couch_server_restart(Fun) -> diff --git a/src/fabric/test/eunit/fabric_tests.erl b/src/fabric/test/eunit/fabric_tests.erl index 63a55ff9a2..c092f44735 100644 --- a/src/fabric/test/eunit/fabric_tests.erl +++ b/src/fabric/test/eunit/fabric_tests.erl @@ -386,10 +386,11 @@ delete_dbs(DbList) -> setup_fabric() -> Ctx = test_util:start_couch([fabric]), - ok = case clear_shards_db() of - ok -> ok; - not_found -> ok - end, + ok = + case clear_shards_db() of + ok -> ok; + not_found -> ok + end, Ctx. teardown_fabric(Ctx) -> From ca78cf0c8bc16dd5a8893bb86ea330178f9fa918 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Fri, 5 Dec 2025 16:45:06 +0100 Subject: [PATCH 09/10] test: raise ulimit -n for tests go 20480, c.f. macOS --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 947371e3c6..8bdc05381b 100644 --- a/Makefile +++ b/Makefile @@ -158,6 +158,7 @@ escriptize: couch-core .PHONY: check # target: check - Test everything +check: ulimit -n 20480 check: all @$(MAKE) xref @$(MAKE) eunit From 85709990f2c806d9abe686f00827c9ff8bfe6cbb Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Sat, 6 Dec 2025 11:00:29 +0100 Subject: [PATCH 10/10] feat: allow parallel running of some make check sub-targets --- Makefile | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 8bdc05381b..22e2c77e0a 100644 --- a/Makefile +++ b/Makefile @@ -155,18 +155,12 @@ escriptize: couch-core # Testing ################################################################################ - -.PHONY: check +CHECKS="xref elixir eunit elixir-search weatherreport-test nouveau-test" +.PHONY: check $(CHECKS) # target: check - Test everything -check: ulimit -n 20480 -check: all - @$(MAKE) xref - @$(MAKE) eunit - @$(MAKE) mango-test - @$(MAKE) elixir - @$(MAKE) elixir-search - @$(MAKE) weatherreport-test - @$(MAKE) nouveau-test +check: all $(CHECKS) + @${MAKE} mango-test + @${MAKE} nouveau-test ifdef apps SUBDIRS = $(apps)