1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 23:05:47 +02:00

[191370] fix: [dstore] Supertransfer zip not deleted when cancelling copy

This commit is contained in:
Xuan Chen 2007-12-31 03:03:07 +00:00
parent a7be65e084
commit 66d9007048
4 changed files with 103 additions and 15 deletions

View file

@ -37,6 +37,7 @@
* David Mcknight (IBM) - [203114] don't treat XML files specially (no hidden prefs for bin vs text)
* David McKnight (IBM) - [209552] get rid of copy APIs to be clearer with download and upload
* David McKnight (IBM) - [143503] encoding and isBinary needs to be stored in the IFile properties
* Xuan Chen (IBM) - [191370] [dstore] Supertransfer zip not deleted when cancelling copy
********************************************************************************/
package org.eclipse.rse.files.ui.resources;
@ -1283,6 +1284,19 @@ public class UniversalFileTransferUtility
{
if (monitor != null && monitor.isCanceled())
{
try
{
IRemoteFile[] results = targetFS.getRemoteFileObjects((String[])newFilePathList.toArray(new String[newFilePathList.size()]), monitor);
resultSet = new SystemRemoteResourceSet(targetFS, results);
if (workspaceSet.hasMessage())
{
resultSet.setMessage(workspaceSet.getMessage());
}
}
catch (Exception e)
{
e.printStackTrace();
}
return resultSet;
}
@ -1450,7 +1464,7 @@ public class UniversalFileTransferUtility
}
catch (SystemMessageException e)
{
SystemMessageDialog.displayMessage(e);
workspaceSet.setMessage(e.getSystemMessage());
}
catch (CoreException e)
{
@ -1468,6 +1482,10 @@ public class UniversalFileTransferUtility
{
IRemoteFile[] results = targetFS.getRemoteFileObjects((String[])newFilePathList.toArray(new String[newFilePathList.size()]), monitor);
resultSet = new SystemRemoteResourceSet(targetFS, results);
if (workspaceSet.hasMessage())
{
resultSet.setMessage(workspaceSet.getMessage());
}
}
catch (Exception e)
{
@ -1730,6 +1748,9 @@ public class UniversalFileTransferUtility
}
IRemoteFile destinationArchive = null;
String newPath = null;
IRemoteFileSubSystem targetFS = null;
IRemoteFile remoteArchive = null;
try
{
monitor.beginTask(FileResources.RESID_SUPERTRANSFER_PROGMON_MAIN,IProgressMonitor.UNKNOWN);
@ -1757,7 +1778,7 @@ public class UniversalFileTransferUtility
IRemoteFile newTargetParent = newTargetFolder.getParentRemoteFile();
monitor.subTask(FileResources.RESID_SUPERTRANSFER_PROGMON_SUBTASK_POPULATE);
IRemoteFile sourceDir = localSS.getRemoteFileObject(directory.getLocation().toOSString(), monitor);
IRemoteFileSubSystem targetFS = newTargetFolder.getParentRemoteFileSubSystem();
targetFS = newTargetFolder.getParentRemoteFileSubSystem();
// FIXME
@ -1769,7 +1790,7 @@ public class UniversalFileTransferUtility
// copy local zip to remote
targetFS.upload(destinationArchive.getAbsolutePath(), SystemEncodingUtil.ENCODING_UTF_8, newPath, System.getProperty("file.encoding"), monitor); //$NON-NLS-1$
IRemoteFile remoteArchive = targetFS.getRemoteFileObject(newPath, monitor);
remoteArchive = targetFS.getRemoteFileObject(newPath, monitor);
monitor.subTask(FileResources.RESID_SUPERTRANSFER_PROGMON_SUBTASK_EXTRACT);
String compressedFolderPath = newPath + ArchiveHandlerManager.VIRTUAL_SEPARATOR + directory.getName();
@ -1777,20 +1798,21 @@ public class UniversalFileTransferUtility
// extract the compressed folder from the temp archive on remote
targetFS.copy(compressedFolder, newTargetParent, newTargetFolder.getName(), monitor);
// delete the temp remote archive
// now, DStoreFileService#getFile() (which is invoked by getRemoteFileObject() call)
// has been updated to also put the query object into the dstore file map,
// we don't need to do the query on the remoteArchive object before the
// delete.
targetFS.delete(remoteArchive, monitor);
monitor.done();
}
catch (SystemMessageException e)
{
SystemMessageDialog.displayMessage(e);
if (monitor.isCanceled())
{
//If this operation if canceled, and if the destination has already been created (partially)
//in the host, we need to delete it.
if (newTargetFolder.exists())
{
targetFS.delete(newTargetFolder, null);
}
}
throw e;
//SystemMessageDialog.displayMessage(e);
}
catch (Exception e)
{
@ -1800,6 +1822,17 @@ public class UniversalFileTransferUtility
finally {
if (newPath == null) cleanup(destinationArchive, null);
else cleanup(destinationArchive, new File(newPath));
// delete the temp remote archive
// now, DStoreFileService#getFile() (which is invoked by getRemoteFileObject() call)
// has been updated to also put the query object into the dstore file map,
// we don't need to do the query on the remoteArchive object before the
// delete.
if (remoteArchive != null && remoteArchive.exists())
{
targetFS.delete(remoteArchive, null);
}
monitor.done();
}
}

View file

@ -40,6 +40,7 @@
* David McKnight (IBM) - [209660] need to check if remote encoding has changed before using cached file
* Xuan Chen (IBM) - [160775] [api] [breaking] [nl] rename (at least within a zip) blocks UI thread
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Xuan Chen (IBM) - [191370] [dstore] Supertransfer zip not deleted when cancelling copy
********************************************************************************/
package org.eclipse.rse.internal.files.ui.view;
@ -1844,12 +1845,42 @@ public class SystemViewRemoteFileAdapter
monitor.beginTask(_uploadMessage.getLevelOneText(), size);
}
// back to hierarchy
return UniversalFileTransferUtility.uploadResourcesFromWorkspace((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, true);
resultSet = UniversalFileTransferUtility.uploadResourcesFromWorkspace((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, true);
}
else
{
return UniversalFileTransferUtility.uploadResourcesFromWorkspace((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, true);
resultSet = UniversalFileTransferUtility.uploadResourcesFromWorkspace((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, true);
}
if (resultSet.hasMessage())
{
SystemMessage msg = resultSet.getMessage();
if (monitor.isCanceled() && resultSet.size() > 0)
{
//Get the moved file names
Object thisObject = resultSet.get(0);
String copiedFileNames = null;
if (thisObject instanceof IRemoteFile)
{
copiedFileNames = ((IRemoteFile)thisObject).getName();
for (int i=1; i<(resultSet.size()); i++)
{
if (thisObject instanceof IRemoteFile)
{
copiedFileNames = copiedFileNames + "\n" + ((IRemoteFile)thisObject).getName();
}
}
}
//getMessage("RSEG1125").makeSubstitution(movedFileName));
if (copiedFileNames != null)
{
SystemMessage thisMessage = RSEUIPlugin.getPluginMessage(ISystemMessages.FILEMSG_COPY_INTERRUPTED);
thisMessage.makeSubstitution(copiedFileNames);
resultSet.setMessage(thisMessage);
//SystemMessageDialog.displayErrorMessage(shell, thisMessage);
}
}
}
return resultSet;
}
else if (fromSet instanceof SystemRemoteResourceSet)
{

View file

@ -18,6 +18,7 @@
* Xuan Chen (IBM) - [181784] [archivehandlers] zipped text files have unexpected contents
* Xuan Chen (IBM) - [160775] [api] rename (at least within a zip) blocks UI thread
* Xuan Chen (IBM) - [209828] Need to move the Create operation to a job.
* Xuan Chen (IBM) - [191370] [dstore] Supertransfer zip not deleted when cancelling copy
*******************************************************************************/
package org.eclipse.rse.services.clientserver.archiveutils;
@ -1008,6 +1009,12 @@ public class SystemZipHandler implements ISystemArchiveHandler
int numFiles = files.length;
for (int i = 0; i < numFiles; i++)
{
if (archiveOperationMonitor != null && archiveOperationMonitor.isCanceled())
{
//the operation has been canceled
closeZipFile();
return false;
}
if (!files[i].exists() || !files[i].canRead()) return false;
String fullVirtualName = getFullVirtualName(virtualPath, names[i]);
if (exists(fullVirtualName, archiveOperationMonitor))
@ -1043,6 +1050,13 @@ public class SystemZipHandler implements ISystemArchiveHandler
// Now for each new file to add
for (int i = 0; i < numFiles; i++)
{
if (archiveOperationMonitor != null && archiveOperationMonitor.isCanceled())
{
//the operation has been canceled
dest.close();
closeZipFile();
return false;
}
// append the additional entry to the zip file.
ZipEntry newEntry = appendFile(files[i], dest, virtualPath, names[i], sourceEncodings[i], targetEncodings[i], isText[i]);
// Add the new entry to the virtual file system in memory

View file

@ -16,6 +16,7 @@
* Rupen Mardirossian (IBM) - [187713] Check to see if target is null before attempting to retrieve targetAdapter in tranferRSEResources method (line 248)
* Martin Oberhuber (Wind River) - [200682] Fix drag&drop for elements just adaptable to IResource, like CDT elements
* David McKnight (IBM) - [186363] get rid of obsolete calls to SubSystem.connect()
* Xuan Chen (IBM) - [191370] [dstore] Supertransfer zip not deleted when cancelling copy
********************************************************************************/
package org.eclipse.rse.internal.ui.view;
@ -219,6 +220,15 @@ public class SystemDNDTransferRunnable extends WorkspaceJob
}
else if (droppedObjects.hasMessage())
{
//Even the droppedObject has message, it could still has
//dropped results. (user cancels the operation, but some objects
//has already been copied.
//Need to make sure we refresh those copied object.
List results = droppedObjects.getResourceSet();
for (int d = 0; d < results.size(); d++)
{
_resultTgtObjects.add(results.get(d));
}
operationFailed(monitor);
showErrorMessage(droppedObjects.getMessage());
}