use of org.jetbrains.idea.svn.info.Info in project intellij-community by JetBrains.
the class ConflictCreator method create.
public void create() throws PatchSyntaxException, IOException {
// local changes, do not commit
for (TreeConflictData.FileData data : myData.getLeftFiles()) {
applyFileData(myMineDir, data);
}
final PatchReader reader = new PatchReader(myData.getTheirsPatch());
final List<TextFilePatch> patches = reader.readTextPatches();
final List<FilePatch> filePatchList = new ArrayList<>(patches);
for (Iterator<FilePatch> iterator = filePatchList.iterator(); iterator.hasNext(); ) {
final FilePatch patch = iterator.next();
if (patch.isDeletedFile()) {
myClientRunner.delete(myTheirsDir, patch.getBeforeName());
iterator.remove();
}
}
if (!filePatchList.isEmpty()) {
PatchApplier<BinaryFilePatch> applier = new PatchApplier<>(myProject, myTheirsDir, filePatchList, (LocalChangeList) null, null, null);
applier.setIgnoreContentRootsCheck();
applier.execute();
Assert.assertEquals(0, applier.getRemainingPatches().size());
}
TimeoutUtil.sleep(10);
SvnVcs vcs = SvnVcs.getInstance(myProject);
for (TextFilePatch patch : patches) {
if (patch.isNewFile() || !Comparing.equal(patch.getAfterName(), patch.getBeforeName())) {
final String afterName = patch.getAfterName();
final String[] parts = afterName.split("/");
String subPath = "";
for (String part : parts) {
final String path = subPath + part;
Info info = vcs.getInfo(new File(myTheirsDir.getPath(), path));
if (info == null || info.getURL() == null) {
myClientRunner.add(myTheirsDir, path);
}
subPath += part + "/";
}
if (!patch.isNewFile()) {
myClientRunner.delete(myTheirsDir, patch.getBeforeName());
}
}
}
VfsUtilCore.visitChildrenRecursively(myTheirsDir, new VirtualFileVisitor() {
@NotNull
@Override
public Result visitFileEx(@NotNull VirtualFile file) {
if (!myTheirsDir.equals(file) && file.isDirectory() && file.getChildren().length == 0) {
try {
myClientRunner.delete(myTheirsDir, file.getPath());
} catch (IOException e) {
throw new VisitorException(e);
}
}
return file.isDirectory() && SvnUtil.isAdminDirectory(file) ? SKIP_CHILDREN : CONTINUE;
}
}, IOException.class);
// this will commit all patch changes
myClientRunner.checkin(myTheirsDir);
// this will create the conflict
myClientRunner.update(myMineDir);
myClientRunner.update(myTheirsDir);
}
use of org.jetbrains.idea.svn.info.Info in project intellij-community by JetBrains.
the class CmdStatusClient method createStatusCallback.
public static SvnStatusHandler.ExternalDataCallback createStatusCallback(final StatusConsumer handler, final File base, final Info infoBase, final SvnStatusHandler[] svnHandl) {
final Map<File, Info> externalsMap = new HashMap<>();
final String[] changelistName = new String[1];
return new SvnStatusHandler.ExternalDataCallback() {
@Override
public void switchPath() {
final PortableStatus pending = svnHandl[0].getPending();
pending.setChangelistName(changelistName[0]);
try {
//if (infoBase != null) {
Info baseInfo = infoBase;
File baseFile = base;
final File pendingFile = new File(pending.getPath());
if (!externalsMap.isEmpty()) {
for (File file : externalsMap.keySet()) {
if (FileUtil.isAncestor(file, pendingFile, false)) {
baseInfo = externalsMap.get(file);
baseFile = file;
break;
}
}
}
if (baseInfo != null) {
final String append;
final String systemIndependentPath = FileUtil.toSystemIndependentName(pending.getPath());
if (pendingFile.isAbsolute()) {
final String relativePath = FileUtil.getRelativePath(FileUtil.toSystemIndependentName(baseFile.getPath()), systemIndependentPath, '/');
append = SVNPathUtil.append(baseInfo.getURL().toString(), FileUtil.toSystemIndependentName(relativePath));
} else {
append = SVNPathUtil.append(baseInfo.getURL().toString(), systemIndependentPath);
}
pending.setURL(SVNURL.parseURIEncoded(append));
}
if (StatusType.STATUS_EXTERNAL.equals(pending.getNodeStatus())) {
externalsMap.put(pending.getFile(), pending.getInfo());
}
handler.consume(pending);
} catch (SVNException e) {
throw new SvnExceptionWrapper(e);
}
}
@Override
public void switchChangeList(String newList) {
changelistName[0] = newList;
}
};
}
use of org.jetbrains.idea.svn.info.Info in project intellij-community by JetBrains.
the class PortableStatus method getFile.
@Override
public File getFile() {
File file = super.getFile();
if (file == null) {
Info info = initInfo();
file = info != null ? info.getFile() : file;
}
return file;
}
use of org.jetbrains.idea.svn.info.Info in project intellij-community by JetBrains.
the class PortableStatus method getURL.
@Override
public SVNURL getURL() {
SVNURL url = super.getURL();
if (url == null) {
Info info = initInfo();
url = info != null ? info.getURL() : url;
}
return url;
}
use of org.jetbrains.idea.svn.info.Info in project intellij-community by JetBrains.
the class PortableStatus method getRevision.
@NotNull
@Override
public SVNRevision getRevision() {
final SVNRevision revision = super.getRevision();
if (revision.isValid())
return revision;
final StatusType status = getContentsStatus();
if (StatusType.STATUS_NONE.equals(status) || StatusType.STATUS_UNVERSIONED.equals(status) || StatusType.STATUS_ADDED.equals(status))
return revision;
final Info info = initInfo();
return info == null ? revision : info.getRevision();
}
Aggregations