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
D 2015-07-09T18:55:33.249
C Added\ssupport\sfor\s$FILE\s$FOLDER\sand\s$WORKSPACE\smacros\sin\scustom\saction\scommands
D 2015-07-10T15:36:47.096
F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35
F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b
F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b
@ -224,8 +224,8 @@ F src/FslSettingsDialog.cpp 2531d3709f0eab66651671e3edead2ca720d07d5
F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7
F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c
F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261
F src/MainWindow.cpp 272e8424e81eb81b1c7a996ded26a217f9ec45e5
F src/MainWindow.h b03f3d99985dd6d2bfe406239ca54e69f571db6a
F src/MainWindow.cpp ab8aa79742a0da21ce1d4ddbe894d523f5c7b7a5
F src/MainWindow.h 573ffe960044afb446505949da50e0fb5ec2f75f
F src/RemoteDialog.cpp 8540cc5e2e41c4127ed8a028d84691604fa6ecac
F src/RemoteDialog.h 5e0438c2bd7c79b1bb44bfbd58c2181b544a9e5d
F src/RevisionDialog.cpp e58c4f8a704f00addebb15d521b76620fdafda79
@ -252,7 +252,7 @@ F ui/MainWindow.ui 10181826a25056ed5aba2b23a7d110159be7c043
F ui/RemoteDialog.ui 95a4750d972ed8c49bb10b95db91ff16cfe2dd0b
F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd
F ui/SettingsDialog.ui b5858067cdb16c3f132af4cf8332e4ad255c915c
P c1562dbda3ad33559227bb0d2fd177e35cae6681
R 084d6ff50c0d7d634da28bd5e41e98ef
P 172938d454db50a53cd0e0435991a7fccea59ae7
R f0292424de125969e84f6add7e808390
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
//ui->fileTableView->addAction(separator);
for(int i = 0; i < settings.GetCustomActions().size(); ++i)
{
customActions[i] = new QAction(this);
@ -1103,7 +1102,7 @@ void MainWindow::applySettings()
}
store->endArray();
applyUserActions();
updateCustomActions();
}
//------------------------------------------------------------------------------
@ -1211,7 +1210,7 @@ void MainWindow::getSelectionPaths(stringset_t &paths)
Q_ASSERT(data.isValid());
WorkspaceItem tv = data.value<WorkspaceItem>();
if(tv.Type != WorkspaceItem::TYPE_FOLDER)
if(tv.Type != WorkspaceItem::TYPE_FOLDER && tv.Type != WorkspaceItem::TYPE_WORKSPACE)
continue;
paths.insert(tv.Value);
@ -1722,7 +1721,7 @@ void MainWindow::on_actionSettings_triggered()
if(!SettingsDialog::run(this, settings))
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();
Q_ASSERT(MAX_CUSTOM_ACTIONS == custom_actions.size());
@ -2803,9 +2802,9 @@ void MainWindow::on_actionCustomAction_triggered()
// Command ends after first space
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]=='"')
{
cmd_char_end = '"';
@ -2821,29 +2820,73 @@ void MainWindow::on_actionCustomAction_triggered()
cmd = cmd.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))
{
QStringList file_selection;
getSelectionFilenames(file_selection, WorkspaceFile::TYPE_ALL);
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);
}
}
// Build folder params
if(cust_action.IsActive(ACTION_CONTEXT_FOLDERS))
{
stringset_t path_selection;
getSelectionPaths(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);
}
}
@ -2852,9 +2895,8 @@ void MainWindow::on_actionCustomAction_triggered()
if(params.empty())
return;
log("<b>"+cmd + " "+params.join(" ")+"</b><br>", true);
QProcess proc(this);
proc.startDetached(cmd, params);
}
}

View File

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