Program: 128018
Project: 128018
Buggy source:
@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));
  }
}

Fixed version (ground truth):
@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));
  }
}