Program: 128021
Project: 128021
Buggy source:
private void renameFolderExecute(final ERepositoryObjectType type,final IPath sourcePath,final String label) throws PersistenceException {
  if (type == null) {
    return;
  }
  final IWorkspaceRunnable op=new IWorkspaceRunnable(){
    @Override public void run(    IProgressMonitor monitor) throws CoreException {
      try {
        IPath targetPath=sourcePath.removeLastSegments(1);
        Project project=getRepositoryContext().getProject();
        IProject fsProject=ResourceModelUtils.getProject(project);
        String completeOldPath=ERepositoryObjectType.getFolderName(type) + IPath.SEPARATOR + sourcePath.toPortableString();
        String completeNewPath;
        if (targetPath.isEmpty()) {
          completeNewPath=ERepositoryObjectType.getFolderName(type) + IPath.SEPARATOR + label;
        }
 else {
          completeNewPath=ERepositoryObjectType.getFolderName(type) + IPath.SEPARATOR + targetPath.toString()+ IPath.SEPARATOR+ label;
        }
        if (completeNewPath.equals(completeOldPath)) {
          return;
        }
        IFolder folder=ResourceUtils.getFolder(fsProject,completeOldPath,true);
        FolderHelper folderHelper=getFolderHelper(getRepositoryContext().getProject().getEmfProject());
        FolderItem emfFolder=folderHelper.getFolder(completeOldPath);
        if (emfFolder == null && (type == ERepositoryObjectType.JOB_DOC || type == ERepositoryObjectType.JOBLET_DOC)) {
          IPath path=new Path(sourcePath.toString());
          ProxyRepositoryFactory.getInstance().createParentFoldersRecursively(project,type,path);
          emfFolder=folderHelper.getFolder(completeOldPath);
        }
        createFolder(getRepositoryContext().getProject(),type,targetPath,label);
        FolderItem newFolder=folderHelper.getFolder(completeNewPath);
        Item[] childrens=(Item[])emfFolder.getChildren().toArray();
        for (        Item children2 : childrens) {
          if (children2 instanceof FolderItem) {
            FolderItem children=(FolderItem)children2;
            moveFolder(type,sourcePath.append(children.getProperty().getLabel()),targetPath.append(newFolder.getProperty().getLabel()));
          }
 else {
            moveOldContentToNewFolder(project,completeNewPath,emfFolder,newFolder,children2);
          }
        }
        List<IRepositoryViewObject> serializableFromFolder=getSerializableFromFolder(project,folder,null,type,true,true,true,false);
        for (        IRepositoryViewObject object : serializableFromFolder) {
          List<Resource> affectedResources=xmiResourceManager.getAffectedResources(object.getProperty());
          for (          Resource resource : affectedResources) {
            IPath path=getPhysicalProject(project).getFullPath().append(completeNewPath).append(resource.getURI().lastSegment());
            List<Resource> needSaves=findCrossReference(resource);
            moveResource(resource,path);
            saveCrossReference(needSaves);
          }
          affectedResources=xmiResourceManager.getAffectedResources(object.getProperty());
          for (          Resource resource : affectedResources) {
            xmiResourceManager.saveResource(resource);
          }
        }
        deleteFolder(getRepositoryContext().getProject(),type,sourcePath);
        xmiResourceManager.saveResource(getRepositoryContext().getProject().getEmfProject().eResource());
      }
 catch (      PersistenceException e) {
        throw new CoreException(new org.eclipse.core.runtime.Status(IStatus.ERROR,FrameworkUtil.getBundle(this.getClass()).getSymbolicName(),"String_Node_Str",e));
      }
    }
  }
;
  IWorkspace workspace=ResourcesPlugin.getWorkspace();
  try {
    ISchedulingRule schedulingRule=workspace.getRoot();
    workspace.run(op,schedulingRule,IWorkspace.AVOID_UPDATE,new NullProgressMonitor());
  }
 catch (  CoreException e) {
    throw new PersistenceException(e.getCause());
  }
}

Fixed version (ground truth):
private void renameFolderExecute(final ERepositoryObjectType type,final IPath sourcePath,final String label) throws PersistenceException {
  if (type == null) {
    return;
  }
  final IWorkspaceRunnable op=new IWorkspaceRunnable(){
    @Override public void run(    IProgressMonitor monitor) throws CoreException {
      try {
        IPath targetPath=sourcePath.removeLastSegments(1);
        Project project=getRepositoryContext().getProject();
        IProject fsProject=ResourceModelUtils.getProject(project);
        String completeOldPath=ERepositoryObjectType.getFolderName(type) + IPath.SEPARATOR + sourcePath.toPortableString();
        String completeNewPath;
        if (targetPath.isEmpty()) {
          completeNewPath=ERepositoryObjectType.getFolderName(type) + IPath.SEPARATOR + label;
        }
 else {
          completeNewPath=ERepositoryObjectType.getFolderName(type) + IPath.SEPARATOR + targetPath.toString()+ IPath.SEPARATOR+ label;
        }
        if (completeNewPath.equals(completeOldPath)) {
          return;
        }
        IFolder folder=ResourceUtils.getFolder(fsProject,completeOldPath,true);
        FolderHelper folderHelper=getFolderHelper(getRepositoryContext().getProject().getEmfProject());
        FolderItem emfFolder=folderHelper.getFolder(completeOldPath);
        if (emfFolder == null && (type == ERepositoryObjectType.JOB_DOC || type == ERepositoryObjectType.JOBLET_DOC)) {
          IPath path=new Path(sourcePath.toString());
          ProxyRepositoryFactory.getInstance().createParentFoldersRecursively(project,type,path);
          emfFolder=folderHelper.getFolder(completeOldPath);
        }
        createFolder(getRepositoryContext().getProject(),type,targetPath,label);
        FolderItem newFolder=folderHelper.getFolder(completeNewPath);
        Item[] childrens=(Item[])emfFolder.getChildren().toArray();
        for (        Item children2 : childrens) {
          if (children2 instanceof FolderItem) {
            FolderItem children=(FolderItem)children2;
            moveFolder(type,sourcePath.append(children.getProperty().getLabel()),targetPath.append(newFolder.getProperty().getLabel()));
          }
 else {
            moveOldContentToNewFolder(project,completeNewPath,emfFolder,newFolder,children2);
          }
        }
        List<IRepositoryViewObject> serializableFromFolder=getSerializableFromFolder(project,folder,null,type,true,true,true,false);
        List<Resource> allResource=new ArrayList<Resource>();
        Map<Resource,IPath> resourceAndPathMap=new HashMap<Resource,IPath>();
        IPath parentPath=getPhysicalProject(project).getFullPath().append(completeNewPath);
        for (        IRepositoryViewObject object : serializableFromFolder) {
          List<Resource> affectedResources=xmiResourceManager.getAffectedResources(object.getProperty());
          for (          Resource resource : affectedResources) {
            allResource.add(resource);
            IPath path=getPhysicalProject(project).getFullPath().append(completeNewPath).append(resource.getURI().lastSegment());
            resourceAndPathMap.put(resource,path);
            List<Resource> needSaves=findCrossReference(resource);
            moveResource(resource,path);
            saveCrossReference(needSaves);
          }
        }
        svnMoveResource(allResource,parentPath,resourceAndPathMap);
        for (        IRepositoryViewObject object : serializableFromFolder) {
          List<Resource> affectedResources=xmiResourceManager.getAffectedResources(object.getProperty());
          for (          Resource resource : affectedResources) {
            xmiResourceManager.saveResource(resource);
          }
        }
        deleteFolder(getRepositoryContext().getProject(),type,sourcePath);
        xmiResourceManager.saveResource(getRepositoryContext().getProject().getEmfProject().eResource());
      }
 catch (      PersistenceException e) {
        throw new CoreException(new org.eclipse.core.runtime.Status(IStatus.ERROR,FrameworkUtil.getBundle(this.getClass()).getSymbolicName(),"String_Node_Str",e));
      }
    }
  }
;
  IWorkspace workspace=ResourcesPlugin.getWorkspace();
  try {
    ISchedulingRule schedulingRule=workspace.getRoot();
    workspace.run(op,schedulingRule,IWorkspace.AVOID_UPDATE,new NullProgressMonitor());
  }
 catch (  CoreException e) {
    throw new PersistenceException(e.getCause());
  }
}