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 }