void VcsAnnotateTaskHandler::handle(const ProjectExplorer::Task &task) { QFileInfo fi(task.file); Core::IVersionControl *vc = Core::ICore::instance()->vcsManager()->findVersionControlForDirectory(fi.absolutePath()); Q_ASSERT(vc); Q_ASSERT(vc->supportsOperation(Core::IVersionControl::AnnotateOperation)); vc->vcsAnnotate(fi.absoluteFilePath(), task.line); }
bool VcsAnnotateTaskHandler::canHandle(const ProjectExplorer::Task &task) { QFileInfo fi(task.file); if (!fi.exists() || !fi.isFile() || !fi.isReadable()) return false; Core::IVersionControl *vc = Core::ICore::instance()->vcsManager()->findVersionControlForDirectory(fi.absolutePath()); if (!vc) return false; return vc->supportsOperation(Core::IVersionControl::AnnotateOperation); }
void DocumentManager::addFileToVersionControl(const QString &directoryPath, const QString &newFilePath) { Core::IVersionControl *versionControl = Core::VcsManager::findVersionControlForDirectory(directoryPath); if (versionControl && versionControl->supportsOperation(Core::IVersionControl::AddOperation)) { const QMessageBox::StandardButton button = QMessageBox::question(Core::ICore::mainWindow(), Core::VcsManager::msgAddToVcsTitle(), Core::VcsManager::msgPromptToAddToVcs(QStringList(newFilePath), versionControl), QMessageBox::Yes | QMessageBox::No); if (button == QMessageBox::Yes && !versionControl->vcsAdd(newFilePath)) { Core::AsynchronousMessageBox::warning(Core::VcsManager::msgAddToVcsFailedTitle(), Core::VcsManager::msgToAddToVcsFailed(QStringList(newFilePath), versionControl)); } } }
bool FileUtils::renameFile(const QString &orgFilePath, const QString &newFilePath) { if (orgFilePath == newFilePath) return false; QString dir = QFileInfo(orgFilePath).absolutePath(); Core::IVersionControl *vc = Core::ICore::vcsManager()->findVersionControlForDirectory(dir); bool result = false; if (vc && vc->supportsOperation(Core::IVersionControl::MoveOperation)) result = vc->vcsMove(orgFilePath, newFilePath); if (!result) // The moving via vcs failed or the vcs does not support moving, fall back result = fileSystemRenameFile(orgFilePath, newFilePath); if (result) { // yeah we moved, tell the filemanager about it Core::DocumentManager::renamedFile(orgFilePath, newFilePath); } return result; }
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; Core::IDocument *currentDocument = Core::EditorManager::currentDocument(); if (!currentDocument) { state.currentFile.clear(); } else { state.currentFile = currentDocument->filePath(); if (state.currentFile.isEmpty()) { 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 Core::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 = Core::VcsManager::findVersionControlForDirectory( state.currentFileDirectory, &state.currentFileTopLevel); if (!fileControl) state.clearFile(); } // Check for project, find the control Core::IVersionControl *projectControl = 0; if (const ProjectExplorer::Project *currentProject = ProjectExplorer::ProjectExplorerPlugin::currentProject()) { state.currentProjectPath = currentProject->projectDirectory().toString(); state.currentProjectName = currentProject->displayName(); projectControl = Core::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. Core::IVersionControl *vc = fileControl; if (!vc) vc = projectControl; if (!vc) { state.clearPatchFile(); // Need a repository to patch Core::EditorManager::setWindowTitleVcsTopic(QString()); } if (debug) qDebug() << state << (vc ? vc->displayName() : QLatin1String("No version control")); emit stateChanged(state, vc); }