throw new PackProtocolException(MessageFormat.format(JGitText.get().unexpectedRefReport, uri, refName)); if (ok) { rru.setStatus(Status.OK); } else { rru.setStatus(Status.REJECTED_OTHER_REASON); rru.setMessage(message); if (rru.getStatus() == Status.AWAITING_REPORT) throw new PackProtocolException(MessageFormat.format( JGitText.get().expectedReportForRefNotReceived , uri, rru.getRemoteName()));
final Map<String, RemoteRefUpdate> result = new LinkedHashMap<>(); for (RemoteRefUpdate rru : toPush.values()) { final Ref advertisedRef = connection.getRef(rru.getRemoteName()); ObjectId advertisedOld = null; if (advertisedRef != null) { if (rru.getNewObjectId().equals(advertisedOld)) { if (rru.isDelete()) { rru.setStatus(Status.NON_EXISTING); } else { rru.setStatus(Status.UP_TO_DATE); if (rru.isExpectingOldObjectId() && !rru.getExpectedOldObjectId().equals(advertisedOld)) { rru.setStatus(Status.REJECTED_REMOTE_CHANGED); if (atomic) { return rejectAll(); if (!rru.isExpectingOldObjectId()) { rru.setExpectedOldObjectId(advertisedOld); if (advertisedOld.equals(ObjectId.zeroId()) || rru.isDelete()) { rru.setFastForward(true); result.put(rru.getRemoteName(), rru); continue; try {
public static ArrayMemory valueOf(RemoteRefUpdate value) { ArrayMemory memory = new ArrayMemory(); memory.refOfIndex("message").assign(value.getMessage()); memory.refOfIndex("remoteName").assign(value.getRemoteName()); memory.refOfIndex("srcRef").assign(value.getSrcRef()); memory.refOfIndex("expectedOldObjectId").assign(valueOf(value.getExpectedOldObjectId())); memory.refOfIndex("newObjectId").assign(valueOf(value.getNewObjectId())); memory.refOfIndex("delete").assign(value.isDelete()); memory.refOfIndex("fastForward").assign(value.isFastForward()); memory.refOfIndex("forceUpdate").assign(value.isForceUpdate()); return memory; }
private void updateCommand(RemoteRefUpdate u) { try { dest.writeRef(u.getRemoteName(), u.getNewObjectId()); newRefs.put(u.getRemoteName(), new ObjectIdRef.Unpeeled( Storage.LOOSE, u.getRemoteName(), u.getNewObjectId())); u.setStatus(Status.OK); } catch (IOException e) { u.setStatus(Status.REJECTED_OTHER_REASON); u.setMessage(e.getMessage()); } }
public static String toString(Collection<RemoteRefUpdate> updates) { StringBuilder builder = new StringBuilder(); for (RemoteRefUpdate update : updates) { if (builder.length() > 0) { builder.append(" "); } builder.append(update.getMessage() + " " + update.getRemoteName() + " " + update.getNewObjectId()); } return builder.toString(); }
final String remoteName = rru.getRemoteName(); final String srcRef = rru.isDelete() ? null : rru.getSrcRef(); switch (rru.getStatus()) { case OK: if (rru.isDelete()) printUpdateLine('-', "[deleted]", null, remoteName, null); else { printUpdateLine('*', summary, srcRef, remoteName, null); } else { boolean fastForward = rru.isFastForward(); final char flag = fastForward ? ' ' : '+'; final String summary = safeAbbreviate(reader, oldRef .getObjectId()) + (fastForward ? ".." : "...") //$NON-NLS-1$ //$NON-NLS-2$ + safeAbbreviate(reader, rru.getNewObjectId()); final String message = fastForward ? null : CLIText.get().forcedUpdate; printUpdateLine(flag, summary, srcRef, remoteName, message); final String message = MessageFormat.format( CLIText.get().remoteRefObjectChangedIsNotExpectedOne, safeAbbreviate(reader, rru.getExpectedOldObjectId())); printUpdateLine('!', "[rejected]", srcRef, remoteName, message); break; .getMessage()); break;
if (!capableDeleteRefs && rru.isDelete()) { rru.setStatus(Status.REJECTED_NODELETE); continue; ObjectId oldId = rru.getExpectedOldObjectId(); if (oldId == null) { final Ref advertised = getRef(rru.getRemoteName()); oldId = advertised != null ? advertised.getObjectId() : null; if (oldId == null) { sb.append(rru.getNewObjectId().name()); sb.append(' '); sb.append(rru.getRemoteName()); if (!sentCommand) { sentCommand = true; rru.setStatus(Status.AWAITING_REPORT); if (!rru.isDelete()) writePack = true;
/** * Set Refs * * @param toRefs * a collection of {@code RemoteRefUpdate}s */ public void setRefs(Collection<RemoteRefUpdate> toRefs) { StringBuilder b = new StringBuilder(); for (RemoteRefUpdate u : toRefs) { b.append(u.getSrcRef()); b.append(" "); //$NON-NLS-1$ b.append(u.getNewObjectId().getName()); b.append(" "); //$NON-NLS-1$ b.append(u.getRemoteName()); b.append(" "); //$NON-NLS-1$ ObjectId ooid = u.getExpectedOldObjectId(); b.append((ooid == null) ? ObjectId.zeroId().getName() : ooid .getName()); b.append("\n"); //$NON-NLS-1$ } refs = b.toString(); } }
pushResults.add(pushResult); for (RemoteRefUpdate refUpdate : pushResult.getRemoteUpdates()) { Status status = refUpdate.getStatus(); ObjectId from = refUpdate.getTrackingRefUpdate() == null || refUpdate.getTrackingRefUpdate().getOldObjectId() == null ? refUpdate.getExpectedOldObjectId() : refUpdate.getTrackingRefUpdate().getOldObjectId(); ObjectId to = refUpdate.getTrackingRefUpdate() == null || refUpdate.getTrackingRefUpdate().getNewObjectId() == null ? refUpdate.getNewObjectId() : refUpdate.getTrackingRefUpdate().getNewObjectId(); if (status == Status.OK) { acceptedUpdates.put(refUpdate.getSrcRef(), new RemoteBranchChange(refUpdate.getSrcRef(), refUpdate) .updated(from, to, "fast-forward")); } else if (status == Status.UP_TO_DATE) { acceptedUpdates.put(refUpdate.getSrcRef(), new RemoteBranchChange(refUpdate.getSrcRef(), refUpdate)); } else { switch (status) { case REJECTED_NONFASTFORWARD: rejectedUpdates.put(refUpdate.getSrcRef(), new RemoteBranchChange(refUpdate.getSrcRef(), refUpdate) .rejected(from, to, "non fast-forward update")); break; rejectedUpdates.put(refUpdate.getSrcRef(), new RemoteBranchChange(refUpdate.getSrcRef(), refUpdate) .rejected(from, to, status.toString())); break; RemoteRefUpdate rejectedRef = rejectedUpdates.get(rejectedRefName).getRemoteRefUpdate(); LOGGER.warn("Rejected push: {}. Attempting to recreate local branch.", rejectedRef); String refName = rejectedRef.getRemoteName(); String branch = refName.substring(refName.lastIndexOf('/') + 1); try {
private void parseRemoteRefUpdate(RemoteRefUpdate update) { String msg = null; switch (update.getStatus()) { case AWAITING_REPORT: msg = String .format("[%s] Push process is awaiting update report from remote repository.\n", update.getRemoteName()); break; case NON_EXISTING: msg = String.format("[%s] Remote ref didn't exist.\n", update.getRemoteName()); break; case NOT_ATTEMPTED: msg = String .format("[%s] Push process hasn't yet attempted to update this ref.\n", update.getRemoteName()); break; case OK: msg = String.format("[%s] Success push to remote ref.\n", update.getRemoteName()); break; case REJECTED_NODELETE: .format("[%s] Remote ref update was rejected," + " because remote side doesn't support/allow deleting refs.\n", update.getRemoteName()); break; case REJECTED_NONFASTFORWARD: msg = String.format("[%s] Remote ref update was rejected," + " as it would cause non fast-forward update.\n",
public void logPushResult(Iterable<PushResult> results, Repository repository, boolean verbose) throws IOException { String local = repository.getDirectory().getCanonicalPath(); for (PushResult result : results) { Map<String, RemoteRefUpdate> map = new TreeMap<>(); for (RemoteRefUpdate update : result.getRemoteUpdates()) { if (verbose || update.getStatus() != RemoteRefUpdate.Status.UP_TO_DATE) { map.put(update.getSrcRef(), update); } } if (map.size() > 0) { LOG.info(String.format("Pushed from %s to %s:", local, result.getURI())); for (RemoteRefUpdate update : map.values()) { LOG.info(String.format(" - %s (%s)", update.getSrcRef(), update.getStatus())); } } else { LOG.info(String.format("Pushed from %s to %s - no reference was updated", local, result.getURI())); } } }
Status getStatus() { return update.getStatus(); }
switch (remoteRefUpdate.getStatus()) { case OK: continue; default: final String message; if (StringUtils.isNotEmpty(remoteRefUpdate.getMessage())) { message = remoteRefUpdate.getMessage(); } else { message = "Non-success push status: " + remoteRefUpdate.getStatus().toString();
private void logPushResultDetails(Iterable<PushResult> forcePushResult) { if (log.isInfoEnabled()) { StringBuilder sb = new StringBuilder("force push results : \n"); for (PushResult pushResult : forcePushResult) { Collection<RemoteRefUpdate> pushResultDetails = pushResult.getRemoteUpdates(); for (RemoteRefUpdate result : pushResultDetails) { sb.append("- ").append(result.getRemoteName()) .append(" - ").append(result.getStatus().name()) .append(" - ").append(result.getNewObjectId()); } } log.info(sb.toString()); } }
if (!ObjectId.zeroId().equals(r.getNewObjectId())) newObjects.add(r.getNewObjectId());
private void updateTrackingRefs() { for (RemoteRefUpdate rru : toPush.values()) { final Status status = rru.getStatus(); if (rru.hasTrackingRefUpdate() && (status == Status.UP_TO_DATE || status == Status.OK)) { // update local tracking branch only when there is a chance that // it has changed; this is possible for: // -updated (OK) status, // -up to date (UP_TO_DATE) status try { rru.updateTrackingRef(walker); } catch (IOException e) { // ignore as RefUpdate has stored I/O error status } } } }
private Map<String, RemoteRefUpdate> rejectAll() { for (RemoteRefUpdate rru : toPush.values()) { if (rru.getStatus() == Status.NOT_ATTEMPTED) { rru.setStatus(RemoteRefUpdate.Status.REJECTED_OTHER_REASON); rru.setMessage(JGitText.get().transactionAborted); } } return Collections.emptyMap(); }
private static String pickHEAD(List<RemoteRefUpdate> updates) { // Try to use master if the user is pushing that, it is the // default branch and is likely what they want to remain as // the default on the new remote. // for (RemoteRefUpdate u : updates) { final String n = u.getRemoteName(); if (n.equals(Constants.R_HEADS + Constants.MASTER)) return n; } // Pick any branch, under the assumption the user pushed only // one to the remote side. // for (RemoteRefUpdate u : updates) { final String n = u.getRemoteName(); if (n.startsWith(Constants.R_HEADS)) return n; } return updates.get(0).getRemoteName(); } }
@Override public String publish(String name) throws ConfigurationPersistenceException { StringBuilder message = new StringBuilder(); String remoteName = gitRepository.getRemoteName(name); if (remoteName != null && gitRepository.isValidRemoteName(remoteName)) { try (Git git = gitRepository.getGit()) { Iterable<PushResult> result = git.push().setRemote(remoteName) .setRefSpecs(new RefSpec(gitRepository.getBranch() + ':' + gitRepository.getBranch())) .setPushTags().call(); for (PushResult pushResult : result) { for (RemoteRefUpdate refUpdate : pushResult.getRemoteUpdates()) { message.append(refUpdate.getMessage()).append(" ").append(refUpdate.getNewObjectId().name()).append('\n'); } } } catch (GitAPIException ex) { throw MGMT_OP_LOGGER.failedToPublishConfiguration(ex, name, ex.getMessage()); } } return message.toString(); }