File indexing completed on 2025-03-09 05:11:44
0001 /* 0002 SPDX-FileCopyrightText: 2021 Hamed Masafi <hamed.masfi@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QSharedPointer> 0010 #include <QString> 0011 0012 #include <git2/buffer.h> 0013 #include <git2/strarray.h> 0014 #include <git2/types.h> 0015 0016 #include "libkommit_export.h" 0017 0018 namespace Git 0019 { 0020 0021 class Buf : public QSharedPointer<git_buf> 0022 { 0023 public: 0024 Buf() 0025 : QSharedPointer<git_buf>{nullptr, git_buf_dispose} 0026 { 0027 } 0028 }; 0029 0030 template<class T> 0031 using PointerList = QList<QSharedPointer<T>>; 0032 0033 LIBKOMMIT_EXPORT inline const char *toChar(const QString &s); 0034 0035 QString convertToQString(git_buf *buf); 0036 QStringList convert(git_strarray *arr); 0037 QString convertToString(const git_oid *id, const int len); 0038 void addToArray(git_strarray *arr, const QString &value); 0039 0040 QSharedPointer<git_tree> makeShared(git_tree *tree); 0041 0042 #define BEGIN int err = 0; 0043 #define STEP err = err ? err: 0044 #define PRINT_ERROR \ 0045 do { \ 0046 if (err) { \ 0047 const_cast<Manager *>(this)->checkError(err); \ 0048 qDebug() << "Error" << Q_FUNC_INFO << err << ":" << gitErrorMessage(err); \ 0049 } \ 0050 } while (false) 0051 0052 #define END \ 0053 do { \ 0054 if (err) { \ 0055 auto __git_err = git_error_last(); \ 0056 auto __git_err_class = __git_err->klass; \ 0057 auto __git_err_msg = QString{__git_err->message}; \ 0058 qDebug().noquote().nospace() << "libgit2 error: " << err << ", class: " << __git_err_class << ", Mssage: " << __git_err_msg; \ 0059 } \ 0060 } while (false) 0061 0062 #define RETURN_COND(ok, error) \ 0063 do { \ 0064 return err ? error : ok; \ 0065 } while (false) 0066 0067 #define THROW \ 0068 do { \ 0069 if (!err) \ 0070 throw new Exception{err, gitErrorMessage(err)}; \ 0071 } while (false) 0072 0073 #define RETURN_IF_ERR_BOOL \ 0074 do { \ 0075 if (err) \ 0076 return false; \ 0077 } while (false) 0078 0079 #define RETURN_IF_ERR_VOID \ 0080 do { \ 0081 if (err) \ 0082 return; \ 0083 } while (false) 0084 0085 #define toConstChars(s) s.toLocal8Bit().constData() 0086 }