Я смотрю на библиотеку eclipse j git. Он должен быть в состоянии выполнять как S SH, так и HTTPS-соединения, и ему необходимо либо предоставлять сеанс s sh, либо учетные данные пользователя каждый раз при выполнении pu sh, clone, et c. Но я не знаю правильного способа сделать это при использовании цепочки методов.
if (isSSH(repository)) {
call = git
.push()
.setTransportConfigCallback(transport -> {
SshTransport sshTransport = (SshTransport) transport;
sshTransport.setSshSessionFactory(getSshSession(repository));
})
.setPushAll()
.call();
}
else {
call = git
.push()
.setCredentialsProvider(prepareCredentialsProvider(repository))
.setPushAll()
.call();
}
Можно ли упростить его, либо сделав его условным, либо сделав собственный метод "prepareConnection" для замены setTransportConfigCallback и setCredentialsProvider?
И setTransportConfigCallback, и setCredentialsProvider находятся в этом классе:
public abstract class TransportCommand<C extends GitCommand, T> extends
GitCommand<T> {
public C setTransportConfigCallback(
final TransportConfigCallback transportConfigCallback) {
this.transportConfigCallback = transportConfigCallback;
return self();
}
public C setCredentialsProvider(
final CredentialsProvider credentialsProvider) {
this.credentialsProvider = credentialsProvider;
return self();
}
...
РЕДАКТИРОВАТЬ
Пока что мое решение заключается в добавлении этого метода:
private GitCommand prepareConnection(TransportCommand cmd, Repository repository) {
if (isSSH(repository))
return cmd.setTransportConfigCallback(transport -> {
SshTransport sshTransport = (SshTransport) transport;
sshTransport.setSshSessionFactory(getSshSession(repository));
});
else
return cmd.setCredentialsProvider(prepareCredentialsProvider(repository));
}
Может использоваться следующим образом:
Iterable<PushResult> call = ((PushCommand) prepareConnection(git.push(), repository))
.setPushAll()
.call();