Skip to content

Commit

Permalink
Revert once more jgit version. The mainline *still doesn't have these…
Browse files Browse the repository at this point in the history
… changes* without which

master/slave support will break horribly.



git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/plugins/git@17919 71c3de6d-444a-0410-be80-ed276b4c234a
  • Loading branch information
magnayn committed May 11, 2009
1 parent 07e690b commit 0f56dae
Show file tree
Hide file tree
Showing 28 changed files with 1,639 additions and 160 deletions.
13 changes: 13 additions & 0 deletions README
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
This version of the git plugin needs a patched version of JGit to support various items being Serializable.

If you just use any old 0.4-SNAPSHOT, until the patches are merged, things may not work (and master/slave definitely won't work).

The patched version is in the maven-repository subdirectory. It's also available at
https://guest:[email protected]/svn/hudson/trunk/hudson/plugins/git/maven-repository

But - maven doesn't seem to want to pass the guest credentials - hence the slightly hackish raw fisheye URL:
http://fisheye4.atlassian.com/browse/~raw,r=trunk/hudson/trunk/hudson/plugins/git/maven-repository

If you wish to post-patch a (newer) version of JGit (newer than fedd114bc) then the patches are in jgit-patches. They have been
submitted to the JGit maintainer.

336 changes: 336 additions & 0 deletions jgit-patch/0001-asdf.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,336 @@
From 8710ee806c047593abaeabfac20d758d4f0de7a9 Mon Sep 17 00:00:00 2001
From: Nigel Magnay <[email protected]>
Date: Mon, 16 Feb 2009 20:03:22 +0000
Subject: [PATCH] asdf
Signed-off-by: Nigel Magnay <[email protected]>

---
.../src/org/spearce/jgit/lib/ObjectId.java | 22 +++++-
.../src/org/spearce/jgit/transport/RefSpec.java | 77 +++++++++++++------
.../org/spearce/jgit/transport/RemoteConfig.java | 79 +++++++++++++++++++-
.../src/org/spearce/jgit/transport/URIish.java | 29 +++++++-
4 files changed, 179 insertions(+), 28 deletions(-)

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectId.java b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectId.java
index 52ce0d4..7c3b922 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectId.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectId.java
@@ -38,6 +38,10 @@

package org.spearce.jgit.lib;

+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.io.UnsupportedEncodingException;

import org.spearce.jgit.util.NB;
@@ -45,7 +49,7 @@
/**
* A SHA-1 abstraction.
*/
-public class ObjectId extends AnyObjectId {
+public class ObjectId extends AnyObjectId implements Serializable {
private static final ObjectId ZEROID;

private static final String ZEROID_STR;
@@ -269,4 +273,20 @@ protected ObjectId(final AnyObjectId src) {
public ObjectId toObjectId() {
return this;
}
+
+ private void writeObject(ObjectOutputStream os) throws IOException {
+ os.writeInt(w1);
+ os.writeInt(w2);
+ os.writeInt(w3);
+ os.writeInt(w4);
+ os.writeInt(w5);
+ }
+
+ private void readObject(ObjectInputStream ois) throws IOException {
+ w1 = ois.readInt();
+ w2 = ois.readInt();
+ w3 = ois.readInt();
+ w4 = ois.readInt();
+ w5 = ois.readInt();
+ }
}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/RefSpec.java b/org.spearce.jgit/src/org/spearce/jgit/transport/RefSpec.java
index 521110b..0ee89b0 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/RefSpec.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/RefSpec.java
@@ -37,6 +37,11 @@

package org.spearce.jgit.transport;

+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
import org.spearce.jgit.lib.Constants;
import org.spearce.jgit.lib.Ref;

@@ -46,7 +51,7 @@
* A ref specification provides matching support and limited rules to rewrite a
* reference in one repository to another reference in another repository.
*/
-public class RefSpec {
+public class RefSpec implements Externalizable {
/**
* Suffix for wildcard ref spec component, that indicate matching all refs
* with specified prefix.
@@ -109,30 +114,7 @@ public RefSpec() {
* the specification is invalid.
*/
public RefSpec(final String spec) {
- String s = spec;
- if (s.startsWith("+")) {
- force = true;
- s = s.substring(1);
- }
-
- final int c = s.indexOf(':');
- if (c == 0) {
- s = s.substring(1);
- if (isWildcard(s))
- throw new IllegalArgumentException("Invalid wildcards " + spec);
- dstName = s;
- } else if (c > 0) {
- srcName = s.substring(0, c);
- dstName = s.substring(c + 1);
- if (isWildcard(srcName) && isWildcard(dstName))
- wildcard = true;
- else if (isWildcard(srcName) || isWildcard(dstName))
- throw new IllegalArgumentException("Invalid wildcards " + spec);
- } else {
- if (isWildcard(s))
- throw new IllegalArgumentException("Invalid wildcards " + spec);
- srcName = s;
- }
+ initializeFromString(spec);
}

/**
@@ -161,6 +143,42 @@ private RefSpec(final RefSpec p) {
}

/**
+ * Initialize the ref specification from a string.
+ *
+ * @param spec
+ * string describing the specification.
+ * @throws IllegalArgumentException
+ * the specification is invalid.
+ */
+ private void initializeFromString(final String spec) {
+ srcName = null;
+ String s = spec;
+ if (s.startsWith("+")) {
+ force = true;
+ s = s.substring(1);
+ }
+
+ final int c = s.indexOf(':');
+ if (c == 0) {
+ s = s.substring(1);
+ if (isWildcard(s))
+ throw new IllegalArgumentException("Invalid wildcards " + spec);
+ dstName = s;
+ } else if (c > 0) {
+ srcName = s.substring(0, c);
+ dstName = s.substring(c + 1);
+ if (isWildcard(srcName) && isWildcard(dstName))
+ wildcard = true;
+ else if (isWildcard(srcName) || isWildcard(dstName))
+ throw new IllegalArgumentException("Invalid wildcards " + spec);
+ } else {
+ if (isWildcard(s))
+ throw new IllegalArgumentException("Invalid wildcards " + spec);
+ srcName = s;
+ }
+ }
+
+ /**
* Check if this specification wants to forcefully update the destination.
*
* @return true if this specification asks for updates without merge tests.
@@ -421,4 +439,13 @@ public String toString() {
}
return r.toString();
}
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ initializeFromString(in.readUTF());
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeUTF(toString());
+ }
}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java
index 5bbf664..899f73f 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java
@@ -38,6 +38,10 @@

package org.spearce.jgit.transport;

+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
@@ -53,7 +57,7 @@
* describing how refs should be transferred between this repository and the
* remote repository.
*/
-public class RemoteConfig {
+public class RemoteConfig implements Serializable {
private static final String SECTION = "remote";

private static final String KEY_URL = "url";
@@ -382,4 +386,77 @@ public TagOpt getTagOpt() {
public void setTagOpt(final TagOpt option) {
tagopt = option != null ? option : TagOpt.AUTO_FOLLOW;
}
+
+ private void writeObject(ObjectOutputStream os) throws IOException {
+
+ // Name
+ os.writeUTF(name);
+
+ // Key, Value pairs
+ for (URIish uri : uris) {
+ os.writeUTF(KEY_URL);
+ os.writeUTF(uri.toPrivateString());
+ }
+
+ for (RefSpec refspec : fetch) {
+ os.writeUTF(KEY_FETCH);
+ os.writeUTF(refspec.toString());
+ }
+
+ for (RefSpec refspec : push) {
+ os.writeUTF(KEY_PUSH);
+ os.writeUTF(refspec.toString());
+ }
+
+ os.writeUTF(KEY_UPLOADPACK);
+ os.writeUTF(uploadpack);
+
+ os.writeUTF(KEY_RECEIVEPACK);
+ os.writeUTF(receivepack);
+
+ os.writeUTF(KEY_TAGOPT);
+ os.writeUTF(tagopt.option());
+
+ // End marker
+ os.writeUTF("");
+ }
+
+ private void readObject(ObjectInputStream ois) throws IOException {
+ uris = new ArrayList<URIish>();
+ fetch = new ArrayList<RefSpec>();
+ push = new ArrayList<RefSpec>();
+ uploadpack = DEFAULT_UPLOAD_PACK;
+ receivepack = DEFAULT_RECEIVE_PACK;
+
+ name = ois.readUTF();
+
+ for (String key = ois.readUTF(); key.length() > 0; key = ois.readUTF()) {
+ String value = ois.readUTF();
+
+ if (key.equals(KEY_URL)) {
+ try {
+ uris.add(new URIish(value));
+ } catch (URISyntaxException e) {
+ throw new IOException("Invalid URI in RemoteConfig : "
+ + value);
+ }
+ } else if (key.equals(KEY_FETCH)) {
+ fetch.add(new RefSpec(value));
+
+ } else if (key.equals(KEY_PUSH)) {
+ push.add(new RefSpec(value));
+
+ } else if (key.equals(KEY_UPLOADPACK)) {
+ uploadpack = value;
+
+ } else if (key.equals(KEY_RECEIVEPACK)) {
+ receivepack = value;
+
+ } else if (key.equals(KEY_TAGOPT)) {
+ tagopt = TagOpt.fromOption(value);
+ }
+
+ }
+
+ }
}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/URIish.java b/org.spearce.jgit/src/org/spearce/jgit/transport/URIish.java
index b86e00c..6b85f45 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/URIish.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/URIish.java
@@ -38,6 +38,10 @@

package org.spearce.jgit.transport;

+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.regex.Matcher;
@@ -49,7 +53,7 @@
* RFC 2396 URI's is that no URI encoding/decoding ever takes place. A space or
* any special character is written as-is.
*/
-public class URIish {
+public class URIish implements Externalizable {
private static final Pattern FULL_URI = Pattern
.compile("^(?:([a-z][a-z0-9+-]+)://(?:([^/]+?)(?::([^/]+?))?@)?(?:([^/]+?))?(?::(\\d+))?)?((?:[A-Za-z]:)?/.+)$");

@@ -75,6 +79,16 @@
* @throws URISyntaxException
*/
public URIish(String s) throws URISyntaxException {
+ initializeFromString(s);
+ }
+
+ /**
+ * Set fields from string based URI.
+ *
+ * @param s
+ * @throws URISyntaxException
+ */
+ private void initializeFromString(String s) throws URISyntaxException {
s = s.replace('\\', '/');
Matcher matcher = FULL_URI.matcher(s);
if (matcher.matches()) {
@@ -357,4 +371,17 @@ private String format(final boolean includePassword) {

return r.toString();
}
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ try {
+ initializeFromString(in.readUTF());
+ } catch (URISyntaxException e) {
+ throw new IOException("Incorrect format URI");
+ }
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeUTF(format(true));
+ }
}
--
1.6.0.2

Loading

0 comments on commit 0f56dae

Please sign in to comment.