Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

AbstractFetchCommand.java 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*
  2. * Copyright (C) 2008, Charles O'Farrell <charleso@charleso.org>
  3. * Copyright (C) 2008-2010, Google Inc.
  4. * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>
  5. * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
  6. * Copyright (C) 2010, Sasa Zivkov <sasa.zivkov@sap.com> and others
  7. *
  8. * This program and the accompanying materials are made available under the
  9. * terms of the Eclipse Distribution License v. 1.0 which is available at
  10. * https://www.eclipse.org/org/documents/edl-v10.php.
  11. *
  12. * SPDX-License-Identifier: BSD-3-Clause
  13. */
  14. package org.eclipse.jgit.pgm;
  15. import static java.lang.Character.valueOf;
  16. import java.io.IOException;
  17. import java.text.MessageFormat;
  18. import org.eclipse.jgit.lib.Constants;
  19. import org.eclipse.jgit.lib.ObjectId;
  20. import org.eclipse.jgit.lib.ObjectReader;
  21. import org.eclipse.jgit.lib.RefUpdate;
  22. import org.eclipse.jgit.pgm.internal.CLIText;
  23. import org.eclipse.jgit.transport.FetchResult;
  24. import org.eclipse.jgit.transport.TrackingRefUpdate;
  25. import org.eclipse.jgit.util.io.ThrowingPrintWriter;
  26. import org.kohsuke.args4j.Option;
  27. abstract class AbstractFetchCommand extends TextBuiltin {
  28. @Option(name = "--verbose", aliases = { "-v" }, usage = "usage_beMoreVerbose")
  29. private boolean verbose;
  30. /**
  31. * Show fetch result.
  32. *
  33. * @param r
  34. * a {@link org.eclipse.jgit.transport.FetchResult} object.
  35. * @throws java.io.IOException
  36. * if any.
  37. */
  38. protected void showFetchResult(FetchResult r) throws IOException {
  39. try (ObjectReader reader = db.newObjectReader()) {
  40. boolean shownURI = false;
  41. for (TrackingRefUpdate u : r.getTrackingRefUpdates()) {
  42. if (!verbose && u.getResult() == RefUpdate.Result.NO_CHANGE)
  43. continue;
  44. final char type = shortTypeOf(u.getResult());
  45. final String longType = longTypeOf(reader, u);
  46. final String src = abbreviateRef(u.getRemoteName(), false);
  47. final String dst = abbreviateRef(u.getLocalName(), true);
  48. if (!shownURI) {
  49. outw.println(MessageFormat.format(CLIText.get().fromURI,
  50. r.getURI()));
  51. shownURI = true;
  52. }
  53. outw.format(" %c %-17s %-10s -> %s", valueOf(type), longType, //$NON-NLS-1$
  54. src, dst);
  55. outw.println();
  56. }
  57. }
  58. showRemoteMessages(errw, r.getMessages());
  59. for (FetchResult submoduleResult : r.submoduleResults().values()) {
  60. showFetchResult(submoduleResult);
  61. }
  62. }
  63. static void showRemoteMessages(ThrowingPrintWriter writer, String pkt) throws IOException {
  64. while (0 < pkt.length()) {
  65. final int lf = pkt.indexOf('\n');
  66. final int cr = pkt.indexOf('\r');
  67. final int s;
  68. if (0 <= lf && 0 <= cr)
  69. s = Math.min(lf, cr);
  70. else if (0 <= lf)
  71. s = lf;
  72. else if (0 <= cr)
  73. s = cr;
  74. else {
  75. writer.print(MessageFormat.format(CLIText.get().remoteMessage,
  76. pkt));
  77. writer.println();
  78. break;
  79. }
  80. if (pkt.charAt(s) == '\r') {
  81. writer.print(MessageFormat.format(CLIText.get().remoteMessage,
  82. pkt.substring(0, s)));
  83. writer.print('\r');
  84. } else {
  85. writer.print(MessageFormat.format(CLIText.get().remoteMessage,
  86. pkt.substring(0, s)));
  87. writer.println();
  88. }
  89. pkt = pkt.substring(s + 1);
  90. }
  91. writer.flush();
  92. }
  93. private static String longTypeOf(ObjectReader reader,
  94. final TrackingRefUpdate u) {
  95. final RefUpdate.Result r = u.getResult();
  96. if (r == RefUpdate.Result.LOCK_FAILURE)
  97. return "[lock fail]"; //$NON-NLS-1$
  98. if (r == RefUpdate.Result.IO_FAILURE)
  99. return "[i/o error]"; //$NON-NLS-1$
  100. if (r == RefUpdate.Result.REJECTED)
  101. return "[rejected]"; //$NON-NLS-1$
  102. if (ObjectId.zeroId().equals(u.getNewObjectId()))
  103. return "[deleted]"; //$NON-NLS-1$
  104. if (r == RefUpdate.Result.NEW) {
  105. if (u.getRemoteName().startsWith(Constants.R_HEADS))
  106. return "[new branch]"; //$NON-NLS-1$
  107. else if (u.getLocalName().startsWith(Constants.R_TAGS))
  108. return "[new tag]"; //$NON-NLS-1$
  109. return "[new]"; //$NON-NLS-1$
  110. }
  111. if (r == RefUpdate.Result.FORCED) {
  112. final String aOld = safeAbbreviate(reader, u.getOldObjectId());
  113. final String aNew = safeAbbreviate(reader, u.getNewObjectId());
  114. return aOld + "..." + aNew; //$NON-NLS-1$
  115. }
  116. if (r == RefUpdate.Result.FAST_FORWARD) {
  117. final String aOld = safeAbbreviate(reader, u.getOldObjectId());
  118. final String aNew = safeAbbreviate(reader, u.getNewObjectId());
  119. return aOld + ".." + aNew; //$NON-NLS-1$
  120. }
  121. if (r == RefUpdate.Result.NO_CHANGE)
  122. return "[up to date]"; //$NON-NLS-1$
  123. return "[" + r.name() + "]"; //$NON-NLS-1$//$NON-NLS-2$
  124. }
  125. private static String safeAbbreviate(ObjectReader reader, ObjectId id) {
  126. try {
  127. return reader.abbreviate(id).name();
  128. } catch (IOException cannotAbbreviate) {
  129. return id.name();
  130. }
  131. }
  132. private static char shortTypeOf(RefUpdate.Result r) {
  133. if (r == RefUpdate.Result.LOCK_FAILURE)
  134. return '!';
  135. if (r == RefUpdate.Result.IO_FAILURE)
  136. return '!';
  137. if (r == RefUpdate.Result.NEW)
  138. return '*';
  139. if (r == RefUpdate.Result.FORCED)
  140. return '+';
  141. if (r == RefUpdate.Result.FAST_FORWARD)
  142. return ' ';
  143. if (r == RefUpdate.Result.REJECTED)
  144. return '!';
  145. if (r == RefUpdate.Result.NO_CHANGE)
  146. return '=';
  147. return ' ';
  148. }
  149. }