diff --git a/manifest b/manifest index 35a016b..7fe063f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\smerge\ssupport -D 2015-05-03T11:44:04.852 +C Commits\sare\snow\sallowed\swhen\sa\smerge\sintegration\shas\soccured\seven\swhen\sno\sfiles\sare\smodified\nSupport\sfor\sforced\smerges\nContext\smenus\sare\soffset\sby\sa\spixel\sto\sprevent\sunintended\sclicks\n +D 2015-05-03T12:27:11.377 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -196,20 +196,20 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp 57363e0f487f325ba2eae6fdcf29756c9b1ae4a9 -F src/Fossil.h fb34964797dc10cea02bdf2e3f2c97a74fddafc5 +F src/Fossil.cpp 01b620c7ca283be385211e8276aad98dc642b0ef +F src/Fossil.h f9b49ed930af2159f97a86ce0f6da821a0b0819e F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 7ae75136eb3a2f867de4281cbe428a176c3d11c8 +F src/MainWindow.cpp 1ea5808d0ad4cff7adaa7c910a4438bef3245cbc F src/MainWindow.h a4f3c753debe65d6231721c9948c4e8dee699021 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 -F src/UpdateDialog.cpp 08b0261de45babd947a0fbbd5af6bf8b58b74735 -F src/UpdateDialog.h bf04816f3cc5425beaaca72ca05bcc793d4ca204 +F src/UpdateDialog.cpp 4dd021bc57dde4f6e3f444f5f8a02f5a4a736478 +F src/UpdateDialog.h b3ecf0401659a9e48a4f832bd996fe27c6d15f40 F src/Utils.cpp 748a58f19187aff7f3b867894129291cbe091678 F src/Utils.h 9cc125f59b8d46ff47bbde4c2cf9bc77f8e2553b -F src/Workspace.cpp 12edd94656a0aaef20798f883b59af3074466cec -F src/Workspace.h 890fdb5f6b768809bc962374d22422dbfb6e89a1 +F src/Workspace.cpp f68a4ca05d1b7c5c345fbd89527691813593c663 +F src/Workspace.h e13d21c15f27c2b36368a06f4316f261ff782814 F src/main.cpp 2ac8badc2a63fa123ceae53382ce24cfe1b5a54b F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x F tools/pack.sh d7f38a498c4e9327fecd6a6e5ac27be270d43008 x @@ -219,8 +219,8 @@ F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui d4fc7971a0717677adb1be0bb88502dfcb92f5c4 F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -F ui/UpdateDialog.ui cd909f40c16e439181664e53bc3e86c2df647e3f -P 87468705beaaef842877ab8459e287a61edf4bc3 -R 5791f89a3c32b1103d6b1aa0c81d25f4 +F ui/UpdateDialog.ui 392cdba296dd4b79145992a85e79748e7c34580d +P ac65fbf8d33a9e64fb97bd8652a43b4d11c8e538 +R 999f69cdb7954fc29187e1f6edb999d1 U kostas -Z 6e82b9757fd44eb9f7e8cfc7e84094f4 +Z 5cfca8d448bbfd5145ee8de41f944a10 diff --git a/manifest.uuid b/manifest.uuid index 803c95d..39bbfab 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ac65fbf8d33a9e64fb97bd8652a43b4d11c8e538 \ No newline at end of file +b0f81bc9c4d226d8406f65d9ad02099205d7e067 \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index b00f79e..3852cfb 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -119,6 +119,12 @@ bool Fossil::listFiles(QStringList &files) return runFossil(QStringList() << "ls" << "-l", &files, RUNFLAGS_SILENT_ALL); } +//------------------------------------------------------------------------------ +bool Fossil::status(QStringList &result) +{ + return runFossil(QStringList() << "status", &result, RUNFLAGS_SILENT_ALL); +} + //------------------------------------------------------------------------------ bool Fossil::pushRepository() { @@ -549,7 +555,7 @@ bool Fossil::branchNew(const QString& name, const QString& revisionBasis, bool i } //------------------------------------------------------------------------------ -bool Fossil::branchMerge(QStringList &res, const QString& revision, bool integrate, bool testOnly) +bool Fossil::branchMerge(QStringList &res, const QString& revision, bool integrate, bool force, bool testOnly) { QStringList params; @@ -558,6 +564,9 @@ bool Fossil::branchMerge(QStringList &res, const QString& revision, bool integra if(integrate) params << "--integrate"; + if(force) + params << "--force"; + if(testOnly) params << "--dry-run"; diff --git a/src/Fossil.h b/src/Fossil.h index ca6d5c9..093f306 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -92,6 +92,8 @@ public: void stopUI(); bool listFiles(QStringList &files); + bool status(QStringList& result); + bool diffFile(const QString &repoFile); bool commitFiles(const QStringList &fileList, const QString &comment); bool addFiles(const QStringList& fileList); @@ -117,7 +119,7 @@ public: bool branchList(QStringList& branches, QStringList& activeBranches); bool branchNew(const QString& name, const QString& revisionBasis, bool isPrivate=false); - bool branchMerge(QStringList& res, const QString& revision, bool integrate, bool testOnly); + bool branchMerge(QStringList& res, const QString& revision, bool integrate, bool force, bool testOnly); const QString &getCurrentRevision() const { return currentRevision; } const QStringList &getCurrentTags() const { return currentTags; } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index c02fceb..67fee15 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1240,7 +1240,7 @@ void MainWindow::on_actionCommit_triggered() QStringList commit_files; getSelectionFilenames(commit_files, WorkspaceFile::TYPE_MODIFIED, true); - if(commit_files.empty()) + if(commit_files.empty() && !getWorkspace().otherChanges()) return; QStringList commit_msgs = settings.GetValue(FUEL_SETTING_COMMIT_MSG).toStringList(); @@ -1260,7 +1260,7 @@ void MainWindow::on_actionCommit_triggered() return; // Since via the commit dialog the user can deselect all files - if(commit_files.empty()) + if(commit_files.empty() && !getWorkspace().otherChanges()) return; // Do commit @@ -2004,7 +2004,7 @@ void MainWindow::on_textBrowser_customContextMenuRequested(const QPoint &pos) //------------------------------------------------------------------------------ void MainWindow::on_fileTableView_customContextMenuRequested(const QPoint &pos) { - QPoint gpos = QCursor::pos(); + QPoint gpos = QCursor::pos() + QPoint(1, 1); #ifdef Q_OS_WIN if(qApp->keyboardModifiers() & Qt::SHIFT) { @@ -2059,7 +2059,7 @@ void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &) if(menu) { - QPoint pos = QCursor::pos(); + QPoint pos = QCursor::pos() + QPoint(1, 1); menu->popup(pos); } } @@ -2301,20 +2301,23 @@ void MainWindow::MergeRevision(const QString &defaultRevision) QString revision = defaultRevision; bool integrate = false; - revision = UpdateDialog::runMerge(this, tr("Merge"), versionList, revision, integrate); + bool force = false; + revision = UpdateDialog::runMerge(this, tr("Merge"), versionList, revision, integrate, force); if(revision.isEmpty()) return; // Do test merge - if(!fossil().branchMerge(res, revision, integrate, true)) + if(!fossil().branchMerge(res, revision, integrate, force, true)) return; if(!FileActionDialog::run(this, tr("Merge"), tr("The following changesd will be made.")+"\n"+tr("Are you sure?"), res)) return; // Do update - fossil().branchMerge(res, revision, integrate, false); + fossil().branchMerge(res, revision, integrate, force, false); + + log(tr("Merge completed. Don't forget to commit!")+"\n"); refresh(); } diff --git a/src/UpdateDialog.cpp b/src/UpdateDialog.cpp index 9fdae32..aacdc1d 100644 --- a/src/UpdateDialog.cpp +++ b/src/UpdateDialog.cpp @@ -32,6 +32,8 @@ QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QSt dlg.ui->lineName->setVisible(false); dlg.ui->lblIntegrate->setVisible(false); dlg.ui->chkIntegrate->setVisible(false); + dlg.ui->lblForce->setVisible(false); + dlg.ui->chkForce->setVisible(false); dlg.adjustSize(); @@ -41,7 +43,7 @@ QString UpdateDialog::runUpdate(QWidget *parent, const QString &title, const QSt } //----------------------------------------------------------------------------- -QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, bool &integrate) +QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, bool &integrate, bool &force) { UpdateDialog dlg(parent, completions, defaultValue); dlg.setWindowTitle(title); @@ -50,12 +52,17 @@ QString UpdateDialog::runMerge(QWidget *parent, const QString &title, const QStr dlg.ui->lblIntegrate->setVisible(true); dlg.ui->chkIntegrate->setVisible(true); dlg.ui->chkIntegrate->setChecked(integrate); + dlg.ui->lblForce->setVisible(true); + dlg.ui->chkForce->setVisible(true); + dlg.ui->chkForce->setChecked(force); + dlg.adjustSize(); if(dlg.exec() != QDialog::Accepted) return QString(""); integrate = dlg.ui->chkIntegrate->checkState() == Qt::Checked; + force = dlg.ui->chkForce->checkState() == Qt::Checked; return dlg.ui->cmbRevision->currentText().trimmed(); } @@ -71,6 +78,9 @@ bool UpdateDialog::runNewTag(QWidget *parent, const QString &title, const QStrin dlg.ui->lineName->setVisible(true); dlg.ui->lblIntegrate->setVisible(false); dlg.ui->chkIntegrate->setVisible(false); + dlg.ui->lblForce->setVisible(false); + dlg.ui->chkForce->setVisible(false); + dlg.adjustSize(); if(dlg.exec() != QDialog::Accepted) diff --git a/src/UpdateDialog.h b/src/UpdateDialog.h index 466bf30..5714f00 100644 --- a/src/UpdateDialog.h +++ b/src/UpdateDialog.h @@ -17,7 +17,7 @@ public: ~UpdateDialog(); static QString runUpdate(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue); - static QString runMerge(QWidget* parent, const QString& title, const QStringList& completions, const QString& defaultValue, bool& integrate); + static QString runMerge(QWidget* parent, const QString& title, const QStringList& completions, const QString& defaultValue, bool& integrate, bool& force); static bool runNewTag(QWidget *parent, const QString &title, const QStringList &completions, const QString &defaultValue, QString &revision, QString &name); private: diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 2cf1baf..fb5c467 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -17,6 +17,10 @@ void Workspace::clearState() getFiles().clear(); getPaths().clear(); + stashMap.clear(); + branchList.clear(); + tags.clear(); + isIntegrated = false; } //------------------------------------------------------------------------------ @@ -184,7 +188,20 @@ void Workspace::scanWorkspace(bool scanLocal, bool scanIgnored, bool scanModifie getPaths().insert(path); } - // Load the stash + // Check if the repository needs integration + res.clear(); + fossil().status(res); + isIntegrated = false; + foreach(const QString &l, res) + { + if(l.trimmed().indexOf("INTEGRATE")==0) + { + isIntegrated = true; + break; + } + } + + // Load the stashes, branches and tags fossil().stashList(getStashes()); fossil().branchList(branchList, branchList); diff --git a/src/Workspace.h b/src/Workspace.h index b8bd645..e7db2eb 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -123,6 +123,7 @@ public: stashmap_t &getStashes() { return stashMap; } QStringMap &getTags() { return tags; } QStringList &getBranches() { return branchList; } + bool otherChanges() const { return isIntegrated; } private: Fossil bridge; @@ -131,6 +132,7 @@ private: stashmap_t stashMap; QStringList branchList; QStringMap tags; + bool isIntegrated; QStandardItemModel repoFileModel; QStandardItemModel repoDirModel; diff --git a/ui/UpdateDialog.ui b/ui/UpdateDialog.ui index 5a17f54..b588ddf 100644 --- a/ui/UpdateDialog.ui +++ b/ui/UpdateDialog.ui @@ -10,7 +10,7 @@ 0 0 478 - 146 + 177 @@ -56,6 +56,13 @@ + + + + Force + + + @@ -63,6 +70,13 @@ + + + + + + +