1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 Petar Perisin.
4 ** Contact: petar.perisin@gmail.com
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 
26 #pragma once
27 
28 #include <QDialog>
29 #include <QMultiMap>
30 #include <QDate>
31 #include <QSharedPointer>
32 
33 namespace Git {
34 namespace Internal { class GitClient; }
35 }
36 
37 namespace Gerrit {
38 namespace Internal {
39 
40 class GerritParameters;
41 
42 namespace Ui { class GerritPushDialog; }
43 
44 class GerritPushDialog : public QDialog
45 {
46     Q_OBJECT
47 
48 public:
49     GerritPushDialog(const QString &workingDir, const QString &reviewerList,
50                      QSharedPointer<GerritParameters> parameters, QWidget *parent);
51     ~GerritPushDialog() override;
52 
53     QString selectedCommit() const;
54     QString selectedRemoteName() const;
55     QString selectedRemoteBranchName() const;
56     QString selectedTopic() const;
57     QString reviewers() const;
58     QString initErrorMessage() const;
59     QString pushTarget() const;
60     void storeTopic();
61 
62 private:
63     void setChangeRange();
64     void onRemoteChanged(bool force = false);
65     void setRemoteBranches(bool includeOld = false);
66     void updateCommits(int index);
67     void validate();
68 
69     using BranchDate = QPair<QString, QDate>;
70     using RemoteBranchesMap = QMultiMap<QString, BranchDate>;
71 
72     QString determineRemoteBranch(const QString &localBranch);
73     void initRemoteBranches();
74     QString calculateChangeRange(const QString &branch);
75     QString m_workingDir;
76     QString m_suggestedRemoteBranch;
77     QString m_initErrorMessage;
78     Ui::GerritPushDialog *m_ui;
79     RemoteBranchesMap m_remoteBranches;
80     bool m_hasLocalCommits = false;
81     bool m_currentSupportsWip = false;
82 };
83 
84 
85 } // namespace Internal
86 } // namespace Gerrit
87