Guitar
GitDiff.h
Go to the documentation of this file.
1 #ifndef GITDIFF_H
2 #define GITDIFF_H
3 
4 #include <set>
5 #include "common/misc.h"
6 #include "Git.h"
7 #include "GitObjectManager.h"
8 
9 class GitDiff {
10  friend class CommitListThread;
11 public:
12 private:
13  class LookupTable;
14 private:
16  QList<Git::Diff> diffs;
17 
18  bool interrupted = false;
19 
20  struct Interrupted {
21  };
22 
24  {
25  if (interrupted) {
26  throw Interrupted();
27  }
28  }
29 
30  using MapList = std::list<LookupTable>;
31 
32  GitPtr git();
33  GitPtr git(const Git::SubmoduleItem &submod);
34 
35  static void AddItem(Git::Diff *item, QList<Git::Diff> *diffs);
36 
37  void retrieveCompleteTree(QString const &dir, GitTreeItemList const *files, std::map<QString, GitTreeItem> *out);
38  void retrieveCompleteTree(QString const &dir, GitTreeItemList const *files);
39 public:
41  {
42  this->objcache = objcache;
43  }
44 
45  bool diff(const Git::CommitID &id, const QList<Git::SubmoduleItem> &submodules, QList<Git::Diff> *out);
46  bool diff_uncommited(const QList<Git::SubmoduleItem> &submodules, QList<Git::Diff> *out);
47 
48  void interrupt()
49  {
50  interrupted = true;
51  }
52 
53 public:
54  static QString diffObjects(GitPtr g, QString const &a_id, QString const &b_id);
55  static QString diffFiles(GitPtr g, QString const &a_path, QString const &b_path);
56  static void parseDiff(std::string const &s, const Git::Diff *info, Git::Diff *out);
57  static QString makeKey(const QString &a_id, const QString &b_id);
58  static QString makeKey(const Git::Diff &diff);
59  static QString prependPathPrefix(QString const &path);
60 
61 
62 };
63 
64 #endif // GITDIFF_H
GitDiff::makeKey
static QString makeKey(const QString &a_id, const QString &b_id)
Definition: GitDiff.cpp:54
Git::Diff::Type::Unknown
@ Unknown
GitDiff::interrupted
bool interrupted
Definition: GitDiff.h:18
GitDiff::Interrupted
Definition: GitDiff.h:20
GitCommitTree::tree_id_map
std::map< QString, QString > tree_id_map
Definition: GitObjectManager.h:128
GitPtr
std::shared_ptr< Git > GitPtr
Definition: Git.h:38
Git::Diff::SubmoduleDetail
Definition: Git.h:211
Git::Diff::Type::ChType
@ ChType
GitTreeItem
Definition: GitObjectManager.h:97
GitDiff::LookupTable::path_to_id_map
std::map< QString, QString > path_to_id_map
Definition: GitDiff.cpp:12
GitTreeItem::BLOB
@ BLOB
Definition: GitObjectManager.h:101
Git::DiffRaw
Definition: Git.h:499
Git::SubmoduleItem::id
Git::CommitID id
Definition: Git.h:90
Git::CommitID::toQString
QString toQString(int maxlen=-1) const
Definition: Git.cpp:60
Git::Diff::Type::Copy
@ Copy
GitDiff::LookupTable::id_to_path_map
std::map< QString, QString > id_to_path_map
Definition: GitDiff.cpp:13
GitDiff::GitDiff
GitDiff(GitObjectCache *objcache)
Definition: GitDiff.h:40
GitCommitTree::root_item_list
GitTreeItemList root_item_list
Definition: GitObjectManager.h:125
Git::FileStatusList
std::vector< FileStatus > FileStatusList
Definition: Git.h:393
misc::joinWithSlash
static QString joinWithSlash(QString const &left, QString const &right)
Definition: misc.cpp:272
GitDiff::CommitListThread
friend class CommitListThread
Definition: GitDiff.h:10
Git::Diff::BLOB_AB_::b_id_or_path
QString b_id_or_path
Definition: Git.h:208
GitDiff::prependPathPrefix
static QString prependPathPrefix(QString const &path)
Definition: GitDiff.cpp:64
GitDiff::retrieveCompleteTree
void retrieveCompleteTree(QString const &dir, GitTreeItemList const *files, std::map< QString, GitTreeItem > *out)
Definition: GitDiff.cpp:133
Git::Diff::mode
QString mode
Definition: Git.h:205
GitCommitTree::parseCommit
QString parseCommit(QString const &commit_id)
Definition: GitDiff.cpp:451
GitDiff::AddItem
static void AddItem(Git::Diff *item, QList< Git::Diff > *diffs)
GitDiff::LookupTable::store
void store(GitTreeItemList const &files)
Definition: GitDiff.cpp:24
GitDiff::diffs
QList< Git::Diff > diffs
Definition: GitDiff.h:16
lookupFileID
QString lookupFileID(GitObjectCache *objcache, QString const &commit_id, QString const &file)
指定されたコミットに属するファイルのIDを求める
Definition: GitDiff.cpp:468
GitCommit
Definition: GitObjectManager.h:89
Git::Hunk
Definition: Git.h:184
parseGitTreeObject
void parseGitTreeObject(QByteArray const &ba, const QString &path_prefix, GitTreeItemList *out)
Definition: GitObjectManager.cpp:407
Git::Diff::a_submodule
struct Git::Diff::SubmoduleDetail a_submodule
GitCommitTree::objcache
GitObjectCache * objcache
Definition: GitObjectManager.h:124
GitDiff::diff_uncommited
bool diff_uncommited(const QList< Git::SubmoduleItem > &submodules, QList< Git::Diff > *out)
Definition: GitDiff.cpp:355
PATH_PREFIX
#define PATH_PREFIX
Definition: ApplicationGlobal.h:63
GitDiff::diffObjects
static QString diffObjects(GitPtr g, QString const &a_id, QString const &b_id)
Definition: GitDiff.cpp:69
GitDiff
Definition: GitDiff.h:9
misc.h
GitCommitTree::lookup_
QString lookup_(QString const &file, GitTreeItem *out)
Definition: GitDiff.cpp:372
GitDiff::MapList
std::list< LookupTable > MapList
Definition: GitDiff.h:30
GitDiff::LookupTable::find_path
const_iterator find_path(QString const &path) const
Definition: GitDiff.cpp:31
GitObjectCache
Definition: GitObjectManager.h:55
GitDiff::diff
bool diff(const Git::CommitID &id, const QList< Git::SubmoduleItem > &submodules, QList< Git::Diff > *out)
コミットの差分を取得する
Definition: GitDiff.cpp:168
GitTreeItem::mode
QString mode
Definition: GitObjectManager.h:107
Git::Diff::SubmoduleDetail::commit
Git::CommitItem commit
Definition: Git.h:213
Git::Diff::b_submodule
struct Git::Diff::SubmoduleDetail b_submodule
Git::SubmoduleItem
Definition: Git.h:88
GitDiff::LookupTable::store
void store(QString const &path, QString const &id)
Definition: GitDiff.cpp:18
GitDiff::checkInterrupted
void checkInterrupted()
Definition: GitDiff.h:23
GitDiff::LookupTable::const_iterator
std::map< QString, QString >::const_iterator const_iterator
Definition: GitDiff.cpp:16
Git::CommitID
Definition: Git.h:42
GitTreeItem::id
QString id
Definition: GitObjectManager.h:106
GitDiff::parseDiff
static void parseDiff(std::string const &s, const Git::Diff *info, Git::Diff *out)
Definition: GitDiff.cpp:85
misc::splitLines
static QStringList splitLines(QByteArray const &ba, std::function< QString(char const *ptr, size_t len)> const &tos)
QByteArrayの文字列を行に分割する。
Definition: misc.cpp:33
Git::Diff::Type::Create
@ Create
GitTreeItemList
QList< GitTreeItem > GitTreeItemList
Definition: GitObjectManager.h:120
Git.h
GitObjectCache::revParse
Git::CommitID revParse(QString const &name)
Definition: GitObjectManager.cpp:261
Git::Diff::index
QString index
Definition: Git.h:203
GitDiff::diffFiles
static QString diffFiles(GitPtr g, QString const &a_path, QString const &b_path)
Definition: GitDiff.cpp:80
GitCommit::parseCommit
static bool parseCommit(GitObjectCache *objcache, Git::CommitID const &id, GitCommit *out)
Definition: GitObjectManager.cpp:377
Git::Diff::path
QString path
Definition: Git.h:204
Git::isValidID
static bool isValidID(QString const &id)
Definition: Git.cpp:154
GitObjectCache::git
GitPtr git()
Definition: GitObjectManager.h:69
Git::Diff::diff
QString diff
Definition: Git.h:202
Git::Diff::hunks
QList< Hunk > hunks
Definition: Git.h:210
Git::Diff::SubmoduleDetail::item
Git::SubmoduleItem item
Definition: Git.h:212
GIT_ID_LENGTH
#define GIT_ID_LENGTH
Definition: Git.h:16
GitCommit::tree_id
QString tree_id
Definition: GitObjectManager.h:91
GitDiff::LookupTable::end_path
const_iterator end_path() const
Definition: GitDiff.cpp:36
GitObjectManager.h
GitCommitTree
Definition: GitObjectManager.h:122
Git::Diff
Definition: Git.h:189
Git::Diff::blob
struct Git::Diff::BLOB_AB_ blob
GitCommitTree::blob_map
std::map< QString, GitTreeItem > blob_map
Definition: GitObjectManager.h:127
GitTreeItem::TREE
@ TREE
Definition: GitObjectManager.h:100
Git::Diff::Type::Unmerged
@ Unmerged
Git::Diff::Type::Modify
@ Modify
ApplicationGlobal.h
GitCommitTree::GitCommitTree
GitCommitTree(GitObjectCache *objcache)
Definition: GitDiff.cpp:362
GitCommitTree::lookup
QString lookup(QString const &file)
Definition: GitDiff.cpp:426
GitDiff::objcache
GitObjectCache * objcache
Definition: GitDiff.h:15
Git::Diff::BLOB_AB_::a_id_or_path
QString a_id_or_path
Definition: Git.h:207
GitTreeItem::name
QString name
Definition: GitObjectManager.h:105
GitCommitTree::git
GitPtr git()
Definition: GitDiff.cpp:367
GitDiff.h
Git::Diff::Type::Rename
@ Rename
GitCommitTree::parseTree
void parseTree(QString const &tree_id)
Definition: GitDiff.cpp:446
GitDiff::git
GitPtr git()
Definition: GitDiff.cpp:44
Git::Diff::Type::Delete
@ Delete
GitCommit::parents
QStringList parents
Definition: GitObjectManager.h:92
GitDiff::interrupt
void interrupt()
Definition: GitDiff.h:48
Git::FileStatus
Definition: Git.h:315
GitDiff::LookupTable
Definition: GitDiff.cpp:9