Support for Fossil queries

FileActionDialog now becomes a (lame) question dialog box when no data is provided


FossilOrigin-Name: 6a6a654b0db2537fc73774e7dc37d25cb2ae63d7
This commit is contained in:
kostas
2011-08-06 16:15:50 +00:00
parent 3d0827763e
commit 40fabe4378
4 changed files with 121 additions and 22 deletions

View File

@ -22,9 +22,14 @@ FileActionDialog::FileActionDialog(QWidget *parent, const QString &title, const
ui->verticalLayout->insertWidget(2, checkBox); ui->verticalLayout->insertWidget(2, checkBox);
} }
if(listData.empty())
ui->listView->setVisible(false);
else
{
foreach(const QString &s, listData) foreach(const QString &s, listData)
itemModel.appendRow(new QStandardItem(s)); itemModel.appendRow(new QStandardItem(s));
} }
}
FileActionDialog::~FileActionDialog() FileActionDialog::~FileActionDialog()
{ {

View File

@ -445,6 +445,22 @@ bool MainWindow::runFossil(const QStringList &args, QStringList *output, bool si
return exit_code == EXIT_SUCCESS; return exit_code == EXIT_SUCCESS;
} }
//------------------------------------------------------------------------------
static QString ParseFossilQuery(QString query)
{
// Extract question
int qend = query.indexOf('(');
if(qend == -1)
qend = query.indexOf('[');
Q_ASSERT(qend!=-1);
query = query.left(qend);
query = query.trimmed();
query += "?";
query[0]=QString(query[0]).toUpper()[0];
return query;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Run fossil. Returns true if execution was succesfull regardless if fossil // Run fossil. Returns true if execution was succesfull regardless if fossil
// issued an error // issued an error
@ -471,22 +487,100 @@ bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int
return false; return false;
} }
process.waitForFinished(); #ifdef Q_WS_WIN
QString std_output = process.readAllStandardOutput(); const char *ans_yes = "y\r\n";
const char *ans_no = "n\r\n";
const char *ans_always = "a\r\n";
#else
const char *ans_yes = "y\n";
const char *ans_no = "n\n";
const char *ans_always = "a\n";
#endif
QStringList lines = std_output.split('\n'); QStringList local_output;
while(process.state()==QProcess::Running || !process.atEnd())
for(QStringList::iterator it=lines.begin(); it!=lines.end(); ++it)
{ {
QString line = it->trimmed(); bool has_line = process.canReadLine();
qint64 bytes_available=process.bytesAvailable();
if(!process.waitForReadyRead(1*1000) && !has_line && bytes_available==0)
break;
// If no line yet, but some bytes available, maybe fossil is waiting for
// user input
if(!has_line && bytes_available>0)
{
QString line = process.readAll();
line = line.trimmed();
QString query = line.toLower();
// Have we encountered a y/n query?
if(line[line.length()-1]=='?' && query.indexOf("y/n")!=-1)
{
log(line);
// Extract question
query = ParseFossilQuery(query);
int res = QMessageBox::question(this, "Fossil", query, QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
if(res==QMessageBox::Yes)
{
process.write(ans_yes, COUNTOF(ans_yes));
log("Y\n");
}
else
{
process.write(ans_no, COUNTOF(ans_no));
log("N\n");
}
}
// Have we encountered a y/n/always query?
else if(line[line.length()-1]=='?' && query.indexOf("a=always/y/n")!=-1)
{
log(line);
// Extract question
query = ParseFossilQuery(query);
int res = QMessageBox::question(this, "Fossil", query, QMessageBox::Yes|QMessageBox::No|QMessageBox::YesToAll, QMessageBox::No);
if(res==QDialogButtonBox::Yes)
{
process.write(ans_yes, COUNTOF(ans_yes));
log("Y\n");
}
else if(res==QDialogButtonBox::YesToAll)
{
process.write(ans_always, COUNTOF(ans_always));
log("A\n");
}
else
{
process.write(ans_no, COUNTOF(ans_no));
log("N\n");
}
}
}
while(process.canReadLine())
{
QString line = process.readLine();
line = line.trimmed();
//QString line = it->trimmed();
if(line.isEmpty()) if(line.isEmpty())
continue; continue;
local_output.append(line);
if(output) if(output)
output->append(line); output->append(line);
if(!silent) if(!silent)
log(line+"\n"); log(line+"\n");
} }
}
// Must be finished by now
Q_ASSERT(process.state()==QProcess::NotRunning);
QProcess::ExitStatus es = process.exitStatus(); QProcess::ExitStatus es = process.exitStatus();
if(es!=QProcess::NormalExit) if(es!=QProcess::NormalExit)

View File

@ -1,12 +1,12 @@
C FileActionDialog\snow\ssupports\svariable\smodal\sbuttons\n C Support\sfor\sFossil\squeries\nFileActionDialog\snow\sbecomes\sa\s(lame)\squestion\sdialog\sbox\swhen\sno\sdata\sis\sprovided\n
D 2011-08-06T15:34:40.595 D 2011-08-06T16:15:50.633
F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e
F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a
F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154 F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154
F FileActionDialog.cpp 629f29f676f3e547965f350fb9a4ee5797cc3e0b F FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8
F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce
F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7
F MainWindow.cpp 96ce6b4bb5ee66f04a43e2171b20e8ee510a5ac7 F MainWindow.cpp 10d04becd808da62ccf380d6c16f5bad8f3b06e9
F MainWindow.h 8a23caf1a70d41fe60a25894649a88b1efb851ba F MainWindow.h 8a23caf1a70d41fe60a25894649a88b1efb851ba
F MainWindow.ui 9f901c1f06b24df3cbd36d5349ffe0d82896c05b F MainWindow.ui 9f901c1f06b24df3cbd36d5349ffe0d82896c05b
F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e
@ -173,7 +173,7 @@ F icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b
F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038
F main.cpp aed85ed9766ddb8685e300e8ca4a0dc193ae2586 F main.cpp aed85ed9766ddb8685e300e8ca4a0dc193ae2586
F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53 F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53
P 665b2ad1b609530a9c2c2815e143213e5e691100 P d80b84c6b58b7daf71174d32a8c33cab0e2aabac
R 1f233c6d016ce42191b217639282c217 R dc4d20cff6babdcbf4a5e0cb3bc252f9
U kostas U kostas
Z f4122d426b89a67b7273148c8690abf1 Z ac4a65db19b5eab4386101e1f0358467

View File

@ -1 +1 @@
d80b84c6b58b7daf71174d32a8c33cab0e2aabac 6a6a654b0db2537fc73774e7dc37d25cb2ae63d7