QString VcsJsExtension::displayName(const QString &vcsId) const { IVersionControl *vc = VcsManager::versionControl(Id::fromString(vcsId)); return vc ? vc->displayName() : QString(); }
void StateListener::slotStateChanged() { // Get the current file. Are we on a temporary submit editor indicated by // temporary path prefix or does the file contains a hash, indicating a project // folder? State state; IDocument *currentDocument = EditorManager::currentDocument(); if (!currentDocument) { state.currentFile.clear(); } else { state.currentFile = currentDocument->filePath().toString(); if (state.currentFile.isEmpty() || currentDocument->isTemporary()) state.currentFile = VcsBasePlugin::source(currentDocument); } QScopedPointer<QFileInfo> currentFileInfo; // Instantiate QFileInfo only once if required. if (!state.currentFile.isEmpty()) { const bool isTempFile = state.currentFile.startsWith(QDir::tempPath()); // Quick check: Does it look like a patch? const bool isPatch = state.currentFile.endsWith(QLatin1String(".patch")) || state.currentFile.endsWith(QLatin1String(".diff")); if (isPatch) { // Patch: Figure out a name to display. If it is a temp file, it could be // Codepaster. Use the display name of the editor. state.currentPatchFile = state.currentFile; if (isTempFile) state.currentPatchFileDisplayName = displayNameOfEditor(state.currentPatchFile); if (state.currentPatchFileDisplayName.isEmpty()) { currentFileInfo.reset(new QFileInfo(state.currentFile)); state.currentPatchFileDisplayName = currentFileInfo->fileName(); } } // For actual version control operations on it: // Do not show temporary files and project folders ('#') if (isTempFile || state.currentFile.contains(QLatin1Char('#'))) state.currentFile.clear(); } // Get the file and its control. Do not use the file unless we find one IVersionControl *fileControl = 0; if (!state.currentFile.isEmpty()) { if (currentFileInfo.isNull()) currentFileInfo.reset(new QFileInfo(state.currentFile)); if (currentFileInfo->isDir()) { state.currentFile.clear(); state.currentFileDirectory = currentFileInfo->absoluteFilePath(); } else { state.currentFileDirectory = currentFileInfo->absolutePath(); state.currentFileName = currentFileInfo->fileName(); } fileControl = VcsManager::findVersionControlForDirectory( state.currentFileDirectory, &state.currentFileTopLevel); if (!fileControl) state.clearFile(); } // Check for project, find the control IVersionControl *projectControl = 0; Project *currentProject = ProjectTree::currentProject(); if (!currentProject) currentProject = SessionManager::startupProject(); if (currentProject) { state.currentProjectPath = currentProject->projectDirectory().toString(); state.currentProjectName = currentProject->displayName(); projectControl = VcsManager::findVersionControlForDirectory(state.currentProjectPath, &state.currentProjectTopLevel); if (projectControl) { // If we have both, let the file's one take preference if (fileControl && projectControl != fileControl) state.clearProject(); } else { state.clearProject(); // No control found } } // Assemble state and emit signal. IVersionControl *vc = fileControl; if (!vc) vc = projectControl; if (!vc) state.clearPatchFile(); // Need a repository to patch if (debug) qDebug() << state << (vc ? vc->displayName() : QLatin1String("No version control")); EditorManager::updateWindowTitles(); emit stateChanged(state, vc); }