File indexing completed on 2024-04-21 04:34:34

0001 /*
0002     This file is part of KDevelop
0003 
0004     Copyright 2016 Sergey Kalinichev <kalinichev.so.0@gmail.com>
0005 
0006     This library is free software; you can redistribute it and/or
0007     modify it under the terms of the GNU Library General Public
0008     License as published by the Free Software Foundation; either
0009     version 2 of the License, or (at your option) any later version.
0010 
0011     This library is distributed in the hope that it will be useful,
0012     but WITHOUT ANY WARRANTY; without even the implied warranty of
0013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0014     Library General Public License for more details.
0015 
0016     You should have received a copy of the GNU Library General Public License
0017     along with this library; see the file COPYING.LIB.  If not, write to
0018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0019     Boston, MA 02110-1301, USA.
0020 */
0021 
0022 #pragma once
0023 
0024 #include <vcs/vcsjob.h>
0025 
0026 #include "mercurialjob.h"
0027 #include "mercurialplugin.h"
0028 
0029 #include <QSet>
0030 
0031 class MercurialAnnotateJob : public MercurialJob
0032 {
0033     Q_OBJECT
0034 
0035 public:
0036     MercurialAnnotateJob(const QDir &workingDir, const KDevelop::VcsRevision& revision, const QUrl& location, MercurialPlugin *parent);
0037     void start() override;
0038     QVariant fetchResults() override;
0039 
0040 private slots:
0041     void parseAnnotateOutput(KDevelop::VcsJob *job);
0042     void parseLogOutput(KDevelop::VcsJob *job);
0043     void parseCommitResult(KDevelop::VcsJob *job);
0044     void parseStripResult(KDevelop::VcsJob *job);
0045     void parseStatusResult(KDevelop::VcsJob *job);
0046     void subJobFinished(KJob *job);
0047 
0048 private:
0049     void launchAnnotateJob() const;
0050 
0051     KDevelop::VcsRevision m_revision;
0052     QUrl m_location;
0053     QList<QVariant> m_annotations;
0054     QHash<QString, QPair<QString, QString>> m_revisionsCache;
0055     QSet <QString> m_revisionsToLog;
0056     bool m_hasModifiedFile = false;
0057 
0058     void nextPartOfLog();
0059 
0060     // Those variables below for testing purposes only
0061     friend class MercurialTest;
0062     enum class TestCase
0063     {
0064       None,
0065       Status,
0066       Commit,
0067       Annotate,
0068       Log,
0069       Strip
0070     };
0071     TestCase m_testCase = TestCase::None;
0072 };