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 "libkommit_export.h"
0010 
0011 #include <git2/types.h>
0012 
0013 #include <QObject>
0014 #include <QString>
0015 
0016 namespace Git
0017 {
0018 
0019 class LIBKOMMIT_EXPORT Submodule
0020 {
0021     Q_GADGET
0022 
0023 public:
0024     enum class Status {
0025         Unknown = 0,
0026         InHead = (1u << 0), // 1
0027         InIndex = (1u << 1), // 2
0028         InConfig = (1u << 2), // 4
0029         InWd = (1u << 3), // 8
0030         IndexAdded = (1u << 4), // 16
0031         IndexDeleted = (1u << 5),
0032         IndexModified = (1u << 6),
0033         WdUninitialized = (1u << 7),
0034         WdAdded = (1u << 8),
0035         WdDeleted = (1u << 9),
0036         WdModified = (1u << 10),
0037         WdIndexModified = (1u << 11),
0038         WdWdModified = (1u << 12),
0039         WdUntracked = (1u << 13),
0040     };
0041     Q_DECLARE_FLAGS(StatusFlags, Status)
0042     Q_FLAG(StatusFlags)
0043 
0044     Submodule();
0045     Submodule(git_submodule *submodule);
0046     ~Submodule();
0047 
0048     Q_REQUIRED_RESULT const QString &path() const;
0049     Q_REQUIRED_RESULT const QString &commitHash() const;
0050     Q_REQUIRED_RESULT const QString &refName() const;
0051     Q_REQUIRED_RESULT QString url() const;
0052     Q_REQUIRED_RESULT QString name() const;
0053     Q_REQUIRED_RESULT QString branch();
0054     Q_REQUIRED_RESULT StatusFlags status() const;
0055 
0056     void setUrl(const QString &newUrl);
0057     bool sync() const;
0058     bool reload(bool force = false) const;
0059 
0060 private:
0061     git_submodule *ptr;
0062     QString mName;
0063     QString mUrl;
0064     QString mPath;
0065     QString mCommitHash;
0066     QString mRefName;
0067     QString mBranch;
0068 };
0069 
0070 Q_DECLARE_OPERATORS_FOR_FLAGS(Submodule::StatusFlags)
0071 
0072 } // namespace Git