File indexing completed on 2025-03-09 05:11:41

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 "gitgraphlane.h"
0010 #include "interfaces.h"
0011 #include "libkommit_export.h"
0012 #include "reference.h"
0013 #include "signature.h"
0014 
0015 #include <QDateTime>
0016 #include <QSharedPointer>
0017 #include <QString>
0018 #include <QVector>
0019 
0020 #include <git2/types.h>
0021 
0022 namespace Git
0023 {
0024 
0025 class Tree;
0026 class LIBKOMMIT_EXPORT Commit : public ITree
0027 {
0028 public:
0029     enum CommitType { NormalCommit, InitialCommit, ForkCommit, MergeCommit };
0030 
0031     Commit();
0032     Commit(git_commit *commit);
0033     ~Commit();
0034 
0035     Q_REQUIRED_RESULT QSharedPointer<Signature> author() const;
0036     Q_REQUIRED_RESULT QSharedPointer<Signature> committer() const;
0037     Q_REQUIRED_RESULT const QString &message() const;
0038     Q_REQUIRED_RESULT const QString &subject() const;
0039     Q_REQUIRED_RESULT const QString &body() const;
0040     Q_REQUIRED_RESULT const QString &commitHash() const;
0041     Q_REQUIRED_RESULT const QStringList &parents() const;
0042     Q_REQUIRED_RESULT const QString &branch() const;
0043     Q_REQUIRED_RESULT const QString &extraData() const;
0044     Q_REQUIRED_RESULT CommitType type() const;
0045     Q_REQUIRED_RESULT const QVector<GraphLane> &lanes() const;
0046     Q_REQUIRED_RESULT const QStringList &children() const;
0047     Q_REQUIRED_RESULT const QString &commitShortHash() const;
0048 
0049     Q_REQUIRED_RESULT QSharedPointer<Reference> reference() const;
0050 
0051     QSharedPointer<Tree> tree() const override;
0052 
0053     Q_REQUIRED_RESULT git_commit *gitCommit() const;
0054 
0055     Q_REQUIRED_RESULT QDateTime commitTime() const;
0056 
0057 private:
0058     git_commit *mGitCommit{nullptr};
0059     QSharedPointer<Signature> mAuthor;
0060     QSharedPointer<Signature> mCommitter;
0061     QString mMessage;
0062     QString mSubject;
0063     QString mBody;
0064     QString mCommitHash;
0065     QString mCommitShortHash;
0066     QStringList mParentHash;
0067     QString mBranch;
0068     QString mExtraData;
0069     CommitType mType;
0070     QVector<GraphLane> mLanes;
0071     QStringList mChildren;
0072     QSharedPointer<Reference> mReference;
0073     QDateTime mCommitTime;
0074 
0075     friend class LogList;
0076     friend class Manager;
0077     friend class LogsModel;
0078 };
0079 
0080 }