]> source.dussan.org Git - jgit.git/commitdiff
status: Print conflict description for unmerged paths 72/12072/1
authorRobin Stocker <robin@nibor.org>
Fri, 19 Apr 2013 17:44:24 +0000 (19:44 +0200)
committerRobin Stocker <robin@nibor.org>
Fri, 19 Apr 2013 17:55:24 +0000 (19:55 +0200)
Prefix unmerged paths with conflict description (e.g. "both modified:"),
the same way C Git does.

Change-Id: I083cd191ae2ad3e2460aa4052774aed6e36c2699

org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/StatusTest.java
org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
org.eclipse.jgit/src/org/eclipse/jgit/api/Status.java

index 13f8c319c1cd1af7bc63c5f53707e017616fc405..73ae598a8c2651e558900ab4f889a4334fa92639 100644 (file)
@@ -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:", //
                                                "# ", //
index 43b6f1776864ab27c19cd65aa4c9061275732492..39c12683960a5b0e61542e9929742d88089bc10f 100644 (file)
@@ -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
index 1f14fa272bcd796adb1f30a1aa525c93e3dc7563..fe1c87b8a453c5a51e0a1c4160af3aff2a6718ca 100644 (file)
@@ -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;
index 4d2308e2141667221eafdf2959fb414930d3eadc..c1b635ca9f1e00ea7b8e494f82252d6cb31b99be 100644 (file)
@@ -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);
+               }
+       }
 }
index cb2ae6bf01c31df89e21972f04ef00d06a3f3827..e840c2f6085d09a4286c511ac7cc24f5714c6ce8 100644 (file)
@@ -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
 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
@@ -152,6 +154,14 @@ public class Status {
                return Collections.unmodifiableSet(diff.getConflicting());
        }
 
+       /**
+        * @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.
         */