summaryrefslogtreecommitdiff
path: root/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java')
-rw-r--r--plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java44
1 files changed, 35 insertions, 9 deletions
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
index 02e49354f3ab..14a288171504 100644
--- a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
+++ b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
@@ -17,19 +17,24 @@ import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.*;
import com.intellij.openapi.vcs.changes.*;
+import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.ui.JBColor;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcsUtil.VcsUtil;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.zmlx.hg4idea.*;
import org.zmlx.hg4idea.command.HgResolveCommand;
import org.zmlx.hg4idea.command.HgResolveStatusEnum;
import org.zmlx.hg4idea.command.HgStatusCommand;
import org.zmlx.hg4idea.command.HgWorkingCopyRevisionsCommand;
+import org.zmlx.hg4idea.repo.HgRepository;
import org.zmlx.hg4idea.util.HgUtil;
-import java.awt.*;
+import java.io.File;
import java.util.*;
-import java.util.List;
public class HgChangeProvider implements ChangeProvider {
@@ -38,7 +43,7 @@ public class HgChangeProvider implements ChangeProvider {
public static final FileStatus COPIED = FileStatusFactory.getInstance().createFileStatus("COPIED", "Copied", FileStatus.COLOR_ADDED);
public static final FileStatus RENAMED = FileStatusFactory.getInstance().createFileStatus("RENAMED", "Renamed",
- Color.cyan.darker().darker());
+ JBColor.CYAN.darker().darker());
private static final EnumMap<HgFileStatusEnum, HgChangeProcessor> PROCESSORS =
new EnumMap<HgFileStatusEnum, HgChangeProcessor>(HgFileStatusEnum.class);
@@ -85,21 +90,42 @@ public class HgChangeProvider implements ChangeProvider {
final Map<HgFile, HgResolveStatusEnum> list = new HgResolveCommand(myProject).getListSynchronously(repo);
hgChanges.addAll(new HgStatusCommand.Builder(true).build(myProject).execute(repo, entry.getValue()));
+ final HgRepository hgRepo = HgUtil.getRepositoryForFile(myProject, repo);
+ if (hgRepo != null && hgRepo.hasSubrepos()) {
+ hgChanges.addAll(ContainerUtil.mapNotNull(hgRepo.getSubrepos(), new Function<HgNameWithHashInfo, HgChange>() {
+ @Override
+ public HgChange fun(HgNameWithHashInfo info) {
+ return findChange(hgRepo, info);
+ }
+ }));
+ }
+
sendChanges(builder, hgChanges, list, workingRevision, parentRevision);
}
return hgChanges;
}
+ @Nullable
+ private HgChange findChange(@NotNull HgRepository hgRepo, @NotNull HgNameWithHashInfo info) {
+ File file = new File(hgRepo.getRoot().getPath(), info.getName());
+ VirtualFile virtualSubrepoFile = VfsUtil.findFileByIoFile(file, false);
+ HgRepository subrepo = HgUtil.getRepositoryForFile(myProject, virtualSubrepoFile);
+ if (subrepo != null && !info.getHash().asString().equals(subrepo.getCurrentRevision())) {
+ return new HgChange(new HgFile(hgRepo.getRoot(), new FilePathImpl(virtualSubrepoFile)), HgFileStatusEnum.MODIFIED);
+ }
+ return null;
+ }
+
private void sendChanges(ChangelistBuilder builder, Set<HgChange> changes,
- Map<HgFile, HgResolveStatusEnum> resolveStatus, HgRevisionNumber workingRevision,
- HgRevisionNumber parentRevision) {
+ Map<HgFile, HgResolveStatusEnum> resolveStatus, HgRevisionNumber workingRevision,
+ HgRevisionNumber parentRevision) {
for (HgChange change : changes) {
HgFile afterFile = change.afterFile();
HgFile beforeFile = change.beforeFile();
HgFileStatusEnum status = change.getStatus();
if (resolveStatus.containsKey(afterFile)
- && resolveStatus.get(afterFile) == HgResolveStatusEnum.UNRESOLVED) {
+ && resolveStatus.get(afterFile) == HgResolveStatusEnum.UNRESOLVED) {
builder.processChange(
new Change(
new HgContentRevision(myProject, beforeFile, parentRevision),
@@ -286,9 +312,9 @@ public class HgChangeProvider implements ChangeProvider {
HgFile afterFile
);
- final void processChange(ContentRevision contentRevisionBefore,
- ContentRevision contentRevisionAfter, FileStatus fileStatus,
- ChangelistBuilder builder, VcsKey vcsKey) {
+ static void processChange(ContentRevision contentRevisionBefore,
+ ContentRevision contentRevisionAfter, FileStatus fileStatus,
+ ChangelistBuilder builder, VcsKey vcsKey) {
if (contentRevisionBefore == null && contentRevisionAfter == null) {
return;
}