rework formatting with cmake-format (#4627)

* merge clangify and cmakify into format.sh

update desktop lint workflow to 22.04

print cmake-format version as well

um, rename things?

add extra examples to format.sh --help
add option to not run clang-format
fix version display in .ci/lint_cpp.sh
fix relative paths in format.sh

fix formatting dirs

* run ./format.sh --cmake --branch ""

* revert formatting of cmake comments
This commit is contained in:
ebbit1q 2022-06-09 03:14:26 +02:00 committed by GitHub
parent b79506fbcf
commit 28aa473362
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 238 additions and 136 deletions

View file

@ -10,10 +10,10 @@ if ! git merge-base origin/master HEAD; then
git fetch --unshallow
fi
# Check formatting using clangify
echo "Checking your code using clang-format..."
# Check formatting using format.sh
echo "Checking your code using clang-format/cmake-format..."
diff="$(./clangify.sh --diff --cf-version --branch origin/master)"
diff="$(./format.sh --diff --cmake --cf-version --branch origin/master)"
err=$?
case $err in
@ -24,7 +24,7 @@ case $err in
*** ***
*** Your code does not comply with our style guide. ***
*** ***
*** Please correct it or run the "clangify.sh" script. ***
*** Please correct it or run the "format.sh" script. ***
*** Then commit and push those changes to this branch. ***
*** Check our CONTRIBUTING.md file for more details. ***
*** ***
@ -32,12 +32,14 @@ case $err in
*** ***
***********************************************************
Used clang-format version:
Used version:
${diff%%
----------
*}
The following changes should be made:
${diff#*
----------
}
Exiting...
@ -62,8 +64,6 @@ EOM
;;
*)
echo ""
echo "Something went wrong in our formatting checks: clangify returned $err" >&2
echo ""
echo "Something went wrong in our formatting checks: format.sh returned $err" >&2
;;
esac

View file

@ -102,5 +102,8 @@
"decisions. See the documentation for more information."
],
"layout_passes": {}
},
"markup": {
"enable_markup": false
}
}

View file

@ -41,8 +41,8 @@ albeit slightly less active.
We use a separate job on the CI to check your code for formatting issues. If
your pull request failed the test, you can check the output on the checks tab.
It's the first job called "linter", you can click the "Run clangify" step to
see the output of the test.
It's the first job called "linter", you can click the "Check code formatting"
step to see the output of the test.
The message will look like this:
```
@ -50,7 +50,7 @@ The message will look like this:
*** ***
*** Your code does not comply with our style guide. ***
*** ***
*** Please correct it or run the "clangify.sh" script. ***
*** Please correct it or run the "format.sh" script. ***
*** Then commit and push those changes to this branch. ***
*** Check our CONTRIBUTING.md file for more details. ***
*** ***
@ -81,9 +81,9 @@ The handy tool `clang-format` can format your code for you, it is available for
almost any environment. A special `.clang-format` configuration file is
included in the project and is used to format your code.
We've also included a bash script, `clangify.sh`, that will use clang-format to
format all files in your pr in one go. Use `./clangify.sh --help` to show a
full help page.
We've also included a bash script, `format.sh`, that will use clang-format to
format all files in your pr in one go. Use `./format.sh --help` to show a full
help page.
To run clang-format on a single source file simply use the command
`clang-format -i <filename>` to format it in place. (Some systems install

View file

@ -8,8 +8,8 @@ on:
- '.github/workflows/web-*.yml'
jobs:
clang-format:
runs-on: ubuntu-latest
format:
runs-on: ubuntu-22.04
steps:
- name: Checkout
@ -17,12 +17,12 @@ jobs:
with:
fetch-depth: 20 # should be enough to find merge base
- name: Install clang-format
- name: Install dependencies
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends clang-format
sudo apt-get install -y --no-install-recommends clang-format cmake-format
- name: Run clangify
- name: Check code formatting
shell: bash
run: ./.ci/lint_cpp.sh

View file

@ -1,7 +1,9 @@
# Cockatrice's main CMakeLists.txt
#
# This is basically a wrapper to enable/disable the compilation of the different projects: servatrice, cockatrice, test
# This file sets all the variables shared between the projects like the installation path, compilation flags etc..
# This is basically a wrapper to enable/disable the compilation
# of the different projects: servatrice, cockatrice, test
# This file sets all the variables shared between the projects
# like the installation path, compilation flags etc..
# cmake 3.16 is required if using qt6
cmake_minimum_required(VERSION 3.10)
@ -23,7 +25,8 @@ option(WITH_DBCONVERTER "build dbconverter" ON)
# Compile tests
option(TEST "build tests" OFF)
# Default to "Release" build type User-provided value for CMAKE_BUILD_TYPE must be checked before the PROJECT() call
# Default to "Release" build type
# User-provided value for CMAKE_BUILD_TYPE must be checked before the PROJECT() call
if(DEFINED CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE
${CMAKE_BUILD_TYPE}
@ -69,7 +72,8 @@ if(WIN32)
endif()
endif()
# A project name is needed for CPack Version can be overriden by git tags, see cmake/getversion.cmake
# A project name is needed for CPack
# Version can be overriden by git tags, see cmake/getversion.cmake
project("Cockatrice" VERSION 2.8.1)
# Set release name if not provided via env/cmake var
@ -99,7 +103,9 @@ include(createversionfile)
# Define a proper install path
if(UNIX)
if(APPLE)
# macOS Due to the special bundle structure ignore the prefix eventually set by the user.
# macOS
# Due to the special bundle structure ignore
# the prefix eventually set by the user.
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/release)
# Force ccache usage if available
@ -120,7 +126,7 @@ if(UNIX)
else()
# Linux / BSD
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
# fix package build
#fix package build
if(PREFIX)
set(CMAKE_INSTALL_PREFIX ${PREFIX})
else()
@ -136,7 +142,8 @@ endif()
if(MSVC)
# Visual Studio: Maximum optimization, disable warning C4251, establish C++17 compatibility
set(CMAKE_CXX_FLAGS_RELEASE "/Ox /MD /wd4251 /Zc:__cplusplus /std:c++17 /permissive-")
# Generate complete debugging information set(CMAKE_CXX_FLAGS_DEBUG "/Zi")
# Generate complete debugging information
#set(CMAKE_CXX_FLAGS_DEBUG "/Zi")
elseif(CMAKE_COMPILER_IS_GNUCXX)
# linux/gcc, bsd/gcc, windows/mingw
include(CheckCXXCompilerFlag)
@ -216,12 +223,12 @@ else()
message(STATUS "Found Protobuf ${Protobuf_VERSION} at: ${Protobuf_LIBRARIES}")
endif()
# Find OpenSSL
#Find OpenSSL
if(WIN32)
find_package(Win32SslRuntime)
endif()
# Find VCredist
#Find VCredist
if(MSVC)
find_package(VCredistRuntime)
endif()

View file

@ -1,7 +1,13 @@
# Find a compatible Qt version Inputs: WITH_SERVER, WITH_CLIENT, WITH_ORACLE, WITH_DBCONVERTER, FORCE_USE_QT5 Optional
# Input: QT6_DIR -- Hint as to where Qt6 lives on the system Optional Input: QT5_DIR -- Hint as to where Qt5 lives on
# the system Output: COCKATRICE_QT_VERSION_NAME -- Example values: Qt5, Qt6 Outputs: SERVATRICE_QT_MODULES,
# COCKATRICE_QT_MODULES, ORACLE_QT_MODULES, DBCONVERTER_QT_MODULES, TEST_QT_MODULES
# Find a compatible Qt version
# Inputs: WITH_SERVER, WITH_CLIENT, WITH_ORACLE, WITH_DBCONVERTER, FORCE_USE_QT5
# Optional Input: QT6_DIR -- Hint as to where Qt6 lives on the system
# Optional Input: QT5_DIR -- Hint as to where Qt5 lives on the system
# Output: COCKATRICE_QT_VERSION_NAME -- Example values: Qt5, Qt6
# Output: SERVATRICE_QT_MODULES
# Output: COCKATRICE_QT_MODULES
# Output: ORACLE_QT_MODULES
# Output: DBCONVERTER_QT_MODULES
# Output: TEST_QT_MODULES
set(REQUIRED_QT_COMPONENTS Core)
if(WITH_SERVER)

View file

@ -1,4 +1,5 @@
# Find the OpenSSL runtime libraries (.dll) for Windows that will be needed by Qt in order to access https urls.
# Find the OpenSSL runtime libraries (.dll) for Windows that
# will be needed by Qt in order to access https urls.
if(NOT DEFINED WIN32 OR NOT ${WIN32})
message(STATUS "Non-Windows device trying to execute FindWin32SslRuntime, skipping")
return()

View file

@ -71,7 +71,9 @@ function(get_tag_name commit)
string(REPLACE "\n" "" GIT_TAG "${GIT_TAG}")
message(STATUS "Commit is a release or prerelease, git tag: ${GIT_TAG}")
# Extract information from tag: YYYY-MM-DD-Release-MAJ.MIN.PATCH YYYY-MM-DD-Development-MAJ.MIN.PATCH-beta.X
# Extract information from tag:
# YYYY-MM-DD-Release-MAJ.MIN.PATCH
# YYYY-MM-DD-Development-MAJ.MIN.PATCH-beta.X
string(REPLACE "-" ";" GIT_TAG_EXPLODED "${GIT_TAG}")
string(REPLACE "." ";" GIT_TAG_EXPLODED "${GIT_TAG_EXPLODED}")
@ -131,8 +133,10 @@ function(get_tag_name commit)
return()
endif()
# Label 7 = Stable release 8 = Dev release, first beta so only "beta" attached 9 = Dev release, subsequent beta so
# "beta.N" attached (N>=2)
# Label
# 7 = Stable release
# 8 = Dev release, first beta so only "beta" attached
# 9 = Dev release, subsequent beta so "beta.N" attached (N>=2)
if(${GIT_TAG_LISTCOUNT} EQUAL 8)
list(GET GIT_TAG_EXPLODED 7 GIT_TAG_LABEL)
elseif(${GIT_TAG_LISTCOUNT} EQUAL 9)

View file

@ -1,14 +0,0 @@
#!/bin/bash
# go to the project root directory, this file should be located in the project root directory
cd "${BASH_SOURCE%/*}/" || exit 2 # could not find path, this could happen with special links etc.
# CMake-Format
cmake_format_cmd="cmake-format"
if ! hash $cmake_format_cmd 2>/dev/null; then
echo "could not find $cmake_format_cmd, skipping" >&2
return
fi
$cmake_format_cmd -i cmake/*.cmake */CMakeLists.txt CMakeLists.txt

View file

@ -361,7 +361,7 @@ Data = Resources\")
endif()
if(Qt6LinguistTools_FOUND)
# Qt6 Translations happen after the executable is built up
#Qt6 Translations happen after the executable is built up
if(UPDATE_TRANSLATIONS)
qt6_add_translations(
cockatrice

View file

@ -6,7 +6,6 @@
#include "thememanager.h"
#include <QApplication>
#include <QScreen>
#include <QCryptographicHash>
#include <QDebug>
#include <QDir>
@ -19,6 +18,7 @@
#include <QPainter>
#include <QPixmapCache>
#include <QRegularExpression>
#include <QScreen>
#include <QSet>
#include <QSvgRenderer>
#include <QThread>
@ -573,7 +573,7 @@ void PictureLoader::getPixmap(QPixmap &pixmap, CardInfoPtr card, QSize size)
// load the image and create a copy of the correct size
QPixmap bigPixmap;
if (QPixmapCache::find(key, &bigPixmap)) {
QScreen * screen = qApp->primaryScreen();
QScreen *screen = qApp->primaryScreen();
int dpr = screen->devicePixelRatio();
pixmap = bigPixmap.scaled(size * dpr, Qt::KeepAspectRatio, Qt::SmoothTransformation);
pixmap.setDevicePixelRatio(dpr);

View file

@ -26,7 +26,7 @@ void FeatureSet::initalizeFeatureList(QMap<QString, bool> &featureList)
featureList.insert("idle_client", false);
featureList.insert("forgot_password", false);
featureList.insert("websocket", false);
//featureList.insert("hashed_password_login", false);
// featureList.insert("hashed_password_login", false);
// These are temp to force users onto a newer client
featureList.insert("2.7.0_min_version", false);
featureList.insert("2.8.0_min_version", false);

View file

@ -17,15 +17,16 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "main.h"
#include "mocks.h"
#include "version_string.h"
#include <QCommandLineParser>
#include <QCoreApplication>
#include <QDebug>
#include <QFileInfo>
#include <QtGlobal>
#include <QDebug>
#include "version_string.h"
#include "mocks.h"
#include "main.h"
int main(int argc, char *argv[])
{
@ -44,8 +45,7 @@ int main(int argc, char *argv[])
QString oldDbPath;
QString newDbPath;
QStringList args = parser.positionalArguments();
if (args.count() == 2)
{
if (args.count() == 2) {
oldDbPath = QFileInfo(args.at(0)).absoluteFilePath();
newDbPath = QFileInfo(args.at(1)).absoluteFilePath();
} else {

View file

@ -7,14 +7,16 @@
class CardDatabaseConverter : public CardDatabase
{
public:
LoadStatus loadCardDatabase(const QString &path) {
return CardDatabase::loadCardDatabase(path);
}
LoadStatus loadCardDatabase(const QString &path)
{
return CardDatabase::loadCardDatabase(path);
}
bool saveCardDatabase(const QString &fileName) {
CockatriceXml4Parser parser;
return parser.saveToFile(sets, cards, fileName);
}
bool saveCardDatabase(const QString &fileName)
{
CockatriceXml4Parser parser;
return parser.saveToFile(sets, cards, fileName);
}
};
#endif

View file

@ -41,26 +41,21 @@ QString SettingsCache::getSafeConfigFilePath(QString /* configEntry */, QString
return defaultPath;
}
SettingsCache::SettingsCache()
: settings{new QSettings("global.ini", QSettings::IniFormat, this)},
shortcutsSettings{nullptr},
cardDatabaseSettings{new CardDatabaseSettings("", this)},
serversSettings{nullptr},
messageSettings{nullptr},
gameFiltersSettings{nullptr},
layoutsSettings{nullptr},
downloadSettings{nullptr}
: settings{new QSettings("global.ini", QSettings::IniFormat, this)}, shortcutsSettings{nullptr},
cardDatabaseSettings{new CardDatabaseSettings("", this)}, serversSettings{nullptr}, messageSettings{nullptr},
gameFiltersSettings{nullptr}, layoutsSettings{nullptr}, downloadSettings{nullptr}
{
}
void SettingsCache::setUseTearOffMenus(bool /* _useTearOffMenus */)
{
}
void SettingsCache::setKnownMissingFeatures(const QString &/* _knownMissingFeatures */)
void SettingsCache::setKnownMissingFeatures(const QString & /* _knownMissingFeatures */)
{
}
void SettingsCache::setCardInfoViewMode(const int /* _viewMode */)
{
}
void SettingsCache::setHighlightWords(const QString &/* _highlightWords */)
void SettingsCache::setHighlightWords(const QString & /* _highlightWords */)
{
}
void SettingsCache::setMasterVolume(int /* _masterVolume */)
@ -81,40 +76,40 @@ void SettingsCache::setShowMentionPopups(const int /* _showMentionPopus */)
void SettingsCache::setRoomHistory(const int /* _roomHistory */)
{
}
void SettingsCache::setLang(const QString &/* _lang */)
void SettingsCache::setLang(const QString & /* _lang */)
{
}
void SettingsCache::setShowTipsOnStartup(bool /* _showTipsOnStartup */)
{
}
void SettingsCache::setSeenTips(const QList<int> &/* _seenTips */)
void SettingsCache::setSeenTips(const QList<int> & /* _seenTips */)
{
}
void SettingsCache::setDeckPath(const QString &/* _deckPath */)
void SettingsCache::setDeckPath(const QString & /* _deckPath */)
{
}
void SettingsCache::setReplaysPath(const QString &/* _replaysPath */)
void SettingsCache::setReplaysPath(const QString & /* _replaysPath */)
{
}
void SettingsCache::setThemesPath(const QString &/* _themesPath */)
void SettingsCache::setThemesPath(const QString & /* _themesPath */)
{
}
void SettingsCache::setPicsPath(const QString &/* _picsPath */)
void SettingsCache::setPicsPath(const QString & /* _picsPath */)
{
}
void SettingsCache::setCardDatabasePath(const QString &/* _cardDatabasePath */)
void SettingsCache::setCardDatabasePath(const QString & /* _cardDatabasePath */)
{
}
void SettingsCache::setCustomCardDatabasePath(const QString &/* _customCardDatabasePath */)
void SettingsCache::setCustomCardDatabasePath(const QString & /* _customCardDatabasePath */)
{
}
void SettingsCache::setSpoilerDatabasePath(const QString &/* _spoilerDatabasePath */)
void SettingsCache::setSpoilerDatabasePath(const QString & /* _spoilerDatabasePath */)
{
}
void SettingsCache::setTokenDatabasePath(const QString &/* _tokenDatabasePath */)
void SettingsCache::setTokenDatabasePath(const QString & /* _tokenDatabasePath */)
{
}
void SettingsCache::setThemeName(const QString &/* _themeName */)
void SettingsCache::setThemeName(const QString & /* _themeName */)
{
}
void SettingsCache::setPicDownload(int /* _picDownload */)
@ -141,7 +136,7 @@ void SettingsCache::setStartingHandSize(int /* _startingHandSize */)
void SettingsCache::setAnnotateTokens(int /* _annotateTokens */)
{
}
void SettingsCache::setTabGameSplitterSizes(const QByteArray &/* _tabGameSplitterSizes */)
void SettingsCache::setTabGameSplitterSizes(const QByteArray & /* _tabGameSplitterSizes */)
{
}
void SettingsCache::setDisplayCardNames(int /* _displayCardNames */)
@ -171,10 +166,10 @@ void SettingsCache::setChatMentionForeground(int /* _chatMentionForeground */)
void SettingsCache::setChatHighlightForeground(int /* _chatHighlightForeground */)
{
}
void SettingsCache::setChatMentionColor(const QString &/* _chatMentionColor */)
void SettingsCache::setChatMentionColor(const QString & /* _chatMentionColor */)
{
}
void SettingsCache::setChatHighlightColor(const QString &/* _chatHighlightColor */)
void SettingsCache::setChatHighlightColor(const QString & /* _chatHighlightColor */)
{
}
void SettingsCache::setZoneViewSortByName(int /* _zoneViewSortByName */)
@ -189,7 +184,7 @@ void SettingsCache::setZoneViewPileView(int /* _zoneViewPileView */)
void SettingsCache::setSoundEnabled(int /* _soundEnabled */)
{
}
void SettingsCache::setSoundThemeName(const QString &/* _soundThemeName */)
void SettingsCache::setSoundThemeName(const QString & /* _soundThemeName */)
{
}
void SettingsCache::setIgnoreUnregisteredUsers(int /* _ignoreUnregisteredUsers */)
@ -198,19 +193,19 @@ void SettingsCache::setIgnoreUnregisteredUsers(int /* _ignoreUnregisteredUsers *
void SettingsCache::setIgnoreUnregisteredUserMessages(int /* _ignoreUnregisteredUserMessages */)
{
}
void SettingsCache::setMainWindowGeometry(const QByteArray &/* _mainWindowGeometry */)
void SettingsCache::setMainWindowGeometry(const QByteArray & /* _mainWindowGeometry */)
{
}
void SettingsCache::setTokenDialogGeometry(const QByteArray &/* _tokenDialogGeometry */)
void SettingsCache::setTokenDialogGeometry(const QByteArray & /* _tokenDialogGeometry */)
{
}
void SettingsCache::setPixmapCacheSize(const int /* _pixmapCacheSize */)
{
}
void SettingsCache::setClientID(const QString &/* _clientID */)
void SettingsCache::setClientID(const QString & /* _clientID */)
{
}
void SettingsCache::setClientVersion(const QString &/* _clientVersion */)
void SettingsCache::setClientVersion(const QString & /* _clientVersion */)
{
}
QStringList SettingsCache::getCountries() const
@ -273,7 +268,7 @@ void PictureLoader::clearPixmapCache(CardInfoPtr /* card */)
SettingsCache *settingsCache;
SettingsCache& SettingsCache::instance()
SettingsCache &SettingsCache::instance()
{
return *settingsCache;
}

View file

@ -1,15 +1,20 @@
#!/bin/bash
# This script will run clang-format on all modified, non-3rd-party C++/Header files.
# Optionally runs cmake-format on all modified cmake files.
# Uses clang-format cmake-format git diff find
# Never, ever, should this receive a path with a newline in it. Don't bother proofing it for that.
set -o pipefail
# go to the project root directory, this file should be located in the project root directory
olddir="$PWD"
cd "${BASH_SOURCE%/*}/" || exit 2 # could not find path, this could happen with special links etc.
# defaults
include=("common" \
"cockatrice/src" \
"dbconverter/src" \
"oracle/src" \
"servatrice/src" \
"tests")
@ -22,22 +27,30 @@ exclude=("servatrice/src/smtp" \
exts=("cpp" "h" "proto")
cf_cmd="clang-format"
branch="origin/master"
cmakefile="CMakeLists.txt"
cmakedir="cmake/.*\\.cmake"
cmakeinclude=("cmake/gtest-CMakeLists.txt.in")
color="--"
# parse options
while [[ $@ ]]; do
while [[ $* ]]; do
case "$1" in
'-b'|'--branch')
branch=$2
set_branch=1
shift 2
;;
'--cmake')
do_cmake=1
shift
;;
'-c'|'--color-diff')
color=" --color=always"
mode=diff
color="--color=always"
mode="diff"
shift
;;
'-d'|'--diff')
mode=diff
mode="diff"
shift
;;
'-h'|'--help')
@ -49,7 +62,6 @@ If <dir>s are given, all source files in those directories of the project root
path are formatted. To only format changed files in these directories use the
--branch option in combination. <dir> has to be a path relative to the project
root path or a full path inside $PWD.
. can not be specified as a dir, if you really want to format everything use */.
USAGE: $0 [option] [--branch <git branch or object>] [<dir> ...]
@ -68,6 +80,9 @@ OPTIONS:
When not comparing to a branch, git will not be used at all and every
source file in the entire project will be parsed.
--cmake
Use cmake-format to format cmake files as well.
-c, --color-diff
Display a colored diff. Implies --diff.
Only available on systems which support 'diff --color'.
@ -94,22 +109,25 @@ EXIT CODES:
3 if clang-format could not be found.
EXAMPLES:
$0 --test \$PWD || echo "code requires formatting"
Tests if the source files in the current directory are correctly
formatted and prints an error message if formatting is required.
$0 --branch $USER/patch-2 ${include[0]}
Formats all changed files compared to the git branch "$USER/patch-2"
in the directory ${include[0]}.
$0 --test . || echo "code requires formatting"
Tests if the source files in the current directory are correctly
formatted and prints an error message if formatting is required.
$0 --cmake --branch "" ""
Unconditionally format all cmake files and no source files.
EOM
exit 0
;;
'-n'|'--names')
mode=name
mode="name"
shift
;;
'-t'|'--test')
mode=code
mode="code"
shift
;;
'--cf-version')
@ -117,20 +135,28 @@ EOM
shift
;;
'--')
dashdash=1
shift
;;
*)
if next_dir=$(cd "$1" && pwd); then
if [[ ${next_dir#$PWD/} == /* ]]; then
echo "error in parsing arguments of $0: $next_dir is not in $PWD" >&2
exit 2 # input error
elif ! [[ $set_include ]]; then
if [[ ! $dashdash && $1 =~ ^-- ]]; then
echo "error in parsing arguments of $0: $1 is an unrecognized option" >&2
exit 2 # input error
fi
if [[ ! $1 ]] || next_dir=$(cd "$olddir" && cd -- "$1" && pwd); then
if ! [[ $set_include ]]; then
include=() # remove default includes
set_include=1
fi
include+=("${next_dir#$PWD/}")
if [[ $1 ]]; then
if [[ $next_dir != $PWD/* ]]; then
echo "error in parsing arguments of $0: $next_dir is not in $PWD" >&2
exit 2 # input error
fi
include+=("$next_dir")
fi
else
echo "error in parsing arguments of $0: $PWD/$1 is not a directory" >&2
echo "error in parsing arguments of $0: $1 is not a directory" >&2
exit 2 # input error
fi
if ! [[ $set_branch ]]; then
@ -153,37 +179,93 @@ if ! hash $cf_cmd 2>/dev/null; then
fi
fi
# check availability of cmake-format
if [[ $do_cmake ]] && ! hash cmake-format 2>/dev/null; then
echo "could not find cmake-format" >&2
exit 3
fi
if [[ $branch ]]; then
# get all dirty files through git
if ! base=$(git merge-base ${branch} HEAD); then
if ! base=$(git merge-base "$branch" HEAD); then
echo "could not find git merge base" >&2
exit 2 # input error
fi
declare -a reg
for ex in ${exts[@]}; do
reg+=(${include[@]/%/.*\\.$ex\$})
mapfile -t basenames < <(git diff --diff-filter=d --name-only "$base")
names=()
for ex in "${exts[@]}"; do
for path in "${include[@]}"; do
for name in "${basenames[@]}"; do
rx="^$path/.$ex$"
if [[ $name =~ $rx ]]; then
names+=("$name")
fi
done
done
done
names=$(git diff --diff-filter=d --name-only $base | grep ${reg[@]/#/-e ^})
if [[ $do_cmake ]]; then
cmake_names=()
for name in "${basenames[@]}"; do
dirrx="^$cmakedir$"
filerx="(^|/)$cmakefile$"
if [[ $name =~ $dirrx || $name =~ $filerx ]]; then
cmake_names+=("$name")
fi
for include in "${cmakeinclude[@]}"; do
if [[ $name == "$include" ]]; then
cmake_names+=("$name")
fi
done
done
fi
else
names=$(find ${include[@]} -type f -false ${exts[@]/#/-o -name *\\.})
exts_o=()
for ext in "${exts[@]}"; do
exts_o+=(-o -name "*\\.$ext")
done
unset "exts_o[0]" # remove first -o
mapfile -t names < <(find "${include[@]}" -type f "${exts_o[@]}")
if [[ $do_cmake ]]; then
mapfile -t cmake_names < <(find . -maxdepth 2 -type f -name "$cmakefile" -o -path "./${cmakedir/.}")
cmake_names+=("${cmakeinclude[@]}")
fi
fi
# filter excludes
names=$(<<<"$names" grep -v ${exclude[@]/#/-e ^})
if ! [[ $names ]]; then
exit 0 # nothing to format means format is successful!
fi
for path in "${exclude[@]}"; do
for i in "${!names[@]}"; do
rx="^$path/"
if [[ ${names[$i]} =~ $rx ]]; then
unset "names[$i]"
fi
done
done
# optionally print version
[[ $print_version ]] && $cf_cmd -version
if [[ $print_version ]]; then
$cf_cmd -version
[[ $do_cmake ]] && echo "cmake-format $(cmake-format --version)"
echo "----------"
fi
if [[ ! ${cmake_names[*]} ]]; then
unset do_cmake
fi
if [[ ! ( ${names[*]} || $do_cmake ) ]]; then
exit 0 # nothing to format means format is successful!
fi
# format
case $mode in
diff)
declare -i code=0
for name in ${names[@]}; do
if ! $cf_cmd "$name" | diff "$name" - -p $color; then
for name in "${names[@]}"; do
if ! $cf_cmd "$name" | diff "$name" - -p "$color"; then
code=1
fi
done
for name in "${cmake_names[@]}"; do
if ! cmake-format "$name" | diff "$name" - -p "$color"; then
code=1
fi
done
@ -191,20 +273,34 @@ case $mode in
;;
name)
declare -i code=0
for name in ${names[@]}; do
for name in "${names[@]}"; do
if ! $cf_cmd "$name" | diff "$name" - -q >/dev/null; then
echo "$name"
code=1
fi
done
for name in "${cmake_names[@]}"; do
if ! cmake-format "$name" --check; then
echo "$name"
code=1
fi
done
exit $code
;;
code)
for name in ${names[@]}; do
for name in "${names[@]}"; do
$cf_cmd "$name" | diff "$name" - -q >/dev/null || exit 1
done
for name in "${cmake_names[@]}"; do
cmake-format "$name" --check || exit 1
done
;;
*)
$cf_cmd -i $names
if [[ "${names[*]}" ]]; then
$cf_cmd -i "${names[@]}"
fi
if [[ $do_cmake ]]; then
cmake-format -i "${cmake_names[@]}"
fi
;;
esac

View file

@ -253,7 +253,7 @@ Translations = Resources/translations\")
endif()
if(Qt6LinguistTools_FOUND)
# Qt6 Translations happen after the executable is built up
#Qt6 Translations happen after the executable is built up
if(UPDATE_TRANSLATIONS)
qt6_add_translations(
oracle

View file

@ -1,4 +1,5 @@
#include "smtpclient.h"
#include "settingscache.h"
#include "smtp/qxtsmtp.h"

View file

@ -31,7 +31,8 @@ if(NOT GTEST_FOUND)
# Add gtest directly to our build
add_subdirectory(${CMAKE_BINARY_DIR}/gtest-src ${CMAKE_BINARY_DIR}/gtest-build EXCLUDE_FROM_ALL)
# Add the gtest include directory, since gtest doesn't add that dependency to its gtest target
# Add the gtest include directory, since gtest
# doesn't add that dependency to its gtest target
target_include_directories(gtest INTERFACE "$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/gtest-src/include>")
set(GTEST_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/gtest-src/include")