annotate filestates.cpp @ 108:8ae3b44c0073

* Enable/disable update and merge actions depending on whether default update and merge will actually do anything
author Chris Cannam
date Thu, 25 Nov 2010 21:08:17 +0000
parents 44ed7766d55a
children 1721c580c10e
rev   line source
Chris@92 1 #include "filestates.h"
Chris@74 2
Chris@86 3 #include "debug.h"
Chris@86 4
Chris@74 5 #include <QMap>
Chris@74 6
Chris@94 7 FileStates::FileStates()
Chris@94 8 {
Chris@94 9 }
Chris@94 10
Chris@94 11 void FileStates::clearBuckets()
Chris@94 12 {
Chris@94 13 m_modified.clear();
Chris@94 14 m_added.clear();
Chris@94 15 m_removed.clear();
Chris@94 16 m_missing.clear();
Chris@94 17 m_unknown.clear();
Chris@94 18 }
Chris@94 19
Chris@94 20 FileStates::State FileStates::charToState(QChar c, bool *ok)
Chris@94 21 {
Chris@94 22 if (ok) *ok = true;
Chris@94 23 if (c == 'M') return Modified;
Chris@94 24 if (c == 'A') return Added;
Chris@94 25 if (c == 'R') return Removed;
Chris@94 26 if (c == '!') return Missing;
Chris@94 27 if (c == '?') return Unknown;
Chris@94 28 if (c == 'C') return Clean;
Chris@94 29 if (ok) *ok = false;
Chris@94 30 return Unknown;
Chris@94 31 }
Chris@94 32
Chris@94 33 QStringList *FileStates::stateToBucket(State s)
Chris@94 34 {
Chris@94 35 switch (s) {
Chris@94 36 case Clean: default: return 0; // not implemented yet
Chris@94 37 case Modified: return &m_modified;
Chris@94 38 case Added: return &m_added;
Chris@94 39 case Unknown: return &m_unknown;
Chris@94 40 case Removed: return &m_removed;
Chris@94 41 case Missing: return &m_missing;
Chris@94 42 }
Chris@94 43 }
Chris@94 44
Chris@94 45 void FileStates::parseStates(QString text)
Chris@74 46 {
Chris@74 47 text.replace("\r\n", "\n");
Chris@74 48
Chris@94 49 clearBuckets();
Chris@74 50
Chris@74 51 QStringList lines = text.split("\n", QString::SkipEmptyParts);
Chris@94 52
Chris@74 53 foreach (QString line, lines) {
Chris@94 54
Chris@86 55 if (line.length() < 3 || line[1] != ' ') {
Chris@86 56 continue;
Chris@86 57 }
Chris@94 58
Chris@94 59 QChar c = line[0];
Chris@94 60 bool ok = false;
Chris@94 61 State s = charToState(c, &ok);
Chris@94 62 if (!ok) continue;
Chris@94 63
Chris@74 64 QString file = line.right(line.length() - 2);
Chris@94 65 QStringList *bucket = stateToBucket(s);
Chris@94 66 bucket->push_back(file);
Chris@94 67 m_stateMap[file] = s;
Chris@74 68 }
Chris@86 69
Chris@94 70 DEBUG << "FileStates: " << m_modified.size() << " modified, " << m_added.size()
Chris@94 71 << " added, " << m_removed.size() << " removed, " << m_missing.size()
Chris@94 72 << " missing, " << m_unknown.size() << " unknown" << endl;
Chris@74 73 }
Chris@92 74
Chris@94 75 QStringList FileStates::getFilesInState(State s) const
Chris@92 76 {
Chris@94 77 QStringList *sl = const_cast<FileStates *>(this)->stateToBucket(s);
Chris@94 78 if (sl) return *sl;
Chris@94 79 else return QStringList();
Chris@92 80 }
Chris@92 81
Chris@94 82 FileStates::State FileStates::getStateOfFile(QString file) const
Chris@92 83 {
Chris@94 84 if (m_stateMap.contains(file)) {
Chris@94 85 return m_stateMap[file];
Chris@92 86 }
Chris@92 87 DEBUG << "FileStates: WARNING: getStateOfFile: file "
Chris@92 88 << file << " is unknown to us: returning Unknown state, "
Chris@92 89 << "but unknown to us is not supposed to be the same "
Chris@92 90 << "thing as unknown state..."
Chris@92 91 << endl;
Chris@92 92 return Unknown;
Chris@92 93 }