diff options
author | Robin Stocker <robin@nibor.org> | 2013-04-19 19:44:24 +0200 |
---|---|---|
committer | Robin Stocker <robin@nibor.org> | 2013-04-19 19:55:24 +0200 |
commit | a50ed5666ff41b2b08d09adffad5368b33871e45 (patch) | |
tree | 9ddb394abf9de9176f49a7cfc72a3b101140da8c | |
parent | ee222a3be1e8b902667a739625047eef29154924 (diff) | |
download | jgit-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
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() { |