From: Mikael P. <er...@us...> - 2009-12-15 19:57:27
|
Update of /cvsroot/eclipse-ccase/net.sourceforge.eclipseccase/src/net/sourceforge/eclipseccase In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv9176/src/net/sourceforge/eclipseccase Modified Files: ClearcaseProvider.java IClearcasePreferenceConstants.java ClearcasePlugin.java Log Message: fbelouin contributions Index: ClearcasePlugin.java =================================================================== RCS file: /cvsroot/eclipse-ccase/net.sourceforge.eclipseccase/src/net/sourceforge/eclipseccase/ClearcasePlugin.java,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** ClearcasePlugin.java 23 Jun 2009 10:54:13 -0000 1.55 --- ClearcasePlugin.java 15 Dec 2009 19:57:18 -0000 1.56 *************** *** 530,534 **** IClearcasePreferenceConstants.WIP_REFRESH_CHILDREN_PREVENT); } ! public static boolean isCheckinIdenticalAllowed() { return getInstance().getPluginPreferences().getBoolean( --- 530,544 ---- IClearcasePreferenceConstants.WIP_REFRESH_CHILDREN_PREVENT); } ! ! /** ! * Gets the preference value for <code>CLEARCASE_PRIMARY_GROUP</code>. ! * ! * @return the CLEARCASE_PRIMARY_GROUP name ! */ ! public static String getClearcasePrimaryGroup(){ ! return getInstance().getPluginPreferences().getString( ! IClearcasePreferenceConstants.CLEARCASE_PRIMARY_GROUP); ! } ! public static boolean isCheckinIdenticalAllowed() { return getInstance().getPluginPreferences().getBoolean( *************** *** 732,735 **** --- 742,752 ---- IClearcasePreferenceConstants.WIP_REFRESH_CHILDREN_PREVENT, true); + + String sClearcasePrimaryGroup = System.getenv("CLEARCASE_PRIMARY_GROUP"); + if (sClearcasePrimaryGroup == null) sClearcasePrimaryGroup = ""; + pref.setDefault( + IClearcasePreferenceConstants.CLEARCASE_PRIMARY_GROUP, + sClearcasePrimaryGroup); + pref.setDefault(IClearcasePreferenceConstants.USE_CLEARDLG, false); pref.setDefault(IClearcasePreferenceConstants.PRESERVE_TIMES, false); Index: IClearcasePreferenceConstants.java =================================================================== RCS file: /cvsroot/eclipse-ccase/net.sourceforge.eclipseccase/src/net/sourceforge/eclipseccase/IClearcasePreferenceConstants.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** IClearcasePreferenceConstants.java 2 Jun 2009 11:36:12 -0000 1.11 --- IClearcasePreferenceConstants.java 15 Dec 2009 19:57:18 -0000 1.12 *************** *** 93,96 **** --- 93,101 ---- /** ClearCase preference */ + String CLEARCASE_PRIMARY_GROUP = ClearcasePlugin.PLUGIN_ID + + ".clearcasePrimaryGroup"; //$NON-NLS-1$ + + + /** ClearCase preference */ String USE_CLEARDLG = ClearcasePlugin.PLUGIN_ID + ".useClearDlg"; //$NON-NLS-1$ Index: ClearcaseProvider.java =================================================================== RCS file: /cvsroot/eclipse-ccase/net.sourceforge.eclipseccase/src/net/sourceforge/eclipseccase/ClearcaseProvider.java,v retrieving revision 1.109 retrieving revision 1.110 diff -C2 -d -r1.109 -r1.110 *** ClearcaseProvider.java 26 Jun 2009 11:57:34 -0000 1.109 --- ClearcaseProvider.java 15 Dec 2009 19:57:17 -0000 1.110 *************** *** 23,26 **** --- 23,27 ---- import net.sourceforge.clearcase.ClearCaseException; import net.sourceforge.clearcase.ClearCaseInterface; + import net.sourceforge.clearcase.events.OperationListener; import net.sourceforge.clearcase.utils.Os; *************** *** 40,43 **** --- 41,45 ---- import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.NullProgressMonitor; + import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; *************** *** 63,66 **** --- 65,70 ---- CheckOutOperation CHECKOUT = new CheckOutOperation(); + + UnHijackOperation UNHIJACK = new UnHijackOperation(); AddOperation ADD = new AddOperation(); *************** *** 76,82 **** --- 80,95 ---- public static final Status OK_STATUS = new Status(IStatus.OK, ID, TeamException.OK, "OK", null); //$NON-NLS-1$ + public static final Status FAILED_STATUS = new Status(IStatus.ERROR, ID, + TeamException.UNABLE, "FAILED", null); //$NON-NLS-1$ public static final IStatus CANCEL_STATUS = Status.CANCEL_STATUS; + + boolean refreshResources = true; + + private OperationListener opListener = null; + + + public ClearcaseProvider() { super(); *************** *** 87,90 **** --- 100,114 ---- DeleteOperation DELETE = new DeleteOperation(); + /** + * Checks if the monitor has been canceled. + * @param monitor + */ + protected static void checkCanceled(IProgressMonitor monitor) + { + if(null != monitor && monitor.isCanceled()) throw new OperationCanceledException(); + } + + + /* * (non-Javadoc) *************** *** 119,124 **** RepositoryProvider provider = RepositoryProvider.getProvider(resource .getProject()); ! if (provider instanceof ClearcaseProvider) return (ClearcaseProvider) provider; else return null; --- 143,150 ---- RepositoryProvider provider = RepositoryProvider.getProvider(resource .getProject()); ! if (provider instanceof ClearcaseProvider){ ! ((ClearcaseProvider)provider).opListener = null; return (ClearcaseProvider) provider; + } else return null; *************** *** 144,147 **** --- 170,182 ---- } } + + public void unhijack(IResource[] resources, int depth, + IProgressMonitor progress) throws TeamException { + try { + execute(UNHIJACK, resources, depth, progress); + } finally { + setComment(""); + } + } /** *************** *** 453,462 **** getComment(), ClearCase.FORCE | ClearCase.CHECKIN ! | getCheckoutType(), null); } else { state = ClearcasePlugin.getEngine().move( source.getLocation().toOSString(), destination.getLocation().toOSString(), getComment(), ! ClearCase.FORCE | getCheckoutType(), null); } --- 488,497 ---- getComment(), ClearCase.FORCE | ClearCase.CHECKIN ! | getCheckoutType(), opListener); } else { state = ClearcasePlugin.getEngine().move( source.getLocation().toOSString(), destination.getLocation().toOSString(), getComment(), ! ClearCase.FORCE | getCheckoutType(), opListener); } *************** *** 514,518 **** ClearCaseElementState[] elementState2 = ClearcasePlugin .getEngine().checkout(element, getComment(), ! getCheckoutType(), null); monitor.worked(4); --- 549,553 ---- ClearCaseElementState[] elementState2 = ClearcasePlugin .getEngine().checkout(element, getComment(), ! getCheckoutType(), opListener); monitor.worked(4); *************** *** 533,540 **** } - boolean refreshResources = true; - // Notifies decorator that state has changed for an element ! void updateState(IResource resource, int depth, IProgressMonitor monitor) { try { monitor.beginTask("Refreshing " + resource.getFullPath(), 20); --- 568,573 ---- } // Notifies decorator that state has changed for an element ! public void updateState(IResource resource, int depth, IProgressMonitor monitor) { try { monitor.beginTask("Refreshing " + resource.getFullPath(), 20); *************** *** 614,617 **** --- 647,652 ---- public IStatus visit(IResource resource, IProgressMonitor monitor) { try { + checkCanceled(monitor); + monitor.beginTask("Refreshing State " + resource.getFullPath(), 10); *************** *** 725,729 **** ClearCaseElementState state = ClearcasePlugin.getEngine().add( resource.getLocation().toOSString(), false, getComment(), ! ClearCase.PTIME | ClearCase.MASTER | ClearCase.CHECKIN, null); if(state.isElement()){ --- 760,764 ---- ClearCaseElementState state = ClearcasePlugin.getEngine().add( resource.getLocation().toOSString(), false, getComment(), ! ClearCase.PTIME | ClearCase.MASTER | ClearCase.CHECKIN, opListener); if(state.isElement()){ *************** *** 734,737 **** --- 769,786 ---- + resource.getName(), null); } + + if (result.isOK()) + { + state = ClearcasePlugin.getEngine(). + setGroup(resource.getLocation().toOSString(), + ClearcasePlugin.getClearcasePrimaryGroup(), + opListener); + + if (!state.isElement()) { + result = new Status(IStatus.ERROR, ID, TeamException.UNABLE, + "Chgrp failed: " + "Could not change group element" + + resource.getName(), null); + } + } return result; *************** *** 771,776 **** // clearcase. ClearCaseElementState state = ClearcasePlugin.getEngine().add( ! resource.getLocation().toOSString(), true, getComment(), 0, ! null); if (!state.isElement()) { result = new Status(IStatus.ERROR, ID, TeamException.UNABLE, --- 820,825 ---- // clearcase. ClearCaseElementState state = ClearcasePlugin.getEngine().add( ! resource.getLocation().toOSString(), true, getComment(), ! ClearCase.MASTER, opListener); if (!state.isElement()) { result = new Status(IStatus.ERROR, ID, TeamException.UNABLE, *************** *** 778,781 **** --- 827,846 ---- + resource.getName(), null); } + + + + if (result.isOK()) + { + state = ClearcasePlugin.getEngine(). + setGroup(resource.getLocation().toOSString(), + ClearcasePlugin.getClearcasePrimaryGroup(), + opListener); + + if (!state.isElement()) { + result = new Status(IStatus.ERROR, ID, TeamException.UNABLE, + "Chgrp failed: " + "Could not change group element" + + resource.getName(), null); + } + } // Now move back the content of tmp to original. *************** *** 805,810 **** ClearCaseElementState[] stateB = ClearcasePlugin.getEngine() .checkin(parentResource, comment, 0, - null); // hasRemote checks if element is a clearcase element. // if(stateB[0].isCheckedOut()){ --- 870,876 ---- ClearCaseElementState[] stateB = ClearcasePlugin.getEngine() .checkin(parentResource, comment, 0, + opListener); + // hasRemote checks if element is a clearcase element. // if(stateB[0].isCheckedOut()){ *************** *** 861,893 **** } IStatus result = OK_STATUS; ! // TODO:eraonel Test it. ! PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { ! public void run() { ! Shell activeShell = PlatformUI.getWorkbench() ! .getDisplay().getActiveShell(); ! MessageDialog checkoutQuestion = new MessageDialog( ! activeShell, "Checkout", null, ! "Do you really want to uncheckout?", ! MessageDialog.QUESTION, new String[] { "Yes", ! "No", "Cancel" }, 0); ! int returncode = checkoutQuestion.open(); ! /* Yes=0 No=1 Cancel=2 */ ! if (returncode == 0) { ! // Yes continue checking out. ! int flags = ClearCase.RECURSIVE; ! if (ClearcasePlugin.isKeepChangesAfterUncheckout()) { ! flags |= ClearCase.KEEP; ! } ! ClearcasePlugin.getEngine().uncheckout( ! new String[] { resource.getLocation() ! .toOSString() }, flags, null); ! monitor.worked(40); ! updateState(resource, IResource.DEPTH_ZERO, ! new SubProgressMonitor(monitor, 10)); ! } ! } ! }); // if (!status.status) { // result = new Status(IStatus.ERROR, ID, --- 927,944 ---- } IStatus result = OK_STATUS; ! ! // Yes continue checking out. ! int flags = ClearCase.RECURSIVE; ! if (ClearcasePlugin.isKeepChangesAfterUncheckout()) { ! flags |= ClearCase.KEEP; ! } ! ClearcasePlugin.getEngine().uncheckout( ! new String[] { resource.getLocation() ! .toOSString() }, flags, opListener); ! monitor.worked(40); ! updateState(resource, IResource.DEPTH_ZERO, new SubProgressMonitor(monitor, 10)); + // if (!status.status) { // result = new Status(IStatus.ERROR, ID, *************** *** 929,933 **** new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.RECURSIVE | ClearCase.KEEP, null); monitor.worked(40); updateState(resource, IResource.DEPTH_INFINITE, --- 980,984 ---- new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.RECURSIVE | ClearCase.KEEP, opListener); monitor.worked(40); updateState(resource, IResource.DEPTH_INFINITE, *************** *** 985,989 **** new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.PTIME | ClearCase.IDENTICAL, null); } else { --- 1036,1040 ---- new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.PTIME | ClearCase.IDENTICAL, opListener); } else { *************** *** 992,996 **** new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.PTIME, null); } catch (ClearCaseException cce) { // check error --- 1043,1047 ---- new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.PTIME, opListener); } catch (ClearCaseException cce) { // check error *************** *** 1043,1047 **** new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.PTIME, null); break; --- 1094,1098 ---- new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.PTIME, opListener); break; *************** *** 1127,1131 **** .update( new String[] { resource.getLocation() ! .toOSString() }, comment, 0, null); // if (state[0] == null) { // result = new Status(IStatus.ERROR, ID, --- 1178,1182 ---- .update( new String[] { resource.getLocation() ! .toOSString() }, comment, 0, opListener); // if (state[0] == null) { // result = new Status(IStatus.ERROR, ID, *************** *** 1140,1144 **** // .update( // new String[] { resource.getLocation() ! // .toOSString() }, comment, 0, null); // if (state[0] == null) { // result = new Status(IStatus.ERROR, ID, --- 1191,1195 ---- // .update( // new String[] { resource.getLocation() ! // .toOSString() }, comment, 0, opListener); // if (state[0] == null) { // result = new Status(IStatus.ERROR, ID, *************** *** 1162,1166 **** new String[] { resource.getLocation() .toOSString() }, getComment(), ! getCheckoutType() | ClearCase.PTIME, null); } catch (ClearCaseException cce) { switch (cce.getErrorCode()) { --- 1213,1218 ---- new String[] { resource.getLocation() .toOSString() }, getComment(), ! getCheckoutType() | ClearCase.PTIME | ! (isHijacked(resource) ? ClearCase.HIJACKED : ClearCase.NONE), opListener); } catch (ClearCaseException cce) { switch (cce.getErrorCode()) { *************** *** 1185,1189 **** new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.UNRESERVED | ClearCase.PTIME, null); monitor.worked(40); updateState(resource, IResource.DEPTH_ZERO, --- 1237,1241 ---- new String[] { resource.getLocation() .toOSString() }, getComment(), ! ClearCase.UNRESERVED | ClearCase.PTIME, opListener); monitor.worked(40); updateState(resource, IResource.DEPTH_ZERO, *************** *** 1223,1226 **** --- 1275,1353 ---- } } + + private final class UnHijackOperation implements IRecursiveOperation { + + public IStatus visit(final IResource resource, final IProgressMonitor monitor) { + try { + monitor.beginTask("Checkin out " + resource.getFullPath(), 100); + + // Sanity check - can't checkout something that is not part of + // clearcase + if (!isHijacked(resource)) { + return new Status( + IStatus.WARNING, + ID, + TeamException.NOT_AUTHORIZED, + MessageFormat + .format( + "Resource \"{0}\" is not a Hijacked ClearCase element!", + new Object[] { resource + .getFullPath().toString() }), + null); + } + + IStatus result = OK_STATUS; + + + try{ + /* remove existing xx.keep file*/ + File keep = new File(resource.getLocation().toOSString() + ".keep"); + if(keep.exists()) + { + keep.delete(); + } + + /* rename existing xx.keep file*/ + keep = new File(resource.getLocation().toOSString()); + if(keep.exists()) + { + keep.renameTo(new File(resource.getLocation().toOSString() + ".keep")); + } + }catch(Exception e) + { + result = FAILED_STATUS; + } + monitor.worked(20); + + + + if (result == OK_STATUS) { + // update if necessary + if (ClearcasePlugin.isCheckoutLatest() && isSnapShot(resource)) { + monitor.subTask("Updating " + resource.getName()); + + // ClearCaseElementState[] state = + // ClearcasePlugin.getEngine() + // .update( + // new String[] { resource.getLocation() + // .toOSString() }, comment, 0, opListener); + ClearcasePlugin.getEngine() + .update( + new String[] { resource.getLocation() + .toOSString() }, comment, 0, opListener); + } + } + monitor.worked(20); + + // update state + updateState(resource.getParent(), IResource.DEPTH_ONE, + new SubProgressMonitor(monitor, 10)); + + return result; + } finally { + monitor.done(); + } + } + } private final class UpdateOperation implements IIterativeOperation { *************** *** 1613,1615 **** --- 1740,1749 ---- } } + + + + public void setOperationListener(OperationListener opListener) { + // TODO Auto-generated method stub + this.opListener = opListener; + } } \ No newline at end of file |