Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommand.java')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommand.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommand.java
index 60ebeabd99..da19f4c04c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceiveCommand.java
@@ -43,8 +43,13 @@
package org.eclipse.jgit.transport;
+import java.io.IOException;
+import java.text.MessageFormat;
+
+import org.eclipse.jgit.JGitText;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefUpdate;
/**
* A command being processed by {@link ReceivePack}.
@@ -213,6 +218,47 @@ public class ReceiveCommand {
message = m;
}
+ /**
+ * Execute this command during a receive-pack session.
+ * <p>
+ * Sets the status of the command as a side effect.
+ *
+ * @param rp
+ * receive-pack session.
+ */
+ public void execute(final ReceivePack rp) {
+ try {
+ final RefUpdate ru = rp.getRepository().updateRef(getRefName());
+ ru.setRefLogIdent(rp.getRefLogIdent());
+ switch (getType()) {
+ case DELETE:
+ if (!ObjectId.zeroId().equals(getOldId())) {
+ // We can only do a CAS style delete if the client
+ // didn't bork its delete request by sending the
+ // wrong zero id rather than the advertised one.
+ //
+ ru.setExpectedOldObjectId(getOldId());
+ }
+ ru.setForceUpdate(true);
+ setResult(ru.delete(rp.getRevWalk()));
+ break;
+
+ case CREATE:
+ case UPDATE:
+ case UPDATE_NONFASTFORWARD:
+ ru.setForceUpdate(rp.isAllowNonFastForwards());
+ ru.setExpectedOldObjectId(getOldId());
+ ru.setNewObjectId(getNewId());
+ ru.setRefLogMessage("push", true);
+ setResult(ru.update(rp.getRevWalk()));
+ break;
+ }
+ } catch (IOException err) {
+ setResult(Result.REJECTED_OTHER_REASON, MessageFormat.format(
+ JGitText.get().lockError, err.getMessage()));
+ }
+ }
+
void setRef(final Ref r) {
ref = r;
}
@@ -221,6 +267,38 @@ public class ReceiveCommand {
type = t;
}
+ private void setResult(final RefUpdate.Result r) {
+ switch (r) {
+ case NOT_ATTEMPTED:
+ setResult(Result.NOT_ATTEMPTED);
+ break;
+
+ case LOCK_FAILURE:
+ case IO_FAILURE:
+ setResult(Result.LOCK_FAILURE);
+ break;
+
+ case NO_CHANGE:
+ case NEW:
+ case FORCED:
+ case FAST_FORWARD:
+ setResult(Result.OK);
+ break;
+
+ case REJECTED:
+ setResult(Result.REJECTED_NONFASTFORWARD);
+ break;
+
+ case REJECTED_CURRENT_BRANCH:
+ setResult(Result.REJECTED_CURRENT_BRANCH);
+ break;
+
+ default:
+ setResult(Result.REJECTED_OTHER_REASON, r.name());
+ break;
+ }
+ }
+
@Override
public String toString() {
return getType().name() + ": " + getOldId().name() + " "

Back to the top