From 74089827887301dad1e9aebc2a7debb2c9264337 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 23 Apr 2012 13:23:18 +0000 Subject: [PATCH] Fixed issue where a complete repository would be committed even when the user has selection set FossilOrigin-Name: 8eda0def07bb784ba3db2b0ac7d0016bafa49305 --- MainWindow.cpp | 36 +++++++++++++++++++++++++++--------- MainWindow.h | 2 ++ manifest | 14 +++++++------- manifest.uuid | 2 +- 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/MainWindow.cpp b/MainWindow.cpp index c58f0ef..abeb9f1 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -1362,6 +1362,21 @@ void MainWindow::getSelectionPaths(stringset_t &paths) } } //------------------------------------------------------------------------------ +// Select all workspace files that match the includeMask +void MainWindow::getAllFilenames(QStringList &filenames, int includeMask) +{ + for(filemap_t::iterator it=workspaceFiles.begin(); it!=workspaceFiles.end(); ++it) + { + const RepoFile &e = *(*it); + + // Skip unwanted file types + if(!(includeMask & e.getType())) + continue; + + filenames.append(e.getFilePath()); + } +} +//------------------------------------------------------------------------------ void MainWindow::getDirViewSelection(QStringList &filenames, int includeMask, bool allIfEmpty) { // Determine the directories selected @@ -1630,13 +1645,12 @@ void MainWindow::on_actionPull_triggered() //------------------------------------------------------------------------------ void MainWindow::on_actionCommit_triggered() { - QStringList modified_files; - getSelectionFilenames(modified_files, RepoFile::TYPE_MODIFIED, true); + QStringList commit_files; + getSelectionFilenames(commit_files, RepoFile::TYPE_MODIFIED, true); - if(modified_files.empty()) + if(commit_files.empty()) return; - QStringList commit_files = modified_files; QStringList commit_msgs = settings.Mappings[FUEL_SETTING_COMMIT_MSG].Value.toStringList(); QString msg; @@ -1679,14 +1693,18 @@ void MainWindow::on_actionCommit_triggered() comment_file.write(msg.toUtf8()); comment_file.close(); - // Generate fossil parameters. - // When all files are selected avoid explicitly specifying filenames. - // This is necessary when committing after a merge where fossil thinks that - // we a doing a partial commit, which is not allowed in this case. + // Generate fossil parameters. QStringList params; params << "commit" << "--message-file" << QuotePath(comment_fname); - if(modified_files != commit_files) + // When a subset of files has been selected, explicitely specify each file. + // Otherwise all files will be implicitly committed by fossil. This is necessary + // when committing after a merge where fossil thinks that we are trying to do + // a partial commit which is not permitted. + QStringList all_modified_files; + getAllFilenames(all_modified_files, RepoFile::TYPE_MODIFIED); + + if(commit_files.size() != all_modified_files.size()) params << QuotePaths(commit_files); runFossil(params); diff --git a/MainWindow.h b/MainWindow.h index 7b3cacc..00c64ee 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -15,6 +15,7 @@ namespace Ui { class MainWindow; } + class QStringList; ////////////////////////////////////////////////////////////////////////// @@ -148,6 +149,7 @@ private: void getDirViewSelection(QStringList &filenames, int includeMask=RepoFile::TYPE_ALL, bool allIfEmpty=false); void getStashViewSelection(QStringList &stashNames, bool allIfEmpty=false); void getSelectionPaths(stringset_t &paths); + void getAllFilenames(QStringList &filenames, int includeMask=RepoFile::TYPE_ALL); bool startUI(); void stopUI(); void enableActions(bool on); diff --git a/manifest b/manifest index 04093ab..face620 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Added\ssupport\sfor\sportable\smode\s[Thanks\sChris]\nPortable\smode\sis\senabled\sby\spassing\sthe\s"--portable"\scommand\sline\soption\nMore\si8n\scleanups\n\n -D 2012-04-22T13:48:41.757 +C Fixed\sissue\swhere\sa\scomplete\srepository\swould\sbe\scommitted\seven\swhen\sthe\suser\shas\sselection\sset\n +D 2012-04-23T13:23:18.700 F CommitDialog.cpp a46020a9361151d8d286a2670257d01d8967bf69 F CommitDialog.h f1ee8db92103164e7db55a8407ccdcff24571b72 F CommitDialog.ui 813d7cba316e226de1a22b7e480bb969fbe9b0c4 @@ -8,8 +8,8 @@ F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 F FileTableView.cpp 5ddf8c391c9a3ac449ec61fb1db837b577afeec2 F FileTableView.h 03e56d87c2d46411b9762b87f4d301619aaf18df -F MainWindow.cpp 1ae55ca0a760c44ee33a73f35cb10e95a5c92172 -F MainWindow.h 3360113c938bee4b181f1bdc4953a09e60a0e1ed +F MainWindow.cpp 08529dd9bd1f191b092ef8122139828426fd4eda +F MainWindow.h 77b97c636283edf1f8b7630477fc458660ac2cf0 F MainWindow.ui 6c12a0b141b86c6994d5835618acba19a9ff1976 F SettingsDialog.cpp e1fad18cc020d08b82c6d35dc94f6624deec9a3b F SettingsDialog.h f5da6cab4ccc82e2eb78ec835fb849c4c104d6cc @@ -176,7 +176,7 @@ F installer/fuel.iss 13b6a938bcdf273cbd3649d2549887baa1577214 F installer/license.txt 4cc77b90af91e615a64ae04893fdffa7939db84c F main.cpp 3741082d40973584d7c9ecddb58721000d6a7f8e F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53 -P 2efeff4cc821f149dbfb010c2de6d2e36945efa4 -R 587b49ca5c6114db2276f46c88d8e4a5 +P 9cb380713c661f2ac8250800ef8e8b01fa9dafdc +R 889b3b7ddaf31528e06d8c528c76b52a U kostas -Z 807e808714a0c7db7d78ffaf0e1621b4 +Z 44f0f981f3b8c9cbc270c7a09ffa5431 diff --git a/manifest.uuid b/manifest.uuid index 3129f9b..d0a2406 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9cb380713c661f2ac8250800ef8e8b01fa9dafdc \ No newline at end of file +8eda0def07bb784ba3db2b0ac7d0016bafa49305 \ No newline at end of file