- m_retrievalDir = directory;
- const QString path = directory + ".svn/text-base/";
-
- QDir dir(path);
- const QFileInfoList fileInfoList = dir.entryInfoList();
- const int size = fileInfoList.size();
- QString fileName;
- for (int i = 0; i < size; ++i) {
- const QFileInfo fileInfo = fileInfoList.at(i);
- fileName = fileInfo.fileName();
- // Remove the ".svn-base" postfix to be able to compare the filenames
- // in a fast way in SubversionPlugin::revisionState().
- fileName.chop(sizeof(".svn-base") / sizeof(char) - 1);
- if (!fileName.isEmpty()) {
- RevisionInfo info;
- info.size = fileInfo.size();
- info.timeStamp = fileInfo.lastModified();
- m_revisionInfoHash.insert(directory + fileName, info);
+
+ const QString statusCommand = "svn status " + directory;
+ FILE* in = popen(statusCommand.toAscii().data(), "r");
+ if (in == 0) {
+ return false;
+ }
+
+ char buffer[1024];
+ while (fgets(buffer, sizeof(buffer), in) != 0) {
+ RevisionState state = NormalRevision;
+
+ switch (buffer[0]) {
+ case '?': state = UnversionedRevision; break;
+ case 'M': state = LocallyModifiedRevision; break;
+ case 'A': state = AddedRevision; break;
+ case 'D': state = RemovedRevision; break;
+ case 'C': state = ConflictingRevision; break;
+ default: break;
+ }
+
+ QString filePath(buffer);
+ int pos = filePath.indexOf('/');
+ const int length = filePath.length() - pos - 1;
+ filePath = filePath.mid(pos, length);
+ if (!filePath.isEmpty()) {
+ m_revisionInfoHash.insert(filePath, state);