Chris@92: #include "filestates.h" Chris@74: Chris@86: #include "debug.h" Chris@86: Chris@74: #include Chris@74: Chris@94: FileStates::FileStates() Chris@94: { Chris@94: } Chris@94: Chris@94: void FileStates::clearBuckets() Chris@94: { Chris@94: m_modified.clear(); Chris@94: m_added.clear(); Chris@94: m_removed.clear(); Chris@94: m_missing.clear(); Chris@94: m_unknown.clear(); Chris@94: } Chris@94: Chris@94: FileStates::State FileStates::charToState(QChar c, bool *ok) Chris@94: { Chris@94: if (ok) *ok = true; Chris@94: if (c == 'M') return Modified; Chris@94: if (c == 'A') return Added; Chris@94: if (c == 'R') return Removed; Chris@94: if (c == '!') return Missing; Chris@94: if (c == '?') return Unknown; Chris@94: if (c == 'C') return Clean; Chris@94: if (ok) *ok = false; Chris@94: return Unknown; Chris@94: } Chris@94: Chris@94: QStringList *FileStates::stateToBucket(State s) Chris@94: { Chris@94: switch (s) { Chris@94: case Clean: default: return 0; // not implemented yet Chris@94: case Modified: return &m_modified; Chris@94: case Added: return &m_added; Chris@94: case Unknown: return &m_unknown; Chris@94: case Removed: return &m_removed; Chris@94: case Missing: return &m_missing; Chris@94: } Chris@94: } Chris@94: Chris@94: void FileStates::parseStates(QString text) Chris@74: { Chris@74: text.replace("\r\n", "\n"); Chris@74: Chris@94: clearBuckets(); Chris@74: Chris@74: QStringList lines = text.split("\n", QString::SkipEmptyParts); Chris@94: Chris@74: foreach (QString line, lines) { Chris@94: Chris@86: if (line.length() < 3 || line[1] != ' ') { Chris@86: continue; Chris@86: } Chris@94: Chris@94: QChar c = line[0]; Chris@94: bool ok = false; Chris@94: State s = charToState(c, &ok); Chris@94: if (!ok) continue; Chris@94: Chris@74: QString file = line.right(line.length() - 2); Chris@94: QStringList *bucket = stateToBucket(s); Chris@94: bucket->push_back(file); Chris@94: m_stateMap[file] = s; Chris@74: } Chris@86: Chris@94: DEBUG << "FileStates: " << m_modified.size() << " modified, " << m_added.size() Chris@94: << " added, " << m_removed.size() << " removed, " << m_missing.size() Chris@94: << " missing, " << m_unknown.size() << " unknown" << endl; Chris@74: } Chris@92: Chris@94: QStringList FileStates::getFilesInState(State s) const Chris@92: { Chris@94: QStringList *sl = const_cast(this)->stateToBucket(s); Chris@94: if (sl) return *sl; Chris@94: else return QStringList(); Chris@92: } Chris@92: Chris@94: FileStates::State FileStates::getStateOfFile(QString file) const Chris@92: { Chris@94: if (m_stateMap.contains(file)) { Chris@94: return m_stateMap[file]; Chris@92: } Chris@92: DEBUG << "FileStates: WARNING: getStateOfFile: file " Chris@92: << file << " is unknown to us: returning Unknown state, " Chris@92: << "but unknown to us is not supposed to be the same " Chris@92: << "thing as unknown state..." Chris@92: << endl; Chris@92: return Unknown; Chris@92: }