Added support for $FILE $FOLDER and $WORKSPACE macros in custom action commands

FossilOrigin-Name: 381aa49e9b6b5d5424ee6dbd69d0890634d5bf08
This commit is contained in:
kostas 2015-07-10 15:36:47 +00:00
parent 78276623a4
commit 8b2137a58a
4 changed files with 66 additions and 24 deletions

View File

@ -1,5 +1,5 @@
C Support\sfor\smultiple\scustom\sactions\n C Added\ssupport\sfor\s$FILE\s$FOLDER\sand\s$WORKSPACE\smacros\sin\scustom\saction\scommands
D 2015-07-09T18:55:33.249 D 2015-07-10T15:36:47.096
F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35
F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b
F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b
@ -224,8 +224,8 @@ F src/FslSettingsDialog.cpp 2531d3709f0eab66651671e3edead2ca720d07d5
F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7 F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7
F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c
F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261
F src/MainWindow.cpp 272e8424e81eb81b1c7a996ded26a217f9ec45e5 F src/MainWindow.cpp ab8aa79742a0da21ce1d4ddbe894d523f5c7b7a5
F src/MainWindow.h b03f3d99985dd6d2bfe406239ca54e69f571db6a F src/MainWindow.h 573ffe960044afb446505949da50e0fb5ec2f75f
F src/RemoteDialog.cpp 8540cc5e2e41c4127ed8a028d84691604fa6ecac F src/RemoteDialog.cpp 8540cc5e2e41c4127ed8a028d84691604fa6ecac
F src/RemoteDialog.h 5e0438c2bd7c79b1bb44bfbd58c2181b544a9e5d F src/RemoteDialog.h 5e0438c2bd7c79b1bb44bfbd58c2181b544a9e5d
F src/RevisionDialog.cpp e58c4f8a704f00addebb15d521b76620fdafda79 F src/RevisionDialog.cpp e58c4f8a704f00addebb15d521b76620fdafda79
@ -252,7 +252,7 @@ F ui/MainWindow.ui 10181826a25056ed5aba2b23a7d110159be7c043
F ui/RemoteDialog.ui 95a4750d972ed8c49bb10b95db91ff16cfe2dd0b F ui/RemoteDialog.ui 95a4750d972ed8c49bb10b95db91ff16cfe2dd0b
F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd
F ui/SettingsDialog.ui b5858067cdb16c3f132af4cf8332e4ad255c915c F ui/SettingsDialog.ui b5858067cdb16c3f132af4cf8332e4ad255c915c
P c1562dbda3ad33559227bb0d2fd177e35cae6681 P 172938d454db50a53cd0e0435991a7fccea59ae7
R 084d6ff50c0d7d634da28bd5e41e98ef R f0292424de125969e84f6add7e808390
U kostas U kostas
Z 5e0824e216c8fc6ae7795004bb7a7ace Z 655910e224b8a744950ce119d86fd60d

View File

@ -1 +1 @@
172938d454db50a53cd0e0435991a7fccea59ae7 381aa49e9b6b5d5424ee6dbd69d0890634d5bf08

View File

@ -215,7 +215,6 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP
} }
// Custom Actions // Custom Actions
//ui->fileTableView->addAction(separator);
for(int i = 0; i < settings.GetCustomActions().size(); ++i) for(int i = 0; i < settings.GetCustomActions().size(); ++i)
{ {
customActions[i] = new QAction(this); customActions[i] = new QAction(this);
@ -1103,7 +1102,7 @@ void MainWindow::applySettings()
} }
store->endArray(); store->endArray();
applyUserActions(); updateCustomActions();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -1211,7 +1210,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths)
Q_ASSERT(data.isValid()); Q_ASSERT(data.isValid());
WorkspaceItem tv = data.value<WorkspaceItem>(); WorkspaceItem tv = data.value<WorkspaceItem>();
if(tv.Type != WorkspaceItem::TYPE_FOLDER) if(tv.Type != WorkspaceItem::TYPE_FOLDER && tv.Type != WorkspaceItem::TYPE_WORKSPACE)
continue; continue;
paths.insert(tv.Value); paths.insert(tv.Value);
@ -1722,7 +1721,7 @@ void MainWindow::on_actionSettings_triggered()
if(!SettingsDialog::run(this, settings)) if(!SettingsDialog::run(this, settings))
return; return;
applyUserActions(); updateCustomActions();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -2731,7 +2730,7 @@ void MainWindow::on_actionDeleteRemote_triggered()
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::applyUserActions() void MainWindow::updateCustomActions()
{ {
Settings::custom_actions_t custom_actions = settings.GetCustomActions(); Settings::custom_actions_t custom_actions = settings.GetCustomActions();
Q_ASSERT(MAX_CUSTOM_ACTIONS == custom_actions.size()); Q_ASSERT(MAX_CUSTOM_ACTIONS == custom_actions.size());
@ -2803,9 +2802,9 @@ void MainWindow::on_actionCustomAction_triggered()
// Command ends after first space // Command ends after first space
QChar cmd_char_end = ' '; QChar cmd_char_end = ' ';
int start = 0 ; int start = 0;
// Unless it is a quoted command // ...unless it is a quoted command
if(cmd[0]=='"') if(cmd[0]=='"')
{ {
cmd_char_end = '"'; cmd_char_end = '"';
@ -2821,29 +2820,73 @@ void MainWindow::on_actionCustomAction_triggered()
cmd = cmd.trimmed(); cmd = cmd.trimmed();
extra_params = extra_params.trimmed(); extra_params = extra_params.trimmed();
QStringList extra_param_list = extra_params.split(' ');
foreach(const QString &p, extra_param_list)
params.push_back(p);
// Extract selection // Push all additional params, except those containing macros
QStringList extra_param_list = extra_params.split(' ');
QString macro_file;
QString macro_folder;
const QString &wkdir = fossil().getCurrentWorkspace();
foreach(const QString &p, extra_param_list)
{
if(p.indexOf("$FILE")!=-1)
{
macro_file = p;
continue;
}
else if(p.indexOf("$FOLDER")!=-1)
{
macro_folder = p;
continue;
}
else if(p.indexOf("$WORKSPACE")!=-1)
{
// Add in-place
QString n = p;
n.replace("$WORKSPACE", wkdir, Qt::CaseInsensitive);
params.push_back(n);
continue;
}
params.push_back(p);
}
// Build file params
if(cust_action.IsActive(ACTION_CONTEXT_FILES)) if(cust_action.IsActive(ACTION_CONTEXT_FILES))
{ {
QStringList file_selection; QStringList file_selection;
getSelectionFilenames(file_selection, WorkspaceFile::TYPE_ALL); getSelectionFilenames(file_selection, WorkspaceFile::TYPE_ALL);
foreach(const QString &f, file_selection) foreach(const QString &f, file_selection)
{ {
QString path = QFileInfo(fossil().getCurrentWorkspace() + "/" + f).absoluteFilePath(); QString path = QFileInfo(wkdir + PATH_SEPARATOR + f).absoluteFilePath();
// Apply macro
if(!macro_file.isEmpty())
{
QString macro = macro_file;
path = macro.replace("$FILE", path, Qt::CaseInsensitive);
}
params.append(path); params.append(path);
} }
} }
// Build folder params
if(cust_action.IsActive(ACTION_CONTEXT_FOLDERS)) if(cust_action.IsActive(ACTION_CONTEXT_FOLDERS))
{ {
stringset_t path_selection; stringset_t path_selection;
getSelectionPaths(path_selection); getSelectionPaths(path_selection);
foreach(const QString &f, path_selection) foreach(const QString &f, path_selection)
{ {
QString path = QFileInfo(fossil().getCurrentWorkspace() + "/" + f).absoluteFilePath(); QString path = QFileInfo(wkdir + PATH_SEPARATOR + f).absoluteFilePath();
// Apply macro
if(!macro_folder.isEmpty())
{
QString macro = macro_folder;
path = macro.replace("$FOLDER", path, Qt::CaseInsensitive);
}
params.append(path); params.append(path);
} }
} }
@ -2852,9 +2895,8 @@ void MainWindow::on_actionCustomAction_triggered()
if(params.empty()) if(params.empty())
return; return;
log("<b>"+cmd + " "+params.join(" ")+"</b><br>", true); log("<b>"+cmd + " "+params.join(" ")+"</b><br>", true);
QProcess proc(this); QProcess proc(this);
proc.startDetached(cmd, params); proc.startDetached(cmd, params);
} }

View File

@ -53,7 +53,7 @@ private:
void updateFileView(); void updateFileView();
void selectRootDir(); void selectRootDir();
void mergeRevision(const QString& defaultRevision); void mergeRevision(const QString& defaultRevision);
void applyUserActions(); void updateCustomActions();
void fossilBrowse(const QString &fossilUrl); void fossilBrowse(const QString &fossilUrl);