You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TransportPushCommand.java 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package org.eclipse.jgit.integrate.remotehelper.internal;
  2. import org.eclipse.jgit.integrate.remotehelper.RemoteHelperCommand;
  3. import org.eclipse.jgit.lib.Ref;
  4. import org.eclipse.jgit.lib.TextProgressMonitor;
  5. import org.eclipse.jgit.transport.PushConnection;
  6. import org.eclipse.jgit.transport.RemoteRefUpdate;
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. public class TransportPushCommand extends RemoteHelperCommand {
  12. private final RemoteHelperTransport provider;
  13. public TransportPushCommand(RemoteHelperTransport provider) {
  14. super(provider.getContext());
  15. this.provider = provider;
  16. }
  17. private List<PushDefinition> defs = new ArrayList<>();
  18. @Override
  19. public void handle(List<String> arguments) throws Exception {
  20. String first = arguments.get(0);
  21. if (first.startsWith("+")) {
  22. first = first.substring(1);
  23. }
  24. String[] parts = first.split(":", 2);
  25. defs.add(new PushDefinition(parts[0], parts[1]));
  26. }
  27. @Override
  28. public void complete() throws Exception {
  29. Map<String, RemoteRefUpdate> refUpdates = new HashMap<>();
  30. for (PushDefinition def : defs) {
  31. Ref local = getContext().getRepository().findRef(def.getSource());
  32. RemoteRefUpdate refUpdate = new RemoteRefUpdate(
  33. getContext().getRepository(),
  34. local,
  35. def.getDest(),
  36. false,
  37. def.getSource(),
  38. null
  39. );
  40. refUpdates.put(def.getDest(), refUpdate);
  41. }
  42. PushConnection connection = provider.getPushConnection();
  43. connection.push(
  44. new TextProgressMonitor(),
  45. refUpdates
  46. );
  47. for (String dest : refUpdates.keySet()) {
  48. RemoteRefUpdate refUpdate = refUpdates.get(dest);
  49. if (refUpdate.getStatus() == RemoteRefUpdate.Status.OK) {
  50. getContext().reply("ok " + dest);
  51. } else {
  52. getContext().reply("error " + dest + " " + refUpdate.getStatus().name());
  53. }
  54. }
  55. defs.clear();
  56. getContext().complete();
  57. }
  58. private static class PushDefinition {
  59. private final String source;
  60. private final String dest;
  61. PushDefinition(String src, String dst) {
  62. this.source = src;
  63. this.dest = dst;
  64. }
  65. public String getSource() {
  66. return source;
  67. }
  68. public String getDest() {
  69. return dest;
  70. }
  71. }
  72. }