| 1 | #ifndef GITREPOSITORY_H |
| 2 | #define GITREPOSITORY_H |
| 3 | |
| 4 | #include <QFileInfo> |
| 5 | #include <QObject> |
| 6 | #include <QSet> |
| 7 | #include <memory> |
| 8 | #include "gitutils.h" |
| 9 | |
| 10 | class GitManager; |
| 11 | class GitRepository : public QObject |
| 12 | { |
| 13 | Q_OBJECT |
| 14 | public: |
| 15 | explicit GitRepository(const QString& folder, QObject *parent = nullptr); |
| 16 | ~GitRepository(); |
| 17 | |
| 18 | const QString &folder() const; |
| 19 | |
| 20 | void createRepository(); |
| 21 | bool hasRepository(QString& currentBranch); |
| 22 | |
| 23 | bool isFileInRepository(const QFileInfo& fileInfo) { |
| 24 | return isFileInRepository(fileInfo.absoluteFilePath()); |
| 25 | } |
| 26 | bool isFileInRepository(const QString& filePath) { |
| 27 | return mFilesInRepositories.contains(filePath); |
| 28 | } |
| 29 | bool isFileStaged(const QFileInfo& fileInfo) { |
| 30 | return isFileStaged(fileInfo.absoluteFilePath()); |
| 31 | } |
| 32 | bool isFileStaged(const QString& filePath) { |
| 33 | return mStagedFiles.contains(filePath); |
| 34 | } |
| 35 | bool hasStagedFiles() { |
| 36 | return !mStagedFiles.isEmpty(); |
| 37 | } |
| 38 | bool isFileChanged(const QFileInfo& fileInfo) { |
| 39 | return isFileChanged(fileInfo.absoluteFilePath()); |
| 40 | } |
| 41 | bool isFileChanged(const QString& filePath) { |
| 42 | return mChangedFiles.contains(filePath); |
| 43 | } |
| 44 | bool hasChangedFiles() { |
| 45 | return !mChangedFiles.isEmpty(); |
| 46 | } |
| 47 | bool isFileConflicting(const QFileInfo& fileInfo) { |
| 48 | return isFileConflicting(fileInfo.absoluteFilePath()); |
| 49 | } |
| 50 | bool isFileConflicting(const QString& filePath) { |
| 51 | return mConflicts.contains(filePath); |
| 52 | } |
| 53 | bool hasConflicts(){ |
| 54 | return !mConflicts.isEmpty(); |
| 55 | } |
| 56 | |
| 57 | bool add(const QString& path, QString& output); |
| 58 | bool remove(const QString& path, QString& output); |
| 59 | bool rename(const QString& oldName, const QString& newName, QString& output); |
| 60 | bool restore(const QString& path, QString& output); |
| 61 | QSet<QString> listFiles(bool refresh); |
| 62 | |
| 63 | bool clone(const QString& url, QString& output); |
| 64 | bool commit(const QString& message, QString& output, bool autoStage=true); |
| 65 | bool revert(QString& output); |
| 66 | |
| 67 | |
| 68 | void setFolder(const QString &newFolder); |
| 69 | void update(); |
| 70 | |
| 71 | const QString &realFolder() const; |
| 72 | |
| 73 | signals: |
| 74 | private: |
| 75 | QString mRealFolder; |
| 76 | QString mFolder; |
| 77 | bool mInRepository; |
| 78 | QString mBranch; |
| 79 | GitManager* mManager; |
| 80 | QSet<QString> mFilesInRepositories; |
| 81 | QSet<QString> mChangedFiles; |
| 82 | QSet<QString> mStagedFiles; |
| 83 | QSet<QString> mConflicts; |
| 84 | private: |
| 85 | void convertFilesListToSet(const QStringList& filesList,QSet<QString>& set); |
| 86 | }; |
| 87 | |
| 88 | #endif // GITREPOSITORY_H |
| 89 | |