# HG changeset patch # User Chris Cannam # Date 1290606633 0 # Node ID dfb7a274b90ffa43a6ce624b08f52c39f9d994bf # Parent 06f4fffd5287f765e752a722e409fc9e7f2dce3e * Highlight untracked files that are newer than last repo interaction diff -r 06f4fffd5287 -r dfb7a274b90f filestatuswidget.cpp --- a/filestatuswidget.cpp Wed Nov 24 13:23:30 2010 +0000 +++ b/filestatuswidget.cpp Wed Nov 24 13:50:33 2010 +0000 @@ -20,9 +20,15 @@ #include #include #include +#include +#include +#include + +#include "debug.h" FileStatusWidget::FileStatusWidget(QWidget *parent) : - QWidget(parent) + QWidget(parent), + m_dateReference(0) { QGridLayout *layout = new QGridLayout; setLayout(layout); @@ -76,11 +82,28 @@ layout->setRowStretch(++row, 20); } +FileStatusWidget::~FileStatusWidget() +{ + delete m_dateReference; +} + void FileStatusWidget::setLocalPath(QString p) { m_localPath = p; m_localPathLabel->setText(p); + delete m_dateReference; + m_dateReference = new QFileInfo(p + "/.hg/dirstate"); + if (!m_dateReference->exists() || + !m_dateReference->isFile() || + !m_dateReference->isReadable()) { + DEBUG << "FileStatusWidget::setLocalPath: date reference file " + << m_dateReference->absoluteFilePath() + << " does not exist, is not a file, or cannot be read" + << endl; + delete m_dateReference; + m_dateReference = 0; + } } void @@ -98,6 +121,15 @@ } void +FileStatusWidget::highlightFile(QListWidget *w, int i) +{ + DEBUG << "FileStatusWidget: highlighting file at " << i << endl; + QListWidgetItem *item = w->item(i); + item->setForeground(Qt::red); + //!!! and a nice gold star +} + +void FileStatusWidget::updateWidgets() { FileStates &sp = m_fileStates; @@ -113,5 +145,22 @@ listmap[sl]->addItems(*sl); listmap[sl]->parentWidget()->setVisible(!sl->empty()); } + + if (m_dateReference) { + // Highlight untracked files that have appeared since the + // last interaction with the repo + QDateTime refTime = m_dateReference->lastModified(); + DEBUG << "reference time: " << refTime << endl; + for (int i = 0; i < m_unknownList->count(); ++i) { + QString fn(m_localPath + "/" + m_unknownList->item(i)->text()); + DEBUG << "comparing with " << fn << endl; + QFileInfo fi(fn); + if (fi.exists() && fi.lastModified() > refTime) { + DEBUG << "file " << fn << " is newer (" << fi.lastModified() + << ") than reference" << endl; + highlightFile(m_unknownList, i); + } + } + } } diff -r 06f4fffd5287 -r dfb7a274b90f filestatuswidget.h --- a/filestatuswidget.h Wed Nov 24 13:23:30 2010 +0000 +++ b/filestatuswidget.h Wed Nov 24 13:50:33 2010 +0000 @@ -24,6 +24,7 @@ class QLabel; class QListWidget; +class QFileInfo; class FileStatusWidget : public QWidget { @@ -31,6 +32,7 @@ public: FileStatusWidget(QWidget *parent = 0); + ~FileStatusWidget(); QString localPath() const { return m_localPath; } void setLocalPath(QString p); @@ -62,7 +64,10 @@ QListWidget *m_removedList; QListWidget *m_missingList; + QFileInfo *m_dateReference; + void updateWidgets(); + void highlightFile(QListWidget *, int); }; #endif diff -r 06f4fffd5287 -r dfb7a274b90f hgrunner.cpp --- a/hgrunner.cpp Wed Nov 24 13:23:30 2010 +0000 +++ b/hgrunner.cpp Wed Nov 24 13:50:33 2010 +0000 @@ -170,7 +170,7 @@ void HgRunner::checkPrompts(QString chunk) { - DEBUG << "checkPrompts: " << chunk << endl; + //DEBUG << "checkPrompts: " << chunk << endl; QString text = chunk.trimmed(); QString lower = text.toLower();