Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 31092 Details for
Bug 119146
Republish takes forever
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
proposed fix
119146.diff (text/plain), 10.00 KB, created by
Igor Fedorenko
on 2005-12-03 02:52:52 EST
(
hide
)
Description:
proposed fix
Filename:
MIME Type:
Creator:
Igor Fedorenko
Created:
2005-12-03 02:52:52 EST
Size:
10.00 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.wst.server.core >Index: servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java,v >retrieving revision 1.15 >diff -u -r1.15 ServerPublishInfo.java >--- servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java 22 Nov 2005 04:06:49 -0000 1.15 >+++ servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java 3 Dec 2005 07:46:30 -0000 >@@ -224,75 +224,64 @@ > } > > protected IModuleResourceDelta[] getDelta(IModuleResource[] original, IModuleResource[] current) { >- if (original == null || current == null) >+ if (original == null || current == null) { >+ // TODO does not make sense if either is not null > return new IModuleResourceDelta[0]; >- >- List list = new ArrayList(); >- >- // look for duplicates >- List found = new ArrayList(); >- int size = original.length; >- int size2 = current.length; >- for (int i = 0; i < size; i++) { >- for (int j = 0; j < size2; j++) { >- if (!found.contains(original[i]) && !found.contains(current[j]) && original[i].equals(current[j])) { >- // found a match >- found.add(original[i]); >- if (original[i] instanceof IModuleFile) { >- // include files only if the modification stamp has changed >- IModuleFile mf1 = (IModuleFile) original[i]; >- IModuleFile mf2 = (IModuleFile) current[j]; >- if (mf1.getModificationStamp() != mf2.getModificationStamp()) { >- list.add(new ModuleResourceDelta(original[i], IModuleResourceDelta.CHANGED)); >- } >- } else { >- // include folders only if their contents have changed >- IModuleFolder mf1 = (IModuleFolder) original[i]; >- IModuleFolder mf2 = (IModuleFolder) current[j]; >- IModuleResourceDelta[] mrdc = getDelta(mf1.members(), mf2.members()); >- if (mrdc.length > 0) { >- ModuleResourceDelta mrd = new ModuleResourceDelta(original[i], IModuleResourceDelta.NO_CHANGE); >- mrd.setChildren(mrdc); >- list.add(mrd); >- } >- } >- } >- } > } >- >- // add deletions (unfound items in the original list) >- for (int i = 0; i < size; i++) { >- if (!found.contains(original[i])) { >- if (original[i] instanceof IModuleFile) { >- list.add(new ModuleResourceDelta(original[i], IModuleResourceDelta.REMOVED)); >+ >+ List result = new ArrayList(); >+ >+ // >+ Map originalMap = new HashMap(); >+ for (int i = 0; i < original.length; i++) { >+ originalMap.put(original[i], original[i]); >+ } >+ >+ // added and changed resources >+ for (int i = 0; i < current.length; i++) { >+ // HashMap#remove is as fast as #get, right? >+ IModuleResource old = (IModuleResource) originalMap.remove(current[i]); >+ if (old == null) { >+ ModuleResourceDelta delta = new ModuleResourceDelta(current[i], IModuleResourceDelta.ADDED); >+ if (current[i] instanceof IModuleFolder) { >+ IModuleFolder currentFolder = (IModuleFolder) current[i]; >+ delta.setChildren(getDeltaTree(currentFolder.members(), IModuleResourceDelta.ADDED)); >+ } >+ result.add(delta); >+ } else { >+ if (current[i] instanceof IModuleFile) { >+ // include files only if the modification stamp has changed >+ IModuleFile mf1 = (IModuleFile) old; >+ IModuleFile mf2 = (IModuleFile) current[i]; >+ if (mf1.getModificationStamp() != mf2.getModificationStamp()) { >+ result.add(new ModuleResourceDelta(current[i], IModuleResourceDelta.CHANGED)); >+ } > } else { >- IModuleFolder mf = (IModuleFolder) original[i]; >- ModuleResourceDelta mrd = new ModuleResourceDelta(original[i], IModuleResourceDelta.REMOVED); >- IModuleResourceDelta[] mrdc = getDeltaTree(mf.members(), IModuleResourceDelta.REMOVED); >- mrd.setChildren(mrdc); >- list.add(mrd); >+ // include folders only if their contents have changed >+ IModuleFolder mf1 = (IModuleFolder) old; >+ IModuleFolder mf2 = (IModuleFolder) current[i]; >+ IModuleResourceDelta[] mrdc = getDelta(mf1.members(), mf2.members()); >+ if (mrdc.length > 0) { >+ ModuleResourceDelta mrd = new ModuleResourceDelta(current[i], IModuleResourceDelta.NO_CHANGE); >+ mrd.setChildren(mrdc); >+ result.add(mrd); >+ } > } > } > } >- >- // add additions (unfound items in the current list) >- for (int j = 0; j < size2; j++) { >- if (!found.contains(current[j])) { >- if (current[j] instanceof IModuleFile) { >- list.add(new ModuleResourceDelta(current[j], IModuleResourceDelta.ADDED)); >- } else { >- IModuleFolder mf = (IModuleFolder) current[j]; >- ModuleResourceDelta mrd = new ModuleResourceDelta(current[j], IModuleResourceDelta.ADDED); >- IModuleResourceDelta[] mrdc = getDeltaTree(mf.members(), IModuleResourceDelta.ADDED); >- mrd.setChildren(mrdc); >- list.add(mrd); >- } >+ >+ // removed resources >+ for (int i = 0; i < original.length; i++) { >+ if (!originalMap.containsKey(original[i])) continue; >+ ModuleResourceDelta delta = new ModuleResourceDelta(original[i], IModuleResourceDelta.REMOVED); >+ if (original[i] instanceof IModuleFolder) { >+ IModuleFolder removedFolder = (IModuleFolder) original[i]; >+ delta.setChildren(getDeltaTree(removedFolder.members(), IModuleResourceDelta.REMOVED)); > } >+ result.add(delta); > } >- >- IModuleResourceDelta[] delta = new IModuleResourceDelta[list.size()]; >- list.toArray(delta); >- return delta; >+ >+ return (IModuleResourceDelta[]) result.toArray(new IModuleResourceDelta[result.size()]); > } > > protected boolean hasDelta(IModule[] module) { >@@ -315,51 +304,41 @@ > } > > protected boolean hasDelta(IModuleResource[] original, IModuleResource[] current) { >- if (original == null || current == null) >+ if (original == null || current == null) { >+ // TODO does not make sense if either is not null > return false; >- >- // look for duplicates >- List found = new ArrayList(); >- int size = original.length; >- int size2 = current.length; >- for (int i = 0; i < size; i++) { >- for (int j = 0; j < size2; j++) { >- if (!found.contains(original[i]) && !found.contains(current[j]) && original[i].equals(current[j])) { >- // found a match >- found.add(original[i]); >- if (original[i] instanceof IModuleFile) { >- // include files only if the modification stamp has changed >- IModuleFile mf1 = (IModuleFile) original[i]; >- IModuleFile mf2 = (IModuleFile) current[j]; >- if (mf1.getModificationStamp() != mf2.getModificationStamp()) >- return true; >- } else { >- // include folders only if their contents have changed >- IModuleFolder mf1 = (IModuleFolder) original[i]; >- IModuleFolder mf2 = (IModuleFolder) current[j]; >- IModuleResourceDelta[] mrdc = getDelta(mf1.members(), mf2.members()); >- if (mrdc.length > 0) >- return true; >- } >- } >- } > } >- >- // add deletions (unfound items in the original list) >- for (int i = 0; i < size; i++) { >- if (!found.contains(original[i])) { >- return true; >- } >+ >+ // >+ Map originalMap = new HashMap(); >+ for (int i = 0; i < original.length; i++) { >+ originalMap.put(original[i], original[i]); > } >- >- // add additions (unfound items in the current list) >- for (int j = 0; j < size2; j++) { >- if (!found.contains(current[j])) { >+ >+ // added and changed resources >+ for (int i = 0; i < current.length; i++) { >+ // HashMap#remove is as fast as #get, right? >+ IModuleResource old = (IModuleResource) originalMap.remove(current[i]); >+ if (old == null) { > return true; >+ } else { >+ if (current[i] instanceof IModuleFile) { >+ // include files only if the modification stamp has changed >+ IModuleFile mf1 = (IModuleFile) old; >+ IModuleFile mf2 = (IModuleFile) current[i]; >+ if (mf1.getModificationStamp() != mf2.getModificationStamp()) { >+ return true; >+ } >+ } else { >+ // include folders only if their contents have changed >+ IModuleFolder mf1 = (IModuleFolder) old; >+ IModuleFolder mf2 = (IModuleFolder) current[i]; >+ return hasDelta(mf1.members(), mf2.members()); >+ } > } > } >- >- return false; >+ >+ return !originalMap.isEmpty(); > } > > /** >Index: servercore/org/eclipse/wst/server/core/internal/ModuleFile.java >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFile.java,v >retrieving revision 1.6 >diff -u -r1.6 ModuleFile.java >--- servercore/org/eclipse/wst/server/core/internal/ModuleFile.java 6 Jul 2005 21:49:58 -0000 1.6 >+++ servercore/org/eclipse/wst/server/core/internal/ModuleFile.java 3 Dec 2005 07:46:30 -0000 >@@ -62,6 +62,13 @@ > return true; > } > >+ public int hashCode() { >+ int result = 37; >+ result = 37 * result + name.hashCode(); >+ result = 37 * result + path.hashCode(); >+ return result; >+ } >+ > public Object getAdapter(Class cl) { > if (IFile.class.equals(cl)) > return file; >Index: servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java,v >retrieving revision 1.6 >diff -u -r1.6 ModuleFolder.java >--- servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java 6 Jul 2005 21:49:58 -0000 1.6 >+++ servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java 3 Dec 2005 07:46:30 -0000 >@@ -67,6 +67,13 @@ > return true; > } > >+ public int hashCode() { >+ int result = 37; >+ result = 37 * result + name.hashCode(); >+ result = 37 * result + path.hashCode(); >+ return result; >+ } >+ > public Object getAdapter(Class cl) { > if (IContainer.class.equals(cl) || IFolder.class.equals(cl)) > return container;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 119146
:
31087
| 31092