Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/MoveDeleteHook.java')
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/MoveDeleteHook.java281
1 files changed, 0 insertions, 281 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/MoveDeleteHook.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/MoveDeleteHook.java
deleted file mode 100644
index daaffbc8b..000000000
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/MoveDeleteHook.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- *
- * Contributors:
- * IBM - Initial API and implementation
- ******************************************************************************/
-package org.eclipse.team.internal.ccvs.core.util;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.team.IMoveDeleteHook;
-import org.eclipse.core.resources.team.IResourceTree;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.ICVSFile;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSResource;
-import org.eclipse.team.internal.ccvs.core.ICVSRunnable;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer;
-import org.eclipse.team.internal.ccvs.core.syncinfo.MutableResourceSyncInfo;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-
-/**
- * This hook exists to ensure that folders deletions will be recorded so that outgoing file
- * deletions can be properly communicated to the server.
- */
-public class MoveDeleteHook implements IMoveDeleteHook {
-
- /*
- * Delete the file and return true if an outgoing deletion will result
- * and the parent folder sync info needs to remain
- */
- private boolean makeFileOutgoingDeletion(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) throws CoreException {
- // Delete or move the file
- if (destination == null) {
- tree.standardDeleteFile(source, updateFlags, monitor);
- } else {
- tree.standardMoveFile(source, destination, updateFlags, monitor);
- }
- // Indicate whether the parent folder sync info must remain for outgoing deletions
- // and update the file sync info to be a deletion
- ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(source);
- boolean mustRemain = false;
- try {
- ResourceSyncInfo info = cvsFile.getSyncInfo();
- mustRemain = (info != null && ! info.isAdded());
- if (mustRemain) {
- MutableResourceSyncInfo newInfo = info.cloneMutable();
- newInfo.setDeleted(true);
- cvsFile.setSyncInfo(newInfo);
- }
- } catch (CVSException e) {
- tree.failed(e.getStatus());
- }
- return mustRemain;
- }
-
- /*
- * Delete the files contained in the folder structure rooted at source.
- * Return true if at least one file has been marked as an outgoing deletion and the parent folder must remain
- */
- private boolean makeFolderOutgoingDeletion(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) throws CoreException {
- boolean fileFound = false;
-
- // Create the destination for a move
- if (destination != null && ! destination.exists()) {
- destination.create(false, true, monitor);
- }
-
- // Move or delete the children
- IResource[] members = source.members();
- for (int i = 0; i < members.length; i++) {
- IResource child = members[i];
- if (child.getType() == IResource.FOLDER) {
- // Determine the corresponding destination folder
- IFolder destFolder = null;
- if (destination != null) {
- destFolder = destination.getFolder(child.getFullPath().removeFirstSegments(source.getFullPath().segmentCount()));
- }
-
- // Try to delete/move the child
- if (makeFolderOutgoingDeletion(tree, (IFolder)child, destFolder, updateFlags, monitor)) {
- fileFound = true;
- }
- } else if (child.getType() == IResource.FILE) {
- IFile destFile = null;
- if (destination != null) {
- destFile = destination.getFile(child.getFullPath().removeFirstSegments(source.getFullPath().segmentCount()));
- }
- fileFound = makeFileOutgoingDeletion(tree, (IFile)child, destFile, updateFlags, monitor);
- }
- }
-
- // If there were no files, we need to check if the folder already has outgoing deletions
- if ( ! fileFound) {
- try {
- ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor(source);
- ICVSResource[] files = folder.members(ICVSFolder.FILE_MEMBERS | ICVSFolder.MANAGED_MEMBERS);
- for (int i = 0; i < files.length; i++) {
- ICVSFile cvsFile = (ICVSFile)files[i];
- if (cvsFile.isManaged() && ! cvsFile.getSyncInfo().isAdded()) {
- fileFound = true;
- break;
- }
- }
- // if there is still no file, look for phantom folders that may hold file deletions
- if ( ! fileFound) {
- ICVSResource[] folders = folder.members(ICVSFolder.FOLDER_MEMBERS | ICVSFolder.MANAGED_MEMBERS);
- for (int i = 0; i < folders.length; i++) {
- ICVSFolder cvsFolder = (ICVSFolder)folders[i];
- if ( ! cvsFolder.exists() && cvsFolder.isCVSFolder()) {
- // The only time we should have a non-existant CVS folder
- // is when it holds outgoing file deletions
- fileFound = true;
- break;
- }
- }
- }
-
- // If there is still no file, we can delete the folder without any special handling
- if ( ! fileFound) {
- tree.standardDeleteFolder(source, updateFlags, monitor);
- folder.unmanage(null);
- }
- } catch (CVSException e) {
- tree.failed(e.getStatus());
- }
- }
-
- // If there were managed files found, we must remember the folder's sync info
- if (fileFound) {
- try {
- EclipseSynchronizer.getInstance().prepareForDeletion(source);
- } catch (CVSException e) {
- tree.failed(e.getStatus());
- }
- tree.standardDeleteFolder(source, updateFlags, monitor);
- }
-
- return fileFound;
- }
-
- /**
- * @see IMoveDeleteHook#deleteFile(IResourceTree, IFile, int, IProgressMonitor)
- */
- public boolean deleteFile(
- IResourceTree tree,
- IFile file,
- int updateFlags,
- IProgressMonitor monitor) {
-
- // No special action is required here.
- // The AddDeleteMoveListener will update the sync info of the file
- return false;
- }
-
- /**
- * @see IMoveDeleteHook#deleteFolder(IResourceTree, IFolder, int, IProgressMonitor)
- */
- public boolean deleteFolder(
- final IResourceTree tree,
- final IFolder folder,
- final int updateFlags,
- IProgressMonitor monitor) {
-
- final ICVSFolder cvsFolder = CVSWorkspaceRoot.getCVSFolderFor(folder);
- try {
- if (cvsFolder.isManaged()) {
- cvsFolder.run(new ICVSRunnable() {
- public void run(IProgressMonitor monitor) throws CVSException {
- try {
- makeFolderOutgoingDeletion(tree, folder, null, updateFlags, monitor);
- } catch (CoreException e) {
- tree.failed(e.getStatus());
- }
- }
- }, monitor);
- return true;
- }
- } catch (CVSException e) {
- tree.failed(e.getStatus());
- }
- return false;
- }
-
- /**
- * @see IMoveDeleteHook#deleteProject(IResourceTree, IProject, int, IProgressMonitor)
- */
- public boolean deleteProject(
- IResourceTree tree,
- IProject project,
- int updateFlags,
- IProgressMonitor monitor) {
-
- // We need to flush any remembered folder deletions for the deleted project
- try {
- EclipseSynchronizer.getInstance().prepareForDeletion(project);
- } catch (CVSException e) {
- CVSProviderPlugin.log(e.getStatus());
- }
- return false;
- }
-
- /**
- * @see IMoveDeleteHook#moveFile(IResourceTree, IFile, IFile, int, IProgressMonitor)
- */
- public boolean moveFile(
- IResourceTree tree,
- IFile source,
- IFile destination,
- int updateFlags,
- IProgressMonitor monitor) {
-
- // No special action is required here.
- // The AddDeleteMoveListener will update the sync info of the source
- return false;
- }
-
- /**
- * @see IMoveDeleteHook#moveFolder(IResourceTree, IFolder, IFolder, int, IProgressMonitor)
- */
- public boolean moveFolder(
- final IResourceTree tree,
- final IFolder source,
- final IFolder destination,
- final int updateFlags,
- IProgressMonitor monitor) {
-
- final ICVSFolder cvsFolder = CVSWorkspaceRoot.getCVSFolderFor(source);
- try {
- if (cvsFolder.isManaged()) {
- cvsFolder.run(new ICVSRunnable() {
- public void run(IProgressMonitor monitor) throws CVSException {
- try {
- makeFolderOutgoingDeletion(tree, source, destination, updateFlags, monitor);
- } catch (CoreException e) {
- tree.failed(e.getStatus());
- }
- }
- }, monitor);
- return true;
- }
- } catch (CVSException e) {
- tree.failed(e.getStatus());
- }
-
- return false;
- }
-
- /**
- * @see IMoveDeleteHook#moveProject(IResourceTree, IProject, IProjectDescription, int, IProgressMonitor)
- */
- public boolean moveProject(
- IResourceTree tree,
- IProject source,
- IProjectDescription description,
- int updateFlags,
- IProgressMonitor monitor) {
-
- // We need to move (or flush) any remembered folder deletions for the deleted project
- // XXX We flush for now. This means that deleting a managed folder and then moving the
- // project will mean that the file deletions will be lost.
- try {
- EclipseSynchronizer.getInstance().prepareForDeletion(source);
- } catch (CVSException e) {
- CVSProviderPlugin.log(e.getStatus());
- }
- return false;
- }
-
-}

Back to the top