Merge changes I335587ee,I4182a174

* changes:
  Merge branch 'stable-4.9'
  Remove an unused import from PackParserTest
This commit is contained in:
David Pursehouse 2017-11-10 22:05:50 -05:00 committed by Gerrit Code Review @ Eclipse.org
commit 1a091ff5f9
6 changed files with 104 additions and 1 deletions

View File

@ -47,7 +47,6 @@
package org.eclipse.jgit.transport; package org.eclipse.jgit.transport;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;

View File

@ -35,6 +35,18 @@
<message_argument value="processEntry(CanonicalTreeParser, CanonicalTreeParser, CanonicalTreeParser, DirCacheBuildIterator, WorkingTreeIterator, boolean)"/> <message_argument value="processEntry(CanonicalTreeParser, CanonicalTreeParser, CanonicalTreeParser, DirCacheBuildIterator, WorkingTreeIterator, boolean)"/>
</message_arguments> </message_arguments>
</filter> </filter>
<filter id="1141899266">
<message_arguments>
<message_argument value="3.5"/>
<message_argument value="4.9"/>
<message_argument value="processEntry(CanonicalTreeParser, CanonicalTreeParser, CanonicalTreeParser, DirCacheBuildIterator, WorkingTreeIterator, boolean)"/>
</message_arguments>
</filter>
<filter id="1143996420">
<message_arguments>
<message_argument value="processEntry(CanonicalTreeParser, CanonicalTreeParser, CanonicalTreeParser, DirCacheBuildIterator, WorkingTreeIterator, boolean)"/>
</message_arguments>
</filter>
</resource> </resource>
<resource path="src/org/eclipse/jgit/transport/http/HttpConnection.java" type="org.eclipse.jgit.transport.http.HttpConnection"> <resource path="src/org/eclipse/jgit/transport/http/HttpConnection.java" type="org.eclipse.jgit.transport.http.HttpConnection">
<filter id="403767336"> <filter id="403767336">

View File

@ -611,6 +611,7 @@ sourceIsNotAWildcard=Source is not a wildcard.
sourceRefDoesntResolveToAnyObject=Source ref {0} doesn''t resolve to any object. sourceRefDoesntResolveToAnyObject=Source ref {0} doesn''t resolve to any object.
sourceRefNotSpecifiedForRefspec=Source ref not specified for refspec: {0} sourceRefNotSpecifiedForRefspec=Source ref not specified for refspec: {0}
squashCommitNotUpdatingHEAD=Squash commit -- not updating HEAD squashCommitNotUpdatingHEAD=Squash commit -- not updating HEAD
sshUserNameError=Jsch error: failed to set SSH user name correctly to ''{0}''; using ''{1}'' picked up from SSH config file.
sslFailureExceptionMessage=Secure connection to {0} could not be stablished because of SSL problems sslFailureExceptionMessage=Secure connection to {0} could not be stablished because of SSL problems
sslFailureInfo=A secure connection to {0}\ncould not be established because the server''s certificate could not be validated. sslFailureInfo=A secure connection to {0}\ncould not be established because the server''s certificate could not be validated.
sslFailureCause=SSL reported: {0} sslFailureCause=SSL reported: {0}

View File

@ -670,6 +670,7 @@ public static JGitText get() {
/***/ public String sourceRefDoesntResolveToAnyObject; /***/ public String sourceRefDoesntResolveToAnyObject;
/***/ public String sourceRefNotSpecifiedForRefspec; /***/ public String sourceRefNotSpecifiedForRefspec;
/***/ public String squashCommitNotUpdatingHEAD; /***/ public String squashCommitNotUpdatingHEAD;
/***/ public String sshUserNameError;
/***/ public String sslFailureExceptionMessage; /***/ public String sslFailureExceptionMessage;
/***/ public String sslFailureInfo; /***/ public String sslFailureInfo;
/***/ public String sslFailureCause; /***/ public String sslFailureCause;

View File

@ -447,6 +447,62 @@ private DirCacheEntry keep(DirCacheEntry e) {
return newEntry; return newEntry;
} }
/**
* Processes one path and tries to merge taking git attributes in account.
* This method will do all trivial (not content) merges and will also detect
* if a merge will fail. The merge will fail when one of the following is
* true
* <ul>
* <li>the index entry does not match the entry in ours. When merging one
* branch into the current HEAD, ours will point to HEAD and theirs will
* point to the other branch. It is assumed that the index matches the HEAD
* because it will only not match HEAD if it was populated before the merge
* operation. But the merge commit should not accidentally contain
* modifications done before the merge. Check the <a href=
* "http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_3_way_merge"
* >git read-tree</a> documentation for further explanations.</li>
* <li>A conflict was detected and the working-tree file is dirty. When a
* conflict is detected the content-merge algorithm will try to write a
* merged version into the working-tree. If the file is dirty we would
* override unsaved data.</li>
* </ul>
*
* @param base
* the common base for ours and theirs
* @param ours
* the ours side of the merge. When merging a branch into the
* HEAD ours will point to HEAD
* @param theirs
* the theirs side of the merge. When merging a branch into the
* current HEAD theirs will point to the branch which is merged
* into HEAD.
* @param index
* the index entry
* @param work
* the file in the working tree
* @param ignoreConflicts
* see
* {@link ResolveMerger#mergeTrees(AbstractTreeIterator, RevTree, RevTree, boolean)}
* @return <code>false</code> if the merge will fail because the index entry
* didn't match ours or the working-dir file was dirty and a
* conflict occurred
* @throws MissingObjectException
* @throws IncorrectObjectTypeException
* @throws CorruptObjectException
* @throws IOException
* @since 3.5
* @deprecated
*/
@Deprecated
protected boolean processEntry(CanonicalTreeParser base,
CanonicalTreeParser ours, CanonicalTreeParser theirs,
DirCacheBuildIterator index, WorkingTreeIterator work,
boolean ignoreConflicts) throws MissingObjectException,
IncorrectObjectTypeException, CorruptObjectException, IOException {
return processEntry(base, ours, theirs, index, work, ignoreConflicts,
null);
}
/** /**
* Processes one path and tries to merge taking git attributes in account. * Processes one path and tries to merge taking git attributes in account.
* This method will do all trivial (not content) merges and will also detect * This method will do all trivial (not content) merges and will also detect

View File

@ -53,14 +53,19 @@
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.ConnectException; import java.net.ConnectException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.text.MessageFormat;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.errors.TransportException;
import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FS;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException; import com.jcraft.jsch.JSchException;
@ -80,6 +85,10 @@
* to supply appropriate {@link UserInfo} to the session. * to supply appropriate {@link UserInfo} to the session.
*/ */
public abstract class JschConfigSessionFactory extends SshSessionFactory { public abstract class JschConfigSessionFactory extends SshSessionFactory {
private static final Logger LOG = LoggerFactory
.getLogger(JschConfigSessionFactory.class);
private final Map<String, JSch> byIdentityFile = new HashMap<>(); private final Map<String, JSch> byIdentityFile = new HashMap<>();
private JSch defaultJSch; private JSch defaultJSch;
@ -177,6 +186,9 @@ private Session createSession(CredentialsProvider credentialsProvider,
FS fs, String user, final String pass, String host, int port, FS fs, String user, final String pass, String host, int port,
final OpenSshConfig.Host hc) throws JSchException { final OpenSshConfig.Host hc) throws JSchException {
final Session session = createSession(hc, user, host, port, fs); final Session session = createSession(hc, user, host, port, fs);
// Jsch will have overridden the explicit user by the one from the SSH
// config file...
setUserName(session, user);
// We retry already in getSession() method. JSch must not retry // We retry already in getSession() method. JSch must not retry
// on its own. // on its own.
session.setConfig("MaxAuthTries", "1"); //$NON-NLS-1$ //$NON-NLS-2$ session.setConfig("MaxAuthTries", "1"); //$NON-NLS-1$ //$NON-NLS-2$
@ -199,6 +211,28 @@ private Session createSession(CredentialsProvider credentialsProvider,
return session; return session;
} }
private void setUserName(Session session, String userName) {
// Jsch 0.1.54 picks up the user name from the ssh config, even if an
// explicit user name was given! We must correct that if ~/.ssh/config
// has a different user name.
if (userName == null || userName.isEmpty()
|| userName.equals(session.getUserName())) {
return;
}
try {
Class<?>[] parameterTypes = { String.class };
Method method = Session.class.getDeclaredMethod("setUserName", //$NON-NLS-1$
parameterTypes);
method.setAccessible(true);
method.invoke(session, userName);
} catch (NullPointerException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException
| NoSuchMethodException | SecurityException e) {
LOG.error(MessageFormat.format(JGitText.get().sshUserNameError,
userName, session.getUserName()), e);
}
}
/** /**
* Create a new remote session for the requested address. * Create a new remote session for the requested address.
* *