Skip to content

Commit

Permalink
いろいろ
Browse files Browse the repository at this point in the history
  • Loading branch information
soramimi committed Feb 10, 2025
1 parent 7b61d01 commit 2254045
Show file tree
Hide file tree
Showing 8 changed files with 101 additions and 97 deletions.
2 changes: 1 addition & 1 deletion src/CommitViewWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ CommitViewWindow::CommitViewWindow(MainWindow *parent, Git::CommitItem const *co
ui->lineEdit_message->setText(m->commit->message);
ui->lineEdit_id->setText(m->commit->commit_id.toQString());

mainwindow()->updateFileList2(m->commit->commit_id, &m->diff_list, ui->listWidget_files);
mainwindow()->makeDiffList(m->commit->commit_id, &m->diff_list, ui->listWidget_files);

ui->listWidget_files->setCurrentRow(0);
}
Expand Down
2 changes: 1 addition & 1 deletion src/EditGitIgnoreDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ QString EditGitIgnoreDialog::text() const
void EditGitIgnoreDialog::on_pushButton_edit_file_clicked()
{
if (TextEditDialog::editFile(this, gitignore_path, ".gitignore", text() + '\n')) {
mainwindow()->updateCurrentFilesList();
mainwindow()->updateCurrentFileList();
done(QDialog::Rejected);
}
}
35 changes: 21 additions & 14 deletions src/Git.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ bool Git::git(QString const &arg, Option const &opt, bool debug_)
if (m->command_cache) {
auto const *a = m->command_cache.find(cmd);
if (a) {
qDebug() << "found:" << cmd;
// qDebug() << "--- found:" << cmd;
m->result = *a;
return true;
}
Expand All @@ -322,7 +322,7 @@ bool Git::git(QString const &arg, Option const &opt, bool debug_)
if (m->exit_status.exit_code == 0) {
if (m->command_cache) {
m->command_cache.insert(cmd, m->result);
qDebug() << "insert:" << cmd;
// qDebug() << "--- insert:" << cmd;
}
}
}
Expand Down Expand Up @@ -1010,16 +1010,17 @@ Git::CommitItemList Git::log(int maxcount)
return log_all({}, maxcount);
}

Git::CommitItem Git::parseCommit(QByteArray const &ba)
std::optional<Git::CommitItem> Git::parseCommit(QByteArray const &ba)
{
CommitItem out;
QStringList lines = misc::splitLines(ba, [](char const *p, size_t n){
return QString::fromUtf8(p, (int)n);
});
while (!lines.empty() && lines[lines.size() - 1].isEmpty()) {
lines.pop_back();
}

CommitItem out;
bool ok = false;
bool gpgsig = false;
bool message = false;

Expand Down Expand Up @@ -1057,7 +1058,9 @@ Git::CommitItem Git::parseCommit(QByteArray const &ba)
}
out.message += line;
}
if (line.startsWith("parent ")) {
if (line.startsWith("tree ")) {
ok = true;
} else if (line.startsWith("parent ")) {
out.parent_ids.push_back(Git::CommitID(line.mid(7)));
} else if (line.startsWith("author ")) {
QStringList arr = misc::splitWords(line);
Expand Down Expand Up @@ -1085,20 +1088,24 @@ Git::CommitItem Git::parseCommit(QByteArray const &ba)
gpgsig = true;
}
}
return out;

if (ok) return out;
return std::nullopt;
}

std::optional<Git::CommitItem> Git::queryCommitItem(CommitID const &id)
{
Git::CommitItem ret;
if (objectType(id) != "commit") return std::nullopt;

ret.commit_id = id;
auto ba = cat_file(id);
if (ba) {
ret = parseCommit(*ba);
if (objectType(id) == "commit") {
auto ba = cat_file(id);
if (ba) {
auto ret = parseCommit(*ba);
if (ret) {
ret->commit_id = id;
return ret;
}
}
}
return ret;
return std::nullopt;
}

Git::CloneData Git::preclone(QString const &url, QString const &path)
Expand Down
2 changes: 1 addition & 1 deletion src/Git.h
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@ class Git : QObject {
QList<SubmoduleItem> submodules();
bool submodule_add(const CloneData &data, bool force, AbstractPtyProcess *pty);
bool submodule_update(const SubmoduleUpdateData &data, AbstractPtyProcess *pty);
static CommitItem parseCommit(const QByteArray &ba);
static std::optional<CommitItem> parseCommit(QByteArray const &ba);
QString queryEntireCommitMessage(const CommitID &id);

QString getDefaultBranch();
Expand Down
125 changes: 63 additions & 62 deletions src/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ struct MainWindow::Private {
const Git::CommitItem null_commit_item;
const TagList null_tag_list;

QTimer update_file_list_timer;

Git::CommandCache git_command_cache;
};
Expand Down Expand Up @@ -289,6 +290,8 @@ MainWindow::MainWindow(QWidget *parent)

connect(ui->tableWidget_log, &CommitLogTableWidget::currentRowChanged, this, &MainWindow::on_tableWidget_log_currentRowChanged);

initUpdateFileListTimer();

//

QString path = getBookmarksFilePath();
Expand Down Expand Up @@ -511,11 +514,6 @@ void MainWindow::setupExternalPrograms()
setSshCommand(appsettings()->ssh_command, false);
}

void UserEventHandler::operator () (StartEventData const &)
{
mainwindow->onStartEvent();
}

void MainWindow::onStartEvent()
{
if (isUninitialized()) { // gitコマンドの有効性チェック
Expand All @@ -539,6 +537,11 @@ void MainWindow::onStartEvent()
}
}

void UserEventHandler::operator () (StartEventData const &)
{
mainwindow->onStartEvent();
}

bool MainWindow::setCurrentLogRow(int row)
{
if (row >= 0 && row < ui->tableWidget_log->rowCount()) {
Expand Down Expand Up @@ -1228,10 +1231,10 @@ void MainWindow::saveRepositoryBookmark(RepositoryData item)
updateRepositoryList();
}

void UserEventHandler::operator () (AddRepositoryEventData const &e)
void UserEventHandler::operator () (CloneRepositoryEventData const &e)
{
AddRepositoryDialog dlg(mainwindow);
if (dlg.execClone(e.dir) == QDialog::Accepted) {
if (dlg.execClone(e.remote_url) == QDialog::Accepted) {
mainwindow->addRepositoryAccepted(dlg);
}
}
Expand Down Expand Up @@ -1278,7 +1281,7 @@ bool MainWindow::addExistingLocalRepository(QString dir, QString name, QString s
};

if (isBareRepository(dir)) {
postUserEvent(AddRepositoryEventData(dir), 1);
postUserEvent(CloneRepositoryEventData(dir), 0);
return true;
}

Expand Down Expand Up @@ -1888,7 +1891,7 @@ void MainWindow::runPtyGit(QString const &progress_message, GitPtr g, GitCommand
setProgress(-1.0f);
showProgress(progress_message, false);

qDebug() << "--- Start:" << progress_message;
// qDebug() << "--- Start:" << progress_message;

GitCommandRunner runner;
runner.d.process_name = progress_message;
Expand All @@ -1899,7 +1902,7 @@ void MainWindow::runPtyGit(QString const &progress_message, GitPtr g, GitCommand
showProgress({}, false);
GitCommandRunner const &req = d.value<GitCommandRunner>();
{
qDebug() << "--- Elapsed A:" << req.d.process_name << req.d.elapsed.elapsed() << "ms";
// qDebug() << "--- Elapsed A:" << req.d.process_name << req.d.elapsed.elapsed() << "ms";
}
PtyProcessCompleted data;
data.process_name = req.d.process_name;
Expand Down Expand Up @@ -1941,7 +1944,7 @@ void MainWindow::onPtyProcessCompleted(bool ok, PtyProcessCompleted const &data)

m->git_command_cache.clear();

qDebug() << "--- Elapsed B:" << data.process_name << data.elapsed.elapsed() << "ms";
// qDebug() << "--- Elapsed B:" << data.process_name << data.elapsed.elapsed() << "ms";
}

void MainWindow::connectPtyProcessCompleted()
Expand Down Expand Up @@ -3736,6 +3739,15 @@ void MainWindow::showFileList(FilesListType files_list_type)
emit sigShowFileList(files_list_type);
}

Git::CommitItem const *MainWindow::currentCommitItem()
{
int row = ui->tableWidget_log->actualLogIndex();
auto const &logs = commitlog();
if (row >= 0 && row < (int)logs.size()) {
return &logs[row];
}
return nullptr;
}

void MainWindow::updateFileList(Git::CommitID const &id)
{
Expand Down Expand Up @@ -3858,13 +3870,38 @@ void MainWindow::updateFileList(Git::CommitID const &id)
}
}

/**
* @brief ファイルリストを更新
* @param id
* @param diff_list
* @param listwidget
*/
void MainWindow::updateFileList2(Git::CommitID const &id, QList<Git::Diff> *diff_list, QListWidget *listwidget)
void MainWindow::updateFileList(Git::CommitItem const *commit)
{
Git::CommitID id;
if (!commit) {
// nullptr for uncommited changes
} else if (Git::isUncommited(*commit)) {
// empty id for uncommited changes
} else {
id = commit->commit_id;
}
updateFileList(id);
}

void MainWindow::updateCurrentFileList()
{
ASSERT_MAIN_THREAD();

updateFileList(currentCommitItem());
}

void MainWindow::updateFileListLater(int delay_ms)
{
m->update_file_list_timer.start(delay_ms);
}

void MainWindow::initUpdateFileListTimer()
{
m->update_file_list_timer.setSingleShot(true);
connect(&m->update_file_list_timer, &QTimer::timeout, this, &MainWindow::updateCurrentFileList);
}

void MainWindow::makeDiffList(Git::CommitID const &id, QList<Git::Diff> *diff_list, QListWidget *listwidget)
{
GitPtr g = git();
if (!isValidWorkingCopy(g)) return;
Expand All @@ -3888,37 +3925,6 @@ void MainWindow::execCommitViewWindow(const Git::CommitItem *commit)
win.exec();
}

void MainWindow::updateFileList(Git::CommitItem const *commit)
{
Git::CommitID id;
if (!commit) {
// nullptr for uncommited changes
} else if (Git::isUncommited(*commit)) {
// empty id for uncommited changes
} else {
id = commit->commit_id;
}
updateFileList(id);
}

Git::CommitItem const *MainWindow::currentCommitItem()
{
int row = ui->tableWidget_log->actualLogIndex();
auto const &logs = commitlog();
// &commit = logs[row];
if (row >= 0 && row < (int)logs.size()) {
return &logs[row];
}
return nullptr;
}

void MainWindow::updateCurrentFilesList()
{
ASSERT_MAIN_THREAD();

updateFileList(currentCommitItem());
}

Git::Object MainWindow::internalCatFile(GitPtr g, const QString &id) //@TODO:
{
if (isValidWorkingCopy(g)) {
Expand Down Expand Up @@ -5030,7 +5036,7 @@ void MainWindow::on_listWidget_unstaged_customContextMenuRequested(const QPoint
for_each_selected_files([&](QString const &path){
g->stage(path);
});
updateCurrentFilesList();
updateCurrentFileList();
return;
}
if (a == a_reset_file) {
Expand Down Expand Up @@ -5074,7 +5080,7 @@ void MainWindow::on_listWidget_unstaged_customContextMenuRequested(const QPoint
file.write(text.toUtf8());
}
}
updateCurrentFilesList();
updateCurrentFileList();
return;
}
} else {
Expand All @@ -5091,7 +5097,7 @@ void MainWindow::on_listWidget_unstaged_customContextMenuRequested(const QPoint
}
});
if (TextEditDialog::editFile(this, gitignore_path, ".gitignore", append)) {
updateCurrentFilesList();
updateCurrentFileList();
}
return;
}
Expand Down Expand Up @@ -5587,7 +5593,7 @@ TextEditorThemePtr MainWindow::themeForTextEditor()
return global->theme->text_editor_theme;
}

bool MainWindow::isValidWorkingCopy(GitPtr g) const
bool MainWindow::isValidWorkingCopy(GitPtr g)
{
return g && g->isValidWorkingCopy();
}
Expand Down Expand Up @@ -5677,11 +5683,6 @@ QString MainWindow::abbrevCommitID(const Git::CommitItem &commit)
return commit.commit_id.toQString(7);
}

void UserEventHandler::operator () (UpdateFileListEventData const &e)
{
mainwindow->updateCurrentFilesList();
}

/**
* @brief コミットログの選択が変化した
*/
Expand All @@ -5694,7 +5695,7 @@ void MainWindow::onLogCurrentItemChanged()
updateStatusBarText();

// 少し待ってファイルリストを更新する
postUserEvent(UpdateFileListEventData(), 300); // 300ms後(キーボードのオートリピート想定)
updateFileListLater(300);

updateAncestorCommitMap();
ui->tableWidget_log->viewport()->update();
Expand Down Expand Up @@ -5833,7 +5834,7 @@ void MainWindow::on_toolButton_stage_clicked()
}
stage(g, list);
}
updateCurrentFilesList();
updateCurrentFileList();
}
}

Expand All @@ -5849,7 +5850,7 @@ void MainWindow::on_toolButton_unstage_clicked()
} else {
g->unstage(selectedFiles());
}
updateCurrentFilesList();
updateCurrentFileList();
}
}

Expand Down Expand Up @@ -5888,7 +5889,7 @@ void MainWindow::on_action_edit_gitignore_triggered()
QString dir = currentWorkingCopyDir();
QString path = dir / ".gitignore";
if (editFile(path, ".gitignore")) {
updateCurrentFilesList();
updateCurrentFileList();
}
}

Expand Down
Loading

0 comments on commit 2254045

Please sign in to comment.