aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Stocker <robin@nibor.org>2013-04-19 19:44:24 +0200
committerRobin Stocker <robin@nibor.org>2013-04-19 19:55:24 +0200
commita50ed5666ff41b2b08d09adffad5368b33871e45 (patch)
tree9ddb394abf9de9176f49a7cfc72a3b101140da8c
parentee222a3be1e8b902667a739625047eef29154924 (diff)
downloadjgit-a50ed5666ff41b2b08d09adffad5368b33871e45.tar.gz
jgit-a50ed5666ff41b2b08d09adffad5368b33871e45.zip
status: Print conflict description for unmerged paths
Prefix unmerged paths with conflict description (e.g. "both modified:"), the same way C Git does. Change-Id: I083cd191ae2ad3e2460aa4052774aed6e36c2699
-rw-r--r--org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/StatusTest.java6
-rw-r--r--org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties8
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java10
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java50
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/Status.java12
5 files changed, 77 insertions, 9 deletions
diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/StatusTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/StatusTest.java
index 13f8c319c1..73ae598a8c 100644
--- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/StatusTest.java
+++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/StatusTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012, François Rey <eclipse.org_@_francois_._rey_._name>
+ * Copyright (C) 2012, 2013 François Rey <eclipse.org_@_francois_._rey_._name>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@@ -191,7 +191,7 @@ public class StatusTest extends CLIRepositoryTestCase {
"# On branch master", //
"# Unmerged paths:", //
"# ", //
- "# \tunmerged", //
+ "# \tboth modified: unmerged", //
"# ", //
"# Untracked files:", //
"# ", //
@@ -205,7 +205,7 @@ public class StatusTest extends CLIRepositoryTestCase {
"# Not currently on any branch.", //
"# Unmerged paths:", //
"# ", //
- "# \tunmerged", //
+ "# \tboth modified: unmerged", //
"# ", //
"# Untracked files:", //
"# ", //
diff --git a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties
index 43b6f17768..39c1268396 100644
--- a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties
+++ b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties
@@ -153,9 +153,17 @@ serviceNotSupported=Service ''{0}'' not supported
skippingObject=skipping {0} {1}
statusFileListFormat=\t%1$s
statusFileListFormatWithPrefix=\t%1$-11s %2$s
+statusFileListFormatUnmerged=\t%1$-20s%2$s
statusModified=modified:
statusNewFile=new file:
statusRemoved=deleted:
+statusBothDeleted=both deleted:
+statusAddedByUs=added by us:
+statusDeletedByThem=deleted by them:
+statusAddedByThem=added by them:
+statusDeletedByUs=deleted by us:
+statusBothAdded=both added:
+statusBothModified=both modified:
switchedToNewBranch=Switched to a new branch ''{0}''
switchedToBranch=Switched to branch ''{0}''
tagAlreadyExists=tag ''{0}'' already exists
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java
index 1f14fa272b..fe1c87b8a4 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010, 2012 Sasa Zivkov <sasa.zivkov@sap.com>
+ * Copyright (C) 2010, 2013 Sasa Zivkov <sasa.zivkov@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@@ -216,9 +216,17 @@ public class CLIText extends TranslationBundle {
/***/ public String skippingObject;
/***/ public String statusFileListFormat;
/***/ public String statusFileListFormatWithPrefix;
+ /***/ public String statusFileListFormatUnmerged;
/***/ public String statusModified;
/***/ public String statusNewFile;
/***/ public String statusRemoved;
+ /***/ public String statusBothDeleted;
+ /***/ public String statusAddedByUs;
+ /***/ public String statusDeletedByThem;
+ /***/ public String statusAddedByThem;
+ /***/ public String statusDeletedByUs;
+ /***/ public String statusBothAdded;
+ /***/ public String statusBothModified;
/***/ public String switchedToNewBranch;
/***/ public String switchedToBranch;
/***/ public String tagAlreadyExists;
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
index 4d2308e214..c1b635ca9f 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011, François Rey <eclipse.org_@_francois_._rey_._name>
+ * Copyright (C) 2011, 2013 François Rey <eclipse.org_@_francois_._rey_._name>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@@ -47,10 +47,13 @@ import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.IndexDiff.StageState;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -63,6 +66,8 @@ class Status extends TextBuiltin {
protected final String statusFileListFormatWithPrefix = CLIText.get().statusFileListFormatWithPrefix;
+ protected final String statusFileListFormatUnmerged = CLIText.get().statusFileListFormatUnmerged;
+
@Override
protected void run() throws Exception {
// Print current branch name
@@ -82,7 +87,8 @@ class Status extends TextBuiltin {
Collection<String> modified = status.getModified();
Collection<String> missing = status.getMissing();
Collection<String> untracked = status.getUntracked();
- Collection<String> unmerged = status.getConflicting();
+ Map<String, StageState> unmergedStates = status
+ .getConflictingStageState();
Collection<String> toBeCommitted = new ArrayList<String>(added);
toBeCommitted.addAll(changed);
toBeCommitted.addAll(removed);
@@ -106,12 +112,12 @@ class Status extends TextBuiltin {
modified, missing, null);
firstHeader = false;
}
- int nbUnmerged = unmerged.size();
+ int nbUnmerged = unmergedStates.size();
if (nbUnmerged > 0) {
if (!firstHeader)
printSectionHeader(""); //$NON-NLS-1$
printSectionHeader(CLIText.get().unmergedPaths);
- printList(unmerged);
+ printUnmerged(unmergedStates);
firstHeader = false;
}
int nbUntracked = untracked.size();
@@ -168,4 +174,40 @@ class Status extends TextBuiltin {
}
return list.size();
}
+
+ private void printUnmerged(Map<String, StageState> unmergedStates)
+ throws IOException {
+ List<String> paths = new ArrayList<String>(unmergedStates.keySet());
+ Collections.sort(paths);
+ for (String path : paths) {
+ StageState state = unmergedStates.get(path);
+ String stateDescription = getStageStateDescription(state);
+ outw.println(CLIText.formatLine(String.format(
+ statusFileListFormatUnmerged, stateDescription, path)));
+ outw.flush();
+ }
+ }
+
+ private static String getStageStateDescription(StageState stageState) {
+ CLIText text = CLIText.get();
+ switch (stageState) {
+ case BOTH_DELETED:
+ return text.statusBothDeleted;
+ case ADDED_BY_US:
+ return text.statusAddedByUs;
+ case DELETED_BY_THEM:
+ return text.statusDeletedByThem;
+ case ADDED_BY_THEM:
+ return text.statusAddedByThem;
+ case DELETED_BY_US:
+ return text.statusDeletedByUs;
+ case BOTH_ADDED:
+ return text.statusBothAdded;
+ case BOTH_MODIFIED:
+ return text.statusBothModified;
+ default:
+ throw new IllegalArgumentException("Unknown StageState: " //$NON-NLS-1$
+ + stageState);
+ }
+ }
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/Status.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/Status.java
index cb2ae6bf01..e840c2f608 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/Status.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/Status.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011, Christian Halstrick <christian.halstrick@sap.com>
+ * Copyright (C) 2011, 2013 Christian Halstrick <christian.halstrick@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@@ -43,9 +43,11 @@
package org.eclipse.jgit.api;
import java.util.Collections;
+import java.util.Map;
import java.util.Set;
import org.eclipse.jgit.lib.IndexDiff;
+import org.eclipse.jgit.lib.IndexDiff.StageState;
/**
* A class telling where the working-tree, the index and the current HEAD differ
@@ -153,6 +155,14 @@ public class Status {
}
/**
+ * @return a map from conflicting path to its {@link StageState}.
+ * @since 3.0
+ */
+ public Map<String, StageState> getConflictingStageState() {
+ return Collections.unmodifiableMap(diff.getConflictingStageStates());
+ }
+
+ /**
* @return set of files and folders that are ignored and not in the index.
*/
public Set<String> getIgnoredNotInIndex() {