diff --git a/fuel.pro b/fuel.pro index ec1c28b..94dd085 100644 --- a/fuel.pro +++ b/fuel.pro @@ -46,34 +46,37 @@ SOURCES += src/main.cpp\ src/CommitDialog.cpp \ src/FileActionDialog.cpp \ src/SettingsDialog.cpp \ + src/CloneDialog.cpp \ + src/UpdateDialog.cpp \ src/Utils.cpp \ src/FileTableView.cpp \ - src/CloneDialog.cpp \ src/LoggedProcess.cpp \ src/BrowserWidget.cpp \ src/CustomWebView.cpp \ src/Fossil.cpp \ - src/Workspace.cpp + src/Workspace.cpp HEADERS += src/MainWindow.h \ src/CommitDialog.h \ src/FileActionDialog.h \ src/SettingsDialog.h \ + src/CloneDialog.h \ + src/UpdateDialog.h \ src/Utils.h \ src/FileTableView.h \ - src/CloneDialog.h \ src/LoggedProcess.h \ src/BrowserWidget.h \ src/CustomWebView.h \ src/Fossil.h \ - src/Workspace.h + src/Workspace.h FORMS += ui/MainWindow.ui \ ui/CommitDialog.ui \ ui/FileActionDialog.ui \ ui/SettingsDialog.ui \ ui/CloneDialog.ui \ - ui/BrowserWidget.ui + ui/BrowserWidget.ui \ + ui/UpdateDialog.ui RESOURCES += \ rsrc/resources.qrc diff --git a/manifest b/manifest index 721d49a..76f6533 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Renamed\supdateDirView\sto\supdateWorkspaceView\nDisabled\ssorting\sin\sthe\sworkspace\sview -D 2015-05-02T14:37:35.228 +C Added\s"Update\sto\sRevision"\sAction\n +D 2015-05-02T16:42:06.752 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6 F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c -F fuel.pro cda04943d336bd186ab428a81310d442aec94ca2 +F fuel.pro ffc65a5de975124eeb22032c6d9595f77ef284d8 F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741 @@ -196,14 +196,16 @@ F src/FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 F src/FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F src/FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F src/FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F src/Fossil.cpp c19b0e9b510743e7a49c7f0d2b4c5eba4b93382e -F src/Fossil.h 33b6845a8adbc351f82c5256282671a6c3d864d2 +F src/Fossil.cpp 35ee3e88a14e6673e991a3c743a4fa7ab5697a24 +F src/Fossil.h 7c91732020730f33e50663b0e5c66e6c35ad5cdc F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 5ed1c10b7ac306fa2594f7dae36028ac3cce3730 -F src/MainWindow.h 13810b522080c52541112a68890f75d20e3d8f13 +F src/MainWindow.cpp 8ae32de39af8917cdb5a5c7efc221da4a61154a1 +F src/MainWindow.h 8377cf134d64d74855b1795463356a7a817b149f F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 F src/SettingsDialog.h 4e2790f581e991c744ae9f86580f1972b8c7ff43 +F src/UpdateDialog.cpp 54df56055ee5efe1170efbed495363fb14abc8e5 +F src/UpdateDialog.h e2252c7d555e161f946e99014a6e6c6b52b4b53c F src/Utils.cpp f78728e0817b1db23007ba0d2c5c26980ee7ebca F src/Utils.h 8ad68bd227bd999eb6ea92a70bb4be2d6788d912 F src/Workspace.cpp fca14549ff85125a9fb7fd8a2722198055ea9f9a @@ -215,9 +217,10 @@ F ui/BrowserWidget.ui 5ad98b13773afadb20a1a2c22148aaebe5dbd95d F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712 F ui/CommitDialog.ui 6200f6cabdcf40a20812e811be28e0793f82516f F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d -F ui/MainWindow.ui f18e1ca4dbbf1ad031dd6660e3b1bef927bf32e8 +F ui/MainWindow.ui 798a40a0fd715b0544f608543e09038e2b1fb69a F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P 304f9bd6c61babe7abc522c1a1301fe3f1887505 -R 8eb683509bb23eb5a25729fe59a5def6 +F ui/UpdateDialog.ui 129596c2deb60211f25cefd785696ca7c7c56d42 +P 330e0819bba257c674afdadb1ab097cd7f7ffe61 +R 44924937e1415e3426bc0d8efcc11b99 U kostas -Z e1f07217ec9a1e8b6c63138e70dfd9dd +Z 30db0249ce1d6def72f41fe542e3c03a diff --git a/manifest.uuid b/manifest.uuid index e22bdb0..07b1594 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -330e0819bba257c674afdadb1ab097cd7f7ffe61 \ No newline at end of file +203cae37a6553c26a3844dcfdd3386eae9be288f \ No newline at end of file diff --git a/src/Fossil.cpp b/src/Fossil.cpp index 122595c..b786e54 100644 --- a/src/Fossil.cpp +++ b/src/Fossil.cpp @@ -286,7 +286,7 @@ bool Fossil::undoRepository(QStringList &result, bool explainOnly) } //------------------------------------------------------------------------------ -bool Fossil::updateRepository(QStringList &result, bool explainOnly) +bool Fossil::updateRepository(QStringList &result, const QString &revision, bool explainOnly) { QStringList params; params << "update"; @@ -294,6 +294,12 @@ bool Fossil::updateRepository(QStringList &result, bool explainOnly) if(explainOnly) params << "--nochange"; + if(revision.isEmpty()) + params << "--latest"; + else + params << revision; + + result.clear(); return runFossil(params, &result); } diff --git a/src/Fossil.h b/src/Fossil.h index ac25a8f..9b0da68 100644 --- a/src/Fossil.h +++ b/src/Fossil.h @@ -83,7 +83,7 @@ public: bool pullRepository(); bool cloneRepository(const QString &repository, const QUrl &url, const QUrl &proxyUrl); bool undoRepository(QStringList& result, bool explainOnly); - bool updateRepository(QStringList& result, bool explainOnly); + bool updateRepository(QStringList& result, const QString& revision, bool explainOnly); bool getFossilVersion(QString &version); bool uiRunning() const; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index a4d98cc..ef14e69 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -15,6 +15,7 @@ #include "CommitDialog.h" #include "FileActionDialog.h" #include "CloneDialog.h" +#include "UpdateDialog.h" #include "Utils.h" //----------------------------------------------------------------------------- @@ -1455,10 +1456,10 @@ void MainWindow::on_actionUpdate_triggered() QStringList res; // Do test update - if(!fossil().updateRepository(res, true)) + if(!fossil().updateRepository(res, "", true)) return; - // Fixme: parse "changes: None. Already up-to-date" and avoid dialog + // FIXME: parse "changes: None. Already up-to-date" and avoid dialog if(res.length()==0) return; @@ -1467,11 +1468,55 @@ void MainWindow::on_actionUpdate_triggered() return; // Do update - fossil().updateRepository(res, false); + fossil().updateRepository(res, "", false); refresh(); } +//------------------------------------------------------------------------------ +void MainWindow::on_actionUpdateRevision_triggered() +{ + updateRevision(""); +} + +//------------------------------------------------------------------------------ +void MainWindow::updateRevision(const QString &revision) +{ + QStringList versions; + versions.append(tr("Latest version")); + versions += getWorkspace().getBranches(); + versions += getWorkspace().getTags(); + const QString latest = tr("Latest version"); + QString defaultval = latest; + + if(!revision.isEmpty()) + defaultval = revision; + + QString selected_revision = UpdateDialog::run(this, versions, defaultval); + + if(selected_revision.isEmpty()) + return; + else if(selected_revision == latest) + selected_revision = ""; // Empty revision is "latest" + + QStringList res; + + // Do test update + if(!fossil().updateRepository(res, selected_revision, true)) + return; + + // FIXME: parse "changes: None. Already up-to-date" and avoid dialog + if(res.length()==0) + return; + + if(!FileActionDialog::run(this, tr("Update"), tr("The following files will be updated.")+"\n"+tr("Are you sure?"), res)) + return; + + // Do update + fossil().updateRepository(res, selected_revision, false); + refresh(); +} + //------------------------------------------------------------------------------ void MainWindow::loadFossilSettings() { @@ -2160,3 +2205,4 @@ QMessageBox::StandardButton MainWindow::MainWinUICallback::Query(const QString & { return DialogQuery(mainWindow, title, query, buttons); } + diff --git a/src/MainWindow.h b/src/MainWindow.h index 6d9c57b..be65bae 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -28,6 +28,7 @@ private: void scanWorkspace(); void applySettings(); void updateSettings(); + void updateRevision(const QString& revision); const QString &getCurrentWorkspace(); void setCurrentWorkspace(const QString &workspace); void log(const QString &text, bool isHTML=false); @@ -112,6 +113,8 @@ private slots: void on_fileTableView_customContextMenuRequested(const QPoint &pos); void on_workspaceTreeView_customContextMenuRequested(const QPoint &pos); + void on_actionUpdateRevision_triggered(); + private: class MainWinUICallback : public UICallback { diff --git a/src/UpdateDialog.cpp b/src/UpdateDialog.cpp new file mode 100644 index 0000000..18f7725 --- /dev/null +++ b/src/UpdateDialog.cpp @@ -0,0 +1,34 @@ +#include "UpdateDialog.h" +#include "ui_UpdateDialog.h" +#include "Utils.h" + +//----------------------------------------------------------------------------- +UpdateDialog::UpdateDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue) : + QDialog(parent), + ui(new Ui::UpdateDialog), + completer(completions, parent) +{ + ui->setupUi(this); + ui->cmbRevision->setCompleter(&completer); + + ui->cmbRevision->addItems(completions); + + if(!defaultValue.isEmpty()) + ui->cmbRevision->setCurrentText(defaultValue); +} + +//----------------------------------------------------------------------------- +UpdateDialog::~UpdateDialog() +{ + delete ui; +} + +//----------------------------------------------------------------------------- +QString UpdateDialog::run(QWidget *parent, const QStringList &completions, const QString &defaultValue) +{ + UpdateDialog dlg(parent, completions, defaultValue); + + if(dlg.exec() != QDialog::Accepted) + return QString(""); + return dlg.ui->cmbRevision->currentText(); +} diff --git a/src/UpdateDialog.h b/src/UpdateDialog.h new file mode 100644 index 0000000..590aafd --- /dev/null +++ b/src/UpdateDialog.h @@ -0,0 +1,27 @@ +#ifndef UPDATEDIALOG_H +#define UPDATEDIALOG_H + +#include +#include + +namespace Ui { + class UpdateDialog; +} + +class UpdateDialog : public QDialog +{ + Q_OBJECT + +public: + explicit UpdateDialog(QWidget *parent, const QStringList &completions, const QString &defaultValue); + ~UpdateDialog(); + + static QString run(QWidget *parent, const QStringList &completions, const QString &defaultValue); + + +private: + Ui::UpdateDialog *ui; + QCompleter completer; +}; + +#endif // UPDATEDIALOG_H diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui index 97b8d05..6f79fca 100644 --- a/ui/MainWindow.ui +++ b/ui/MainWindow.ui @@ -293,6 +293,7 @@ + @@ -889,6 +890,21 @@ Diff Stash + + + + :/icons/icons/Button Forward-01.png:/icons/icons/Button Forward-01.png + + + UpdateRevision + + + Update the workspace to a specific revision + + + Ctrl+Shift+U + + diff --git a/ui/UpdateDialog.ui b/ui/UpdateDialog.ui new file mode 100644 index 0000000..555ad45 --- /dev/null +++ b/ui/UpdateDialog.ui @@ -0,0 +1,91 @@ + + + UpdateDialog + + + Qt::WindowModal + + + + 0 + 0 + 478 + 81 + + + + Update Workspace + + + true + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Revision + + + + + + + true + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + UpdateDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + UpdateDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +