Browse Source

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
stable-3.0
Robin Stocker 12 years ago
parent
commit
a50ed5666f
  1. 6
      org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/StatusTest.java
  2. 8
      org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties
  3. 10
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java
  4. 50
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
  5. 12
      org.eclipse.jgit/src/org/eclipse/jgit/api/Status.java

6
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. * and other copyright owners as documented in the project's IP log.
* *
* This program and the accompanying materials are made available * This program and the accompanying materials are made available
@ -191,7 +191,7 @@ public class StatusTest extends CLIRepositoryTestCase {
"# On branch master", // "# On branch master", //
"# Unmerged paths:", // "# Unmerged paths:", //
"# ", // "# ", //
"# \tunmerged", // "# \tboth modified: unmerged", //
"# ", // "# ", //
"# Untracked files:", // "# Untracked files:", //
"# ", // "# ", //
@ -205,7 +205,7 @@ public class StatusTest extends CLIRepositoryTestCase {
"# Not currently on any branch.", // "# Not currently on any branch.", //
"# Unmerged paths:", // "# Unmerged paths:", //
"# ", // "# ", //
"# \tunmerged", // "# \tboth modified: unmerged", //
"# ", // "# ", //
"# Untracked files:", // "# Untracked files:", //
"# ", // "# ", //

8
org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties

@ -153,9 +153,17 @@ serviceNotSupported=Service ''{0}'' not supported
skippingObject=skipping {0} {1} skippingObject=skipping {0} {1}
statusFileListFormat=\t%1$s statusFileListFormat=\t%1$s
statusFileListFormatWithPrefix=\t%1$-11s %2$s statusFileListFormatWithPrefix=\t%1$-11s %2$s
statusFileListFormatUnmerged=\t%1$-20s%2$s
statusModified=modified: statusModified=modified:
statusNewFile=new file: statusNewFile=new file:
statusRemoved=deleted: 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}'' switchedToNewBranch=Switched to a new branch ''{0}''
switchedToBranch=Switched to branch ''{0}'' switchedToBranch=Switched to branch ''{0}''
tagAlreadyExists=tag ''{0}'' already exists tagAlreadyExists=tag ''{0}'' already exists

10
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. * and other copyright owners as documented in the project's IP log.
* *
* This program and the accompanying materials are made available * This program and the accompanying materials are made available
@ -216,9 +216,17 @@ public class CLIText extends TranslationBundle {
/***/ public String skippingObject; /***/ public String skippingObject;
/***/ public String statusFileListFormat; /***/ public String statusFileListFormat;
/***/ public String statusFileListFormatWithPrefix; /***/ public String statusFileListFormatWithPrefix;
/***/ public String statusFileListFormatUnmerged;
/***/ public String statusModified; /***/ public String statusModified;
/***/ public String statusNewFile; /***/ public String statusNewFile;
/***/ public String statusRemoved; /***/ 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 switchedToNewBranch;
/***/ public String switchedToBranch; /***/ public String switchedToBranch;
/***/ public String tagAlreadyExists; /***/ public String tagAlreadyExists;

50
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. * and other copyright owners as documented in the project's IP log.
* *
* This program and the accompanying materials are made available * This program and the accompanying materials are made available
@ -47,10 +47,13 @@ import java.io.IOException;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.IndexDiff.StageState;
import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
@ -63,6 +66,8 @@ class Status extends TextBuiltin {
protected final String statusFileListFormatWithPrefix = CLIText.get().statusFileListFormatWithPrefix; protected final String statusFileListFormatWithPrefix = CLIText.get().statusFileListFormatWithPrefix;
protected final String statusFileListFormatUnmerged = CLIText.get().statusFileListFormatUnmerged;
@Override @Override
protected void run() throws Exception { protected void run() throws Exception {
// Print current branch name // Print current branch name
@ -82,7 +87,8 @@ class Status extends TextBuiltin {
Collection<String> modified = status.getModified(); Collection<String> modified = status.getModified();
Collection<String> missing = status.getMissing(); Collection<String> missing = status.getMissing();
Collection<String> untracked = status.getUntracked(); Collection<String> untracked = status.getUntracked();
Collection<String> unmerged = status.getConflicting(); Map<String, StageState> unmergedStates = status
.getConflictingStageState();
Collection<String> toBeCommitted = new ArrayList<String>(added); Collection<String> toBeCommitted = new ArrayList<String>(added);
toBeCommitted.addAll(changed); toBeCommitted.addAll(changed);
toBeCommitted.addAll(removed); toBeCommitted.addAll(removed);
@ -106,12 +112,12 @@ class Status extends TextBuiltin {
modified, missing, null); modified, missing, null);
firstHeader = false; firstHeader = false;
} }
int nbUnmerged = unmerged.size(); int nbUnmerged = unmergedStates.size();
if (nbUnmerged > 0) { if (nbUnmerged > 0) {
if (!firstHeader) if (!firstHeader)
printSectionHeader(""); //$NON-NLS-1$ printSectionHeader(""); //$NON-NLS-1$
printSectionHeader(CLIText.get().unmergedPaths); printSectionHeader(CLIText.get().unmergedPaths);
printList(unmerged); printUnmerged(unmergedStates);
firstHeader = false; firstHeader = false;
} }
int nbUntracked = untracked.size(); int nbUntracked = untracked.size();
@ -168,4 +174,40 @@ class Status extends TextBuiltin {
} }
return list.size(); 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);
}
}
} }

12
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. * and other copyright owners as documented in the project's IP log.
* *
* This program and the accompanying materials are made available * This program and the accompanying materials are made available
@ -43,9 +43,11 @@
package org.eclipse.jgit.api; package org.eclipse.jgit.api;
import java.util.Collections; import java.util.Collections;
import java.util.Map;
import java.util.Set; import java.util.Set;
import org.eclipse.jgit.lib.IndexDiff; 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 * 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 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. * @return set of files and folders that are ignored and not in the index.
*/ */

Loading…
Cancel
Save