Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test #339

Closed
wants to merge 68 commits into from
Closed

test #339

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
9992a5e
Import LevelDB
flowbehappy Mar 6, 2019
783e07b
DeltaMerge Engine POC
flowbehappy Jan 30, 2019
ea34ed2
add delta merge engine test (#18)
lidezhu Apr 4, 2019
87bca17
Add junction for concurrent hash map
flowbehappy Apr 3, 2019
13e1020
DeltaMerge Storage Engine implementation
flowbehappy Jun 14, 2019
e8e6e13
done DM integration with query layer
flowbehappy May 24, 2019
c86350d
Auto gc dm data
flowbehappy May 24, 2019
6d59553
DiskValueSpace: read page by iterator
flowbehappy Jun 14, 2019
4e4f3e1
parallelize segment input stream creation
flowbehappy May 29, 2019
58fcd61
Using DB::DM namespace
flowbehappy Jun 4, 2019
17c2ced
Bug fix: remove INVALID
flowbehappy Jun 6, 2019
ff39a6c
Log operations and add status
flowbehappy Jun 6, 2019
968b6dd
bug fix: placed_delta_rows -> placed_delta_deletes
flowbehappy Jun 6, 2019
bd64b70
Add check to DeltaMerge Storage
flowbehappy Jun 10, 2019
4ef6073
Remove useless code
flowbehappy Jun 10, 2019
60b9d60
Remove pk_columns cache in delta, and bug fix
flowbehappy Jun 11, 2019
4493d95
Bug fix: out of bound exception in DiskValueSpace#read
flowbehappy Jun 11, 2019
678a47e
Remove useless commented code
flowbehappy Jun 12, 2019
466acd6
[FLASH-290] Test cases for DeltaMerge and Gen code coverage report (#82)
JaySon-Huang Jun 14, 2019
abc84d8
Page storage bug fix (#87)
JaySon-Huang Jun 24, 2019
83f505b
[FLASH-318/319/343/344] PageStorage: RefPages, MVCC && Snapshot read …
JaySon-Huang Aug 2, 2019
0e1de61
[DM] Support range read and lock optimization (#140)
flowbehappy Aug 5, 2019
277641a
[FLASH-406] CI run gtest cases (#163)
JaySon-Huang Aug 8, 2019
c8f0112
fix gtest compile error
JaySon-Huang Aug 5, 2019
8a2ccc6
fix bug: PageEntriesVersionSetWithDelta::compactDeltaAndBase should N…
JaySon-Huang Aug 14, 2019
d0f3495
temporary disable some tests for DM (#184)
JaySon-Huang Aug 16, 2019
221387a
Small fix for gtests after rebase to master
JaySon-Huang Aug 26, 2019
ac4165f
Atomic read/write on DeltaMergeStore level (#172)
flowbehappy Aug 27, 2019
0ff12ed
[FLASH-386] DeltaMerge DDL support (#190)
JaySon-Huang Aug 28, 2019
e60b3d3
[FLASH-455] Remove level db dependency (#206)
marsishandsome Aug 28, 2019
8f2a5f5
[FLASH-466] improve code coverage (#219)
marsishandsome Sep 6, 2019
fa5bc51
DM: support rough index in Storage level. (#233)
flowbehappy Sep 12, 2019
a36a2b3
[FLASH-461/471] Basic read/write StorageDeltaMerge's table through Ra…
JaySon-Huang Sep 12, 2019
60e6856
fix compile error
flowbehappy Sep 16, 2019
5e82056
[FLASH-469/452/462] DM: Rename column, read with specify tso, schema-…
JaySon-Huang Sep 18, 2019
0d6d19a
[FLASH-409] Fix page not found exception (#238)
flowbehappy Sep 19, 2019
f0f9197
fix bug: RefPage of PageEntriesVersionSetWithDelta (#246)
JaySon-Huang Sep 24, 2019
d5ceccf
[FLASH-470/516] DM learner read and check gc safe point (#249)
JaySon-Huang Sep 26, 2019
f2875a5
[FLASH-426] Eliminate data copy of Segment split/merge (#258)
flowbehappy Sep 27, 2019
7d6c7d3
Binary compatibility version for DeltaMerge's chunk; Fix disappear of…
JaySon-Huang Sep 27, 2019
1007394
[FLASH-528] Fix PageStorage error: Directory not empty (#263)
JaySon-Huang Sep 30, 2019
98d3d1b
[FLASH-541] Read ranges indicated by mvcc_query_info (#267)
JaySon-Huang Oct 11, 2019
43d0037
[FLASH-546] Fix exception after reload PageStorage from disk (#274)
JaySon-Huang Oct 12, 2019
a0773cd
[FLASH-296] [DM] Use Background Threads To Run Delta Merge Operations…
flowbehappy Oct 19, 2019
b5df908
Bug fix: placeUpsert offset is not right. Also copy the cache when me…
flowbehappy Oct 21, 2019
553b8dd
Bug fix: Segment#split could use out of range split point.
flowbehappy Oct 21, 2019
435ed78
[FLASH-544]Add test cases for DM (#262)
leiysky Oct 22, 2019
7879cfe
[FLASH-548/579] Engine DeltaMerge coprocessor integration (#287)
JaySon-Huang Oct 23, 2019
73f1fe7
fix compile error after rebase
JaySon-Huang Oct 23, 2019
5d9798e
[FLASH-453]Support default value of CAST expression (#286)
leiysky Oct 29, 2019
c5d3482
[FLASH-575] Improve the performance of stream operations in DM (#296)
flowbehappy Oct 30, 2019
680c5ff
[Flash-600] PageStorage GC only remove obsoleted data (#297)
JaySon-Huang Oct 30, 2019
cd50d94
fix bug: init of variables
JaySon-Huang Oct 30, 2019
86489a4
[FLASH-629] Add concurrency for wait index while doing learner read (…
JaySon-Huang Nov 12, 2019
eb741e8
[FLASH-549/550/626] Remove obsoleted data in Engine DeltaMerge (#292)
JaySon-Huang Nov 12, 2019
99008ed
[FLASH-463]Flush regions into DM as soon as raft commands processed (…
leiysky Nov 12, 2019
30fd832
[FLASH-654] Add gc callback for PageStorage (#319)
JaySon-Huang Nov 12, 2019
7bc6612
[FLASH-660] Check region version while doing learner read (#321)
JaySon-Huang Nov 20, 2019
514801c
Enhance PageStorage gc (#325)
JaySon-Huang Nov 20, 2019
58283b5
Fix non-global-context exception while running unit test
JaySon-Huang Nov 22, 2019
d64370b
[FLASH-617] Make cast when applying DDL (#328)
leiysky Nov 25, 2019
48a2cd6
[FLASH-668/477] Predicator push down (#329)
JaySon-Huang Nov 26, 2019
fac6098
add ReorganizeBlockInputStream for reorganize the boundary of blocks …
JaySon-Huang Nov 27, 2019
4da2f8a
[FLASH-622] DMFile implementation (#327)
flowbehappy Nov 27, 2019
55e71a9
Add DMCleanReadRows event and adjust log level
flowbehappy Nov 28, 2019
9838315
Try do range filter in DeltaValueSpace
flowbehappy Nov 28, 2019
c53eb14
[FLASH-736] Illegal delta data, the next row is expected larger than …
flowbehappy Nov 29, 2019
1076984
Enable rough set index in DMFile when data type is not Handle
flowbehappy Nov 30, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,9 @@ config-preprocessed.xml
*.pb.cpp
*.pb.h

# Mac OS
.DS_Store

# Ignore symlink to private repository
/private

Expand All @@ -245,3 +248,6 @@ tests/docker/log
tests/fullstack-test/dml/dml_gen/*
tests/mutable-test/mutable_dedup/skipping.visual.test/*
tests/mutable-test/mutable_dedup/small_parts.visual.test/*

CoverageReport

3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,6 @@
[submodule "contrib/client-c"]
path = contrib/client-c
url = git@github.com:tikv/client-c.git
[submodule "contrib/junction"]
path = contrib/junction
url = https://github.com/preshing/junction.git
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,10 @@ if (USE_INCLUDE_WHAT_YOU_USE)
endif ()

# Flags for test coverage
if (TEST_COVERAGE)
if (TEST_COVERAGE AND CMAKE_BUILD_TYPE STREQUAL "Debug")
include(CodeCoverage)
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -DIS_DEBUG")
endif (TEST_COVERAGE)
endif ()

if (ENABLE_TESTS)
message (STATUS "Tests are enabled")
Expand Down
309 changes: 309 additions & 0 deletions cmake/Modules/CodeCoverage.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,309 @@
# Copyright (c) 2012 - 2017, Lars Bilke
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# CHANGES:
#
# 2012-01-31, Lars Bilke
# - Enable Code Coverage
#
# 2013-09-17, Joakim Söderberg
# - Added support for Clang.
# - Some additional usage instructions.
#
# 2016-02-03, Lars Bilke
# - Refactored functions to use named parameters
#
# 2017-06-02, Lars Bilke
# - Merged with modified version from github.com/ufz/ogs
#
#
# USAGE:
#
# 1. Copy this file into your cmake modules path.
#
# 2. Add the following line to your CMakeLists.txt:
# include(CodeCoverage)
#
# 3. Append necessary compiler flags:
# APPEND_COVERAGE_COMPILER_FLAGS()
#
# 4. If you need to exclude additional directories from the report, specify them
# using the COVERAGE_LCOV_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE_LCOV.
# Example:
# set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*')
#
# 5. Use the functions described below to create a custom make target which
# runs your test executable and produces a code coverage report.
#
# 6. Build a Debug build:
# cmake -DCMAKE_BUILD_TYPE=Debug ..
# make
# make my_coverage_target
#

include(CMakeParseArguments)

# Check prereqs
find_program( GCOV_PATH gcov )
find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl)
find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat )
find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test)
find_program( SIMPLE_PYTHON_EXECUTABLE python )

if(NOT GCOV_PATH)
message(FATAL_ERROR "gcov not found! Aborting...")
endif() # NOT GCOV_PATH

if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
endif()
elseif(NOT CMAKE_COMPILER_IS_GNUCXX)
message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
endif()

set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage"
CACHE INTERNAL "")

set(CMAKE_CXX_FLAGS_COVERAGE
${COVERAGE_COMPILER_FLAGS}
CACHE STRING "Flags used by the C++ compiler during coverage builds."
FORCE )
set(CMAKE_C_FLAGS_COVERAGE
${COVERAGE_COMPILER_FLAGS}
CACHE STRING "Flags used by the C compiler during coverage builds."
FORCE )
set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
""
CACHE STRING "Flags used for linking binaries during coverage builds."
FORCE )
set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
""
CACHE STRING "Flags used by the shared libraries linker during coverage builds."
FORCE )
mark_as_advanced(
CMAKE_CXX_FLAGS_COVERAGE
CMAKE_C_FLAGS_COVERAGE
CMAKE_EXE_LINKER_FLAGS_COVERAGE
CMAKE_SHARED_LINKER_FLAGS_COVERAGE )

if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading. Build Type: ${CMAKE_BUILD_TYPE}")
endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"

if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
link_libraries(gcov)
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
endif()

# Defines a target for running and collection code coverage information
# Builds dependencies, runs the given executable and outputs reports.
# NOTE! The executable should always have a ZERO as exit code otherwise
# the coverage generation will not complete.
#
# SETUP_TARGET_FOR_COVERAGE_LCOV(
# NAME testrunner_coverage # New target name
# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
# DEPENDENCIES testrunner # Dependencies to build first
# )
function(SETUP_TARGET_FOR_COVERAGE_LCOV)

set(options NONE)
set(oneValueArgs NAME)
set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

if(NOT LCOV_PATH)
message(FATAL_ERROR "lcov not found! Aborting...")
endif() # NOT LCOV_PATH

if(NOT GENHTML_PATH)
message(FATAL_ERROR "genhtml not found! Aborting...")
endif() # NOT GENHTML_PATH

# Setup target
add_custom_target(${Coverage_NAME}

# Cleanup lcov
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -directory . --zerocounters
# Create baseline to make sure untouched files show up in the report
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -c -i -d . -o ${Coverage_NAME}.base

# Run tests
COMMAND ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS}

# Capturing lcov counters and generating report
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info --rc lcov_branch_coverage=1
# add baseline counters
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base -a ${Coverage_NAME}.info --output-file ${Coverage_NAME}.total --rc lcov_branch_coverage=1
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --remove ${Coverage_NAME}.total ${COVERAGE_LCOV_EXCLUDES} --output-file ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned --rc lcov_branch_coverage=1
COMMAND ${GENHTML_PATH} --branch-coverage --demangle-cpp -o ${PROJECT_SOURCE_DIR}/CoverageReport/${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned
COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.base ${Coverage_NAME}.total ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned

WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${Coverage_DEPENDENCIES}
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
)

# Show where to find the lcov info report
add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
COMMAND ;
COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info."
)

# Show info where to find the report
add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
COMMAND ;
COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
)

endfunction() # SETUP_TARGET_FOR_COVERAGE_LCOV

# Defines a target for running and collection code coverage information
# Builds dependencies, runs the given executable and outputs reports.
# NOTE! The executable should always have a ZERO as exit code otherwise
# the coverage generation will not complete.
#
# SETUP_TARGET_FOR_COVERAGE_GCOVR_XML(
# NAME ctest_coverage # New target name
# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
# DEPENDENCIES executable_target # Dependencies to build first
# )
function(SETUP_TARGET_FOR_COVERAGE_GCOVR_XML)

set(options NONE)
set(oneValueArgs NAME)
set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

if(NOT SIMPLE_PYTHON_EXECUTABLE)
message(FATAL_ERROR "python not found! Aborting...")
endif() # NOT SIMPLE_PYTHON_EXECUTABLE

if(NOT GCOVR_PATH)
message(FATAL_ERROR "gcovr not found! Aborting...")
endif() # NOT GCOVR_PATH

# Combine excludes to several -e arguments
set(GCOVR_EXCLUDES "")
foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES})
list(APPEND GCOVR_EXCLUDES "-e")
list(APPEND GCOVR_EXCLUDES "${EXCLUDE}")
endforeach()

add_custom_target(${Coverage_NAME}
# Run tests
${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS}

# Running gcovr
COMMAND ${GCOVR_PATH} --xml
-r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES}
--object-directory=${PROJECT_BINARY_DIR}
-o ${Coverage_NAME}.xml
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${Coverage_DEPENDENCIES}
COMMENT "Running gcovr to produce Cobertura code coverage report."
)

# Show info where to find the report
add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
COMMAND ;
COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml."
)

endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_XML

# Defines a target for running and collection code coverage information
# Builds dependencies, runs the given executable and outputs reports.
# NOTE! The executable should always have a ZERO as exit code otherwise
# the coverage generation will not complete.
#
# SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML(
# NAME ctest_coverage # New target name
# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
# DEPENDENCIES executable_target # Dependencies to build first
# )
function(SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML)

set(options NONE)
set(oneValueArgs NAME)
set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

if(NOT SIMPLE_PYTHON_EXECUTABLE)
message(FATAL_ERROR "python not found! Aborting...")
endif() # NOT SIMPLE_PYTHON_EXECUTABLE

if(NOT GCOVR_PATH)
message(FATAL_ERROR "gcovr not found! Aborting...")
endif() # NOT GCOVR_PATH

# Combine excludes to several -e arguments
set(GCOVR_EXCLUDES "")
foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES})
list(APPEND GCOVR_EXCLUDES "-e")
list(APPEND GCOVR_EXCLUDES "${EXCLUDE}")
#string(CONCAT GCOVR_EXCLUDES "${GCOVR_EXCLUDES} -e ${EXCLUDE} ")
endforeach()
message(STATUS "Gcovr excludes: ${GCOVR_EXCLUDES}")

add_custom_target(${Coverage_NAME}
# Run tests
${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS}

# Create folder
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/CoverageReport/${Coverage_NAME}

COMMAND echo "Generating coverage report, please wait a few minutes"
# Running gcovr
COMMAND ${GCOVR_PATH} --html --html-details
-r ${PROJECT_SOURCE_DIR}
--object-directory=${PROJECT_BINARY_DIR}
-o ${PROJECT_SOURCE_DIR}/CoverageReport/${Coverage_NAME}/index.html
${GCOVR_EXCLUDES}
-j 4 -s

WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS ${Coverage_DEPENDENCIES}
COMMENT "Running gcovr to produce HTML code coverage report."
)

# Show info where to find the report
add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
COMMAND ;
COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
)

endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML

function(APPEND_COVERAGE_COMPILER_FLAGS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}")
endfunction() # APPEND_COVERAGE_COMPILER_FLAGS
1 change: 1 addition & 0 deletions contrib/junction
Submodule junction added at 5ad3be
Loading