13 #include <QMainWindow>
21 class QListWidgetItem;
22 class QTableWidgetItem;
23 class QTreeWidgetItem;
53 : data(s.data(), s.size())
71 class AbstractGitCommand;
97 IndexRole = Qt::UserRole,
160 bool validate =
false;
161 bool waitcursor =
true;
162 bool keep_selection =
false;
178 operator bool ()
const
188 void postEvent(QObject *receiver, QEvent *event,
int ms_later);
190 void cancelPendingUserEvents();
192 void updateFileList(
const Git::Hash &
id);
194 void updateFileListLater(
int delay_ms);
195 void cancelUpdateFileList();
196 void initUpdateFileListTimer();
198 void openRepositoryMain(
GitRunner g,
bool clear_log,
bool do_fetch,
bool keep_selection);
201 QStringList selectedFiles_(QListWidget *listwidget)
const;
202 QStringList selectedFiles()
const;
203 void for_each_selected_files(std::function<
void (QString
const &)>
const &fn);
204 void clearFileList();
205 void clearDiffView();
207 RepositoryTreeIndex repositoryTreeIndex(
const QTreeWidgetItem *item)
const;
208 std::optional<RepositoryInfo> repositoryItem(
const RepositoryTreeIndex &index)
const;
210 void buildRepoTree(QString
const &group, QTreeWidgetItem *item, QList<RepositoryInfo> *repos);
211 void refrectRepositories();
213 void updateDiffView(QListWidgetItem *item);
214 void updateDiffView();
215 void updateUnstagedFileCurrentItem();
216 void updateStagedFileCurrentItem();
217 void updateStatusBarText();
218 void setRepositoryInfo(QString
const &reponame, QString
const &brname);
220 QString getIncrementalSearchText()
const;
221 void setFilterText(
const QString &text,
int repo_list_select_row = -1);
222 void clearFilterText(
int repo_list_select_row = -1);
223 void clearAllFilters(
int select_row = -1);
225 void _appendCharToFilterText(ushort c);
226 bool appendCharToFilterText(
int k, FilterTarget ft);
235 void setRemoteOnline(
bool f,
bool save);
237 void setNetworkingCommandsEnabled(
bool enabled);
238 void blame(QListWidgetItem *item);
240 QListWidgetItem *currentFileItem()
const;
241 void execAreYouSureYouWantToContinueConnectingDialog(
const QString &windowtitle);
243 QStringList remoteBranches(
const Git::Hash &
id, QStringList *all);
244 bool isUninitialized();
245 void onLogCurrentItemChanged(
bool update_file_list);
247 void findText(
const QString &text);
248 bool locateCommitID(QString
const &commit_id);
251 void showLogWindow(
bool show);
252 bool isValidRemoteURL(
const QString &url,
const QString &sshkey);
253 QStringList whichCommand_(
const QString &cmdfile1,
const QString &cmdfile2 = {});
254 QString selectCommand_(
const QString &cmdname,
const QStringList &cmdfiles,
const QStringList &list, QString path,
const std::function<
void (
const QString &)> &callback);
255 QString selectCommand_(
const QString &cmdname,
const QString &cmdfile,
const QStringList &list,
const QString &path,
const std::function<
void (
const QString &)> &callback);
256 const RepositoryInfo *findRegisteredRepository(QString *workdir)
const;
257 bool execSetGlobalUserDialog();
258 void revertAllFiles();
259 bool execWelcomeWizardDialog();
260 void execRepositoryPropertyDialog(
const RepositoryInfo &repo,
bool open_repository_menu =
false);
261 void execConfigUserDialog(
const Git::User &global_user,
const Git::User &local_user,
bool enable_local_user,
const QString &reponame);
262 void setGitCommand(
const QString &path,
bool save);
263 void setGpgCommand(
const QString &path,
bool save);
264 void setSshCommand(
const QString &path,
bool save);
265 bool checkGitCommand();
266 bool saveBlobAs(
const QString &
id,
const QString &dstpath);
267 bool saveByteArrayAs(
const QByteArray &ba,
const QString &dstpath);
268 bool saveFileAs(
const QString &srcpath,
const QString &dstpath);
269 QString executableOrEmpty(
const QString &path);
270 bool checkExecutable(
const QString &path);
271 void internalSaveCommandPath(
const QString &path,
bool save,
const QString &name);
272 void logGitVersion();
273 void internalClearRepositoryInfo();
276 void openRepository(OpenRepositoyOption
const &opt);
277 void reopenRepository(
bool validate);
279 void setCurrentRepository(
const RepositoryInfo &repo,
bool clear_authentication);
280 void openSelectedRepository();
284 void submodule_add(QString url = {},
const QString &local_dir = {});
286 void commit(
bool amend =
false);
291 void push(
bool set_upstream,
const QString &remote,
const QString &branch,
bool force);
293 void stage(
GitRunner g,
const QStringList &paths);
297 void delete_tags(
GitRunner g,
const QStringList &tagnames);
303 void deleteSelectedBranch();
304 void resetFile(
const QStringList &paths);
305 void clearAuthentication();
306 void clearSshAuthentication();
307 void internalDeleteTags(
const QStringList &tagnames);
308 void internalAddTag(
const QString &name);
309 void createRepository(
const QString &dir);
310 void addRepository(
const QString &local_dir,
const QString &group = {});
312 void scanFolderAndRegister(
const QString &group);
313 void doGitCommand(
const std::function<
void (
GitRunner)> &callback);
314 void setWindowTitle_(
const Git::User &user);
315 void setUnknownRepositoryInfo();
316 void setCurrentRemoteName(
const QString &name);
318 QStringList remotes()
const;
320 QString tempfileHeader()
const;
321 void deleteTempFiles();
322 QString newTempFilePath();
323 int limitLogCount()
const;
324 bool isThereUncommitedChanges()
const;
326 const std::map<Git::Hash, BranchList> &branchmap()
const;
328 void updateWindowTitle(
const Git::User &user);
331 std::tuple<QString, BranchLabelList> makeCommitLabels(
Git::CommitItem const &commit, std::map<Git::Hash, BranchList>
const &branch_map, std::map<Git::Hash, TagList>
const &tag_map)
const;
334 void removeRepositoryFromBookmark(RepositoryTreeIndex
const &index,
bool ask);
337 bool askAreYouSureYouWantToRun(
const QString &title,
const QString &command);
338 bool editFile(
const QString &path,
const QString &title);
340 QStringList findGitObject(
const QString &
id)
const;
341 void saveApplicationSettings();
342 void loadApplicationSettings();
343 void setDiffResult(
const QList<Git::Diff> &diffs);
344 const QList<Git::SubmoduleItem> &submodules()
const;
345 void setSubmodules(
const QList<Git::SubmoduleItem> &submodules);
346 bool runOnRepositoryDir(
const std::function<
void (QString, QString)> &callback,
const RepositoryInfo *repo);
349 const std::map<Git::Hash, TagList> &tagmap()
const;
350 std::map<Git::Hash, TagList> queryTags(
GitRunner g);
353 void sshSetPassphrase(
const std::string &user,
const std::string &pass);
354 std::string sshPassphraseUser()
const;
355 std::string sshPassphrasePass()
const;
356 void httpSetAuthentication(
const std::string &user,
const std::string &pass);
357 std::string httpAuthenticationUser()
const;
358 std::string httpAuthenticationPass()
const;
361 bool saveRepositoryBookmarks();
362 QString getBookmarksFilePath()
const;
363 void stopPtyProcess();
364 void abortPtyProcess();
367 bool getPtyProcessOk()
const;
368 bool isPtyProcessRunning()
const;
369 void setCompletedHandler(std::function<
void (
bool,
const QVariant &)> fn,
const QVariant &userdata);
370 void setPtyProcessOk(
bool pty_process_ok);
372 const QList<RepositoryInfo> &repositoryList()
const;
373 void setRepositoryList(QList<RepositoryInfo> &&list);
375 bool interactionEnabled()
const;
376 void setInteractionEnabled(
bool enabled);
377 InteractionMode interactionMode()
const;
378 void setInteractionMode(
const InteractionMode &im);
379 void setUncommitedChanges(
bool uncommited_changes);
380 QList<Git::Diff>
const *diffResult()
const;
382 void clearLabelMap();
387 void setHeadId(
const Git::Hash &head_id);
388 void setPtyProcessCompletionData(
const QVariant &value);
389 const QVariant &getTempRepoForCloneCompleteV()
const;
390 void msgNoRepositorySelected();
391 bool isRepositoryOpened()
const;
392 void initRepository(
const QString &path,
const QString &reponame,
const Git::Remote &remote);
393 void updatePocessLog(
bool processevents);
394 void appendLogHistory(
const QByteArray &str);
395 std::vector<std::string> getLogHistoryLines();
396 void clearLogHistory();
397 void updateAvatar(
const Git::User &user,
bool request);
398 void cleanSubModule(QListWidgetItem *item);
400 void updateUncommitedChanges();
402 QString preferredRepositoryGroup()
const;
403 void setPreferredRepositoryGroup(
const QString &group);
404 bool addExistingLocalRepository(QString dir, QString name, QString sshkey,
bool open,
bool save =
true,
bool msgbox_if_err =
true);
405 void addExistingLocalRepositoryWithGroup(
const QString &dir,
const QString &group);
406 bool addExistingLocalRepository(
const QString &dir,
bool open);
409 int rowFromCommitId(
const Git::Hash &
id);
411 void _updateCommitLogTableView(
int delay_ms);
419 void jump(
GitRunner g,
const QString &text);
420 void connectPtyProcessCompleted();
421 void setupShowFileListHandler();
423 void setRetry(std::function<
void (
const QVariant &)> fn,
const QVariant &
var);
426 bool isRetryQueued()
const;
427 void clearGitCommandCache();
434 void setupAddFileObjectData();
436 void setupStatusInfoHandler();
437 void connectSetCommitLog();
439 void _chooseRepository(QTreeWidgetItem *item);
440 void chooseRepository();
442 void closeEvent(QCloseEvent *event)
override;
443 void dragEnterEvent(QDragEnterEvent *event)
override;
444 void keyPressEvent(QKeyEvent *event)
override;
445 bool event(QEvent *event)
override;
446 bool eventFilter(QObject *watched, QEvent *event)
override;
447 std::optional<RepositoryInfo> selectedRepositoryItem()
const;
448 void removeSelectedRepositoryFromBookmark(
bool ask);
455 void onLogVisibilityChanged();
456 void onRepositoriesTreeDropped();
457 void onInterval10ms();
458 void onAvatarReady();
459 void onCommitDetailGetterReady();
462 void onCommitLogCurrentRowChanged(
int row);
464 void on_action_about_triggered();
465 void on_action_add_repository_triggered();
466 void on_action_clean_df_triggered();
467 void on_action_commit_triggered();
468 void on_action_create_desktop_launcher_file_triggered();
469 void on_action_delete_branch_triggered();
470 void on_action_delete_remote_branch_triggered();
471 void on_action_edit_git_config_triggered();
472 void on_action_edit_gitignore_triggered();
473 void on_action_edit_global_gitconfig_triggered();
474 void on_action_edit_settings_triggered();
475 void on_action_edit_tags_triggered();
476 void on_action_exit_triggered();
477 void on_action_expand_commit_log_triggered();
478 void on_action_expand_diff_view_triggered();
479 void on_action_expand_file_list_triggered();
480 void on_action_explorer_triggered();
481 void on_action_fetch_prune_triggered();
482 void on_action_fetch_triggered();
483 void on_action_find_next_triggered();
484 void on_action_find_triggered();
485 void on_action_offline_triggered();
486 void on_action_online_triggered();
487 void on_action_pull_triggered();
488 void on_action_push_all_tags_triggered();
489 void on_action_push_triggered();
490 void on_action_reflog_triggered();
491 void on_action_repo_checkout_triggered();
492 void on_action_repo_jump_to_head_triggered();
493 void on_action_repo_jump_triggered();
494 void on_action_repo_merge_triggered();
495 void on_action_repositories_panel_triggered();
496 void on_action_repository_property_triggered();
497 void on_action_repository_status_triggered();
498 void on_action_reset_HEAD_1_triggered();
499 void on_action_reset_hard_triggered();
500 void on_action_configure_user_triggered();
501 void on_action_set_gpg_signing_triggered();
502 void on_action_show_labels_triggered();
503 void on_action_show_graph_triggered();
504 void on_action_show_avatars_triggered();
505 void on_action_sidebar_triggered();
506 void on_action_stash_apply_triggered();
507 void on_action_stash_drop_triggered();
508 void on_action_stash_triggered();
509 void on_action_stop_process_triggered();
510 void on_action_submodule_add_triggered();
511 void on_action_submodule_update_triggered();
512 void on_action_submodules_triggered();
513 void on_action_terminal_triggered();
514 void on_action_view_refresh_triggered();
515 void on_action_window_log_triggered(
bool checked);
516 void on_listWidget_files_currentRowChanged(
int currentRow);
517 void on_listWidget_files_customContextMenuRequested(
const QPoint &pos);
518 void on_listWidget_files_itemDoubleClicked(QListWidgetItem *item);
519 void on_listWidget_staged_currentRowChanged(
int currentRow);
520 void on_listWidget_staged_customContextMenuRequested(
const QPoint &pos);
521 void on_listWidget_staged_itemDoubleClicked(QListWidgetItem *item);
522 void on_listWidget_unstaged_currentRowChanged(
int currentRow);
523 void on_listWidget_unstaged_customContextMenuRequested(
const QPoint &pos);
524 void on_listWidget_unstaged_itemDoubleClicked(QListWidgetItem *item);
525 void on_radioButton_remote_offline_clicked();
526 void on_radioButton_remote_online_clicked();
527 void on_tableWidget_log_customContextMenuRequested(
const QPoint &pos);
528 void on_tableWidget_log_doubleClicked(
const QModelIndex &index);
529 void on_toolButton_commit_clicked();
530 void on_toolButton_explorer_clicked();
531 void on_toolButton_fetch_clicked();
532 void on_toolButton_pull_clicked();
533 void on_toolButton_push_clicked();
534 void on_toolButton_select_all_clicked();
535 void on_toolButton_stage_clicked();
536 void on_toolButton_status_clicked();
537 void on_toolButton_stop_process_clicked();
538 void on_toolButton_terminal_clicked();
539 void on_toolButton_unstage_clicked();
540 void on_treeWidget_repos_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
541 void on_treeWidget_repos_customContextMenuRequested(
const QPoint &pos);
542 void on_treeWidget_repos_itemDoubleClicked(QTreeWidgetItem *item,
int column);
543 void on_toolButton_addrepo_clicked();
546 void toggleMaximized();
548 void onRemoteInfoChanged();
549 void onShowStatusInfo(
StatusInfo const &info);
550 void on_action_rebase_abort_triggered();
555 void on_action_view_sort_by_time_changed();
572 explicit MainWindow(QWidget *parent =
nullptr);
575 QColor color(
unsigned int i);
576 bool isOnlineMode()
const;
577 void updateCurrentFileList();
581 const TagList &queryCurrentCommitTagList()
const;
586 static int indexOfLog(QListWidgetItem *item);
587 static int indexOfDiff(QListWidgetItem *item);
588 static void updateSubmodules(
GitRunner g,
const Git::Hash &
id, QList<Git::SubmoduleItem> *out);
590 static TagList findTag(std::map<Git::Hash, TagList>
const &tagmap,
Git::Hash const &
id);
591 static QString makeRepositoryName(
const QString &loc);
592 static void addDiffItems(
const QList<Git::Diff> *diff_list,
const std::function<
void (
const ObjectData &)> &add_item);
593 static Git::Hash getObjectID(QListWidgetItem *item);
594 static QString getFilePath(QListWidgetItem *item);
595 static QString getSubmodulePath(QListWidgetItem *item);
596 static QString getSubmoduleCommitId(QListWidgetItem *item);
599 static std::string parseDetectedDubiousOwnershipInRepositoryAt(
const std::vector<std::string> &lines);
602 static bool isValidWorkingCopy(
GitRunner g);
605 void drawDigit(QPainter *pr,
int x,
int y,
int n)
const;
606 static constexpr
int DIGIT_WIDTH = 5;
607 static constexpr
int DIGIT_HEIGHT = 7;
609 void clearStatusInfo();
610 bool setCurrentLogRow(
int row);
612 void deleteTags(QStringList
const &tagnames);
613 void addTag(QString
const &name);
614 int selectedLogIndex()
const;
615 void updateAncestorCommitMap();
616 bool isAncestorCommit(
const QString &
id);
617 void postStartEvent(
int ms_later);
618 void setShowLabels(
bool show,
bool save);
619 void setShowGraph(
bool show,
bool save);
620 void setShowAvatars(
bool show,
bool save);
621 bool isLabelsVisible()
const;
622 bool isGraphVisible()
const;
623 bool isAvatarsVisible()
const;
624 bool isAvatarEnabled()
const;
625 void makeDiffList(
const Git::Hash &
id, QList<Git::Diff> *diff_list, QListWidget *listwidget);
627 void execCommitPropertyDialog(QWidget *parent,
const Git::CommitItem &commit);
628 void execCommitExploreWindow(QWidget *parent,
const Git::CommitItem *commit);
629 void execFileHistory(
const QString &path);
630 void execFileHistory(QListWidgetItem *item);
631 void showObjectProperty(QListWidgetItem *item);
632 bool testRemoteRepositoryValidity(
const QString &url,
const QString &sshkey);
633 QString selectGitCommand(
bool save);
634 QString selectGpgCommand(
bool save);
635 QString selectSshCommand(
bool save);
639 QString currentRepositoryName()
const;
640 QString currentRemoteName()
const;
641 QString currentBranchName()
const;
642 GitRunner git(
const QString &dir,
const QString &submodpath,
const QString &sshkey,
bool use_cache =
true)
const;
645 void autoOpenRepository(QString dir,
const QString &commit_id = {});
646 std::optional<Git::CommitItem> queryCommit(
const Git::Hash &
id);
647 bool checkoutLocalBranch(QString
const &name);
648 void checkout(QWidget *parent,
const Git::CommitItem &commit, std::function<
void ()> accepted_callback = {});
651 bool jumpToCommit(
const QString &
id);
654 bool saveAs(
const QString &
id,
const QString &dstpath);
657 void emitWriteLog(
LogData const &logdata);
658 QString findFileID(
const Git::Hash &commit_id,
const QString &file);
661 QImage committerIcon(
int row, QSize size)
const;
662 void changeSshKey(
const QString &local_dir,
const QString &ssh_key,
bool save);
665 QString defaultWorkingDir()
const;
666 QIcon signatureVerificationIcon(
const Git::Hash &
id)
const;
667 QAction *addMenuActionProperty(QMenu *menu);
668 QString currentWorkingCopyDir()
const;
673 void setupExternalPrograms();
674 void updateCommitLogTableViewLater();
676 void changeRepositoryBookmarkName(
RepositoryInfo item, QString new_name);
678 void setProgress(
float progress);
679 void showProgress(
const QString &text,
float progress = -1.0f);
681 void internalAfterFetch();
682 void onRepositoryTreeSortRecent(
bool f);
685 void clearLogContents();
686 void updateLogTableView();
687 void setFocusToLogTable();
688 void selectLogTableRow(
int row);
693 void internalWriteLog(
const LogData &logdata);
QList< NamedCommitItem > NamedCommitList
Definition: Git.h:721
QList< Git::Branch > BranchList
Definition: RepositoryModel.h:12
QList< BranchLabel > BranchLabelList
Definition: RepositoryModel.h:13
QList< Git::Tag > TagList
Definition: RepositoryModel.h:11
std::shared_ptr< TextEditorTheme > TextEditorThemePtr
Definition: TextEditorTheme.h:9
Definition: AboutDialog.h:10
Definition: AddRepositoryDialog.h:14
Definition: ApplicationSettings.h:22
ログテーブルウィジェットのブランチ名ラベル
Definition: BranchLabel.h:11
Definition: FileHistoryWindow.h:14
std::variant< Git_clone, Git_fetch, Git_fetch_tags_f, Git_stage, Git_push, Git_pull, Git_push_tags, Git_delete_tag, Git_delete_tags, Git_add_tag, Git_submodule_add > variant_t
Definition: GitCommandRunner.h:142
Definition: GitObjectManager.h:40
MergeFastForward
Definition: Git.h:322
Definition: MainWindow.h:64
std::vector< std::string > lines
Definition: MainWindow.h:68
size_t pos
Definition: MainWindow.h:67
size_t len
Definition: MainWindow.h:67
int hunk_number
Definition: MainWindow.h:66
Definition: MainWindow.h:696
MainWindow::FileListType files_list_type
Definition: MainWindow.h:698
std::vector< MainWindow::ObjectData > object_data
Definition: MainWindow.h:699
Definition: MainWindow.h:174
QByteArray content
Definition: MainWindow.h:177
bool is(Git::Object::Type t) const
Definition: MainWindow.h:182
Definition: MainWindow.h:85
@ FilePathRole
Definition: MainWindow.h:98
@ DiffIndexRole
Definition: MainWindow.h:99
@ HeaderRole
Definition: MainWindow.h:101
@ ObjectIdRole
Definition: MainWindow.h:100
@ SubmoduleCommitIdRole
Definition: MainWindow.h:103
@ SubmodulePathRole
Definition: MainWindow.h:102
void signalShowStatusInfo(StatusInfo const &info)
void signalSetProgress(float progress)
void setForceFetch(bool force_fetch)
Ui::MainWindow * ui
Definition: MainWindow.h:154
static std::pair< QString, QString > makeFileItemText(const ObjectData &data)
Private * m
Definition: MainWindow.h:156
InteractionMode
Definition: MainWindow.h:110
@ None
Definition: MainWindow.h:111
@ Busy
Definition: MainWindow.h:112
void signalHideProgress()
NamedCommitFlag
Definition: MainWindow.h:115
void sigPtyFetchCompleted(bool ok, QVariant const &userdata)
QString currentFileMimeFileType() const
void sigPtyCloneCompleted(bool ok, QVariant const &userdata)
FileListType
Definition: MainWindow.h:121
CloneOperation
Definition: MainWindow.h:105
@ SubmoduleAdd
Definition: MainWindow.h:107
@ Clone
Definition: MainWindow.h:106
void enableDragAndDropOnRepositoryTree(bool enabled)
bool getForceFetch() const
void signalAddFileObjectData(const MainWindowExchangeData &data)
void sigSetCommitLog(const CommitLogExchangeData &log)
void signalUpdateCommitLog()
void connectShowFileListHandler()
void sigPtyProcessCompleted(bool ok, PtyProcessCompleted const &data)
FilterTarget
Definition: MainWindow.h:169
void sigWriteLog(LogData const &logdata)
void sigShowFileList(FileListType files_list_type)
Definition: MyProcess.h:20
Definition: MainWindow.h:75
QString process_name
Definition: MainWindow.h:80
QVariant userdata
Definition: MainWindow.h:79
std::function< void(ProcessStatus const &, QVariant const &)> callback
Definition: MainWindow.h:77
QElapsedTimer elapsed
Definition: MainWindow.h:81
ProcessStatus status
Definition: MainWindow.h:78
Definition: StatusInfo.h:8
Definition: UnixPtyProcess.h:7
Definition: UserEvent.h:31
std::variant< StartEventData, CloneRepositoryEventData > variant_t
Definition: UserEvent.h:36
Definition: AboutDialog.h:6
static Variant var(jstream::Reader const &reader)
Definition: jstream.h:1612
Definition: MainWindow.h:31
RepositoryInfo repodata
Definition: MainWindow.h:33
Git::CloneData clonedata
Definition: MainWindow.h:32
Definition: RepositoryModel.h:27
Definition: MainWindow.h:59
QString repository_name
Definition: MainWindow.h:61
QString owner_account_name
Definition: MainWindow.h:60
Definition: MainWindow.h:37
LogData(QByteArray const &ba)
Definition: MainWindow.h:40
LogData(char const *p, int n)
Definition: MainWindow.h:48
LogData(std::string_view const &s)
Definition: MainWindow.h:52
QByteArray data
Definition: MainWindow.h:38
LogData(QString const &s)
Definition: MainWindow.h:44
Definition: MainWindow.h:138
std::vector< int > indexes
Definition: MainWindow.h:140
Definition: MainWindow.h:144
QString header
Definition: MainWindow.h:149
int idiff
Definition: MainWindow.h:150
Git::CommitItem submod_commit
Definition: MainWindow.h:148
Git::SubmoduleItem submod
Definition: MainWindow.h:147
QString id
Definition: MainWindow.h:145
QString path
Definition: MainWindow.h:146
Definition: MainWindow.h:159
Definition: MainWindow.cpp:110
Definition: MainWindow.h:165
Definition: MainWindow.h:127
Task(int index, int parent)
Definition: MainWindow.h:131
Definition: RepositoryModel.h:15
Definition: RepositoryInfo.h:7