Skip to content

Commit e35fb41

Browse files
committed
Modernize to Jenkins 2.479 and Jakarta EE 9
* Adapter methods are added for old overrides. * Switch to JUnit 5 for tests
1 parent 9fa1b09 commit e35fb41

12 files changed

+164
-151
lines changed

pom.xml

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
<parent>
55
<groupId>org.jenkins-ci.plugins</groupId>
66
<artifactId>plugin</artifactId>
7-
<version>4.86</version>
8-
<relativePath/>
7+
<version>5.3</version>
98
</parent>
109

1110
<artifactId>git-server</artifactId>
@@ -17,7 +16,8 @@
1716

1817
<properties>
1918
<changelist>999999-SNAPSHOT</changelist>
20-
<jenkins.version>2.440.3</jenkins.version>
19+
<jenkins.baseline>2.479</jenkins.baseline>
20+
<jenkins.version>${jenkins.baseline}.1</jenkins.version>
2121
<gitHubRepo>jenkinsci/${project.artifactId}-plugin</gitHubRepo>
2222
</properties>
2323

@@ -40,8 +40,8 @@
4040
<dependencies>
4141
<dependency>
4242
<groupId>io.jenkins.tools.bom</groupId>
43-
<artifactId>bom-2.440.x</artifactId>
44-
<version>3234.v5ca_5154341ef</version>
43+
<artifactId>bom-${jenkins.baseline}.x</artifactId>
44+
<version>3696.vb_b_4e2d1a_0542</version>
4545
<scope>import</scope>
4646
<type>pom</type>
4747
</dependency>

src/main/java/org/jenkinsci/plugins/gitserver/CSRFExclusionImpl.java

+15-15
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@
33
import hudson.Extension;
44
import hudson.security.csrf.CrumbExclusion;
55

6-
import javax.servlet.FilterChain;
7-
import javax.servlet.ReadListener;
8-
import javax.servlet.ServletException;
9-
import javax.servlet.ServletInputStream;
10-
import javax.servlet.http.HttpServletRequest;
11-
import javax.servlet.http.HttpServletRequestWrapper;
12-
import javax.servlet.http.HttpServletResponse;
6+
import jakarta.servlet.FilterChain;
7+
import jakarta.servlet.ReadListener;
8+
import jakarta.servlet.ServletException;
9+
import jakarta.servlet.ServletInputStream;
10+
import jakarta.servlet.http.HttpServletRequest;
11+
import jakarta.servlet.http.HttpServletRequestWrapper;
12+
import jakarta.servlet.http.HttpServletResponse;
1313
import java.io.IOException;
1414
import java.util.Collections;
1515
import java.util.Enumeration;
1616
import java.util.Map;
17-
import java.util.Vector;
1817

1918
/**
2019
* CSRF exclusion for git-upload-pack.
@@ -24,9 +23,10 @@
2423
* because of the dynamic nature of the URL structure, this doesn't guarantee
2524
* that we have no leak.
2625
*
26+
* <p>
2727
* So to further protect Jenkins, we pass through a fake {@link HttpServletRequest}
2828
* that masks the values of the submission.
29-
*
29+
*
3030
* <p>
3131
* If the fake request is routed to {@link HttpGitRepository}, which is
3232
* the only legitimate destination of the request, we'll unwrap this fake request
@@ -61,13 +61,13 @@ public String getParameter(String name) {
6161
}
6262

6363
@Override
64-
public Map getParameterMap() {
64+
public Map<String, String[]> getParameterMap() {
6565
return Collections.emptyMap();
6666
}
6767

6868
@Override
69-
public Enumeration getParameterNames() {
70-
return new Vector().elements();
69+
public Enumeration<String> getParameterNames() {
70+
return Collections.emptyEnumeration();
7171
}
7272

7373
@Override
@@ -81,7 +81,7 @@ public String getMethod() {
8181
}
8282

8383
@Override
84-
public ServletInputStream getInputStream() throws IOException {
84+
public ServletInputStream getInputStream() {
8585
return new ServletInputStream() {
8686
@Override
8787
public boolean isFinished() {
@@ -94,7 +94,7 @@ public boolean isReady() {
9494
}
9595

9696
@Override
97-
public int read() throws IOException {
97+
public int read() {
9898
return -1;
9999
}
100100

@@ -106,7 +106,7 @@ public void setReadListener(ReadListener readListener) {
106106
}
107107
};
108108
w.setAttribute(ORIGINAL_REQUEST,request);
109-
109+
110110
chain.doFilter(w,response);
111111
return true;
112112
}

src/main/java/org/jenkinsci/plugins/gitserver/ChannelTransport.java

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.jenkinsci.plugins.gitserver;
22

33
import hudson.FilePath;
4-
import hudson.FilePath.FileCallable;
54
import hudson.remoting.Pipe;
65
import hudson.remoting.VirtualChannel;
76
import jenkins.MasterToSlaveFileCallable;
@@ -47,7 +46,7 @@ public ChannelTransport(Repository local, FilePath remoteRepository) throws URIS
4746
}
4847

4948
@Override
50-
public FetchConnection openFetch() throws NotSupportedException, TransportException {
49+
public FetchConnection openFetch() throws TransportException {
5150
final Pipe l2r = Pipe.createLocalToRemote();
5251
final Pipe r2l = Pipe.createRemoteToLocal();
5352

@@ -56,6 +55,7 @@ public FetchConnection openFetch() throws NotSupportedException, TransportExcept
5655
} catch (IOException e) {
5756
throw new TransportException("Failed to open a fetch connection",e);
5857
} catch (InterruptedException e) {
58+
Thread.currentThread().interrupt();
5959
throw new TransportException("Failed to open a fetch connection",e);
6060
}
6161

@@ -66,7 +66,7 @@ public FetchConnection openFetch() throws NotSupportedException, TransportExcept
6666
}
6767

6868
@Override
69-
public PushConnection openPush() throws NotSupportedException, TransportException {
69+
public PushConnection openPush() throws TransportException {
7070
final Pipe l2r = Pipe.createLocalToRemote();
7171
final Pipe r2l = Pipe.createRemoteToLocal();
7272

@@ -99,15 +99,13 @@ public GitFetchTask(Pipe l2r, Pipe r2l) {
9999
}
100100

101101
public Void invoke(File f, VirtualChannel channel) throws IOException, InterruptedException {
102-
Repository repo = new FileRepositoryBuilder().setWorkTree(f).build();
103-
try {
102+
try (Repository repo = new FileRepositoryBuilder().setWorkTree(f).build()) {
104103
final UploadPack rp = new UploadPack(repo);
105104
rp.upload(new BufferedInputStream(l2r.getIn()), new BufferedOutputStream(r2l.getOut()), null);
106105
return null;
107106
} finally {
108107
IOUtils.closeQuietly(l2r.getIn());
109108
IOUtils.closeQuietly(r2l.getOut());
110-
repo.close();
111109
}
112110
}
113111
}
@@ -122,15 +120,13 @@ public GitPushTask(Pipe l2r, Pipe r2l) {
122120
}
123121

124122
public Void invoke(File f, VirtualChannel channel) throws IOException, InterruptedException {
125-
Repository repo = new FileRepositoryBuilder().setWorkTree(f).build();
126-
try {
123+
try (Repository repo = new FileRepositoryBuilder().setWorkTree(f).build()) {
127124
final ReceivePack rp = new ReceivePack(repo);
128125
rp.receive(new BufferedInputStream(l2r.getIn()), new BufferedOutputStream(r2l.getOut()), null);
129126
return null;
130127
} finally {
131128
IOUtils.closeQuietly(l2r.getIn());
132129
IOUtils.closeQuietly(r2l.getOut());
133-
repo.close();
134130
}
135131
}
136132
}

src/main/java/org/jenkinsci/plugins/gitserver/FileBackedHttpGitRepository.java

+14-17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.jenkinsci.plugins.gitserver;
22

3+
import jakarta.servlet.http.HttpServletRequest;
34
import jenkins.model.Jenkins;
4-
import org.acegisecurity.Authentication;
55
import org.eclipse.jgit.api.AddCommand;
66
import org.eclipse.jgit.api.CommitCommand;
77
import org.eclipse.jgit.api.Git;
@@ -11,19 +11,16 @@
1111
import org.eclipse.jgit.lib.PersonIdent;
1212
import org.eclipse.jgit.lib.Repository;
1313
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
14-
import org.eclipse.jgit.transport.PostReceiveHook;
15-
import org.eclipse.jgit.transport.ReceiveCommand;
1614
import org.eclipse.jgit.transport.ReceivePack;
1715
import org.eclipse.jgit.transport.UploadPack;
1816
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
1917
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
18+
import org.springframework.security.core.Authentication;
2019

21-
import javax.servlet.http.HttpServletRequest;
2220
import java.io.File;
2321
import java.io.IOException;
2422
import java.io.PrintWriter;
2523
import java.io.StringWriter;
26-
import java.util.Collection;
2724
import java.util.logging.Level;
2825
import java.util.logging.Logger;
2926

@@ -63,6 +60,7 @@ public Repository openRepository() throws IOException {
6360
/**
6461
* Called when there's no .git directory to create one.
6562
*
63+
* <p>
6664
* This implementation also imports whatever currently in there into the repository.
6765
*/
6866
protected void createInitialRepository(Repository r) throws IOException {
@@ -80,14 +78,15 @@ protected void createInitialRepository(Repository r) throws IOException {
8078
co.setMessage("Initial import of the existing contents");
8179
co.call();
8280
} catch (GitAPIException e) {
83-
LOGGER.log(Level.WARNING, "Initial import of "+workspace+" into Git repository failed",e);
81+
LOGGER.log(Level.WARNING, e, () -> "Initial import of "+workspace+" into Git repository failed");
8482
}
8583
}
8684

8785
/**
8886
* This default implementation allows read access to anyone
8987
* who can access the HTTP URL this repository is bound to.
9088
*
89+
* <p>
9190
* For example, if this object is used as a project action,
9291
* and the project isn't readable to Alice, then Alice won't be
9392
* able to pull from this repository (think of a POSIX file system
@@ -103,7 +102,7 @@ public UploadPack createUploadPack(HttpServletRequest context, Repository db) th
103102
*/
104103
@Override
105104
public ReceivePack createReceivePack(HttpServletRequest context, Repository db) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
106-
Authentication a = Jenkins.getAuthentication();
105+
Authentication a = Jenkins.getAuthentication2();
107106

108107
ReceivePack rp = createReceivePack(db);
109108

@@ -118,15 +117,13 @@ public ReceivePack createReceivePack(Repository db) {
118117
ReceivePack rp = new ReceivePack(db);
119118

120119
// update userContent after the push
121-
rp.setPostReceiveHook(new PostReceiveHook() {
122-
public void onPostReceive(ReceivePack rp, Collection<ReceiveCommand> commands) {
123-
try {
124-
updateWorkspace(rp.getRepository());
125-
} catch (Exception e) {
126-
StringWriter sw = new StringWriter();
127-
e.printStackTrace(new PrintWriter(sw));
128-
rp.sendMessage("Failed to update workspace: "+sw);
129-
}
120+
rp.setPostReceiveHook((rp1, commands) -> {
121+
try {
122+
updateWorkspace(rp1.getRepository());
123+
} catch (Exception e) {
124+
StringWriter sw = new StringWriter();
125+
e.printStackTrace(new PrintWriter(sw));
126+
rp1.sendMessage("Failed to update workspace: "+sw);
130127
}
131128
});
132129
return rp;
@@ -136,7 +133,7 @@ public void onPostReceive(ReceivePack rp, Collection<ReceiveCommand> commands) {
136133
* Called when new ref is pushed to update the {@linkplain #workspace local workspace}.
137134
* The default implementation does "git reset --hard main"
138135
*/
139-
protected void updateWorkspace(Repository repo) throws IOException, GitAPIException {
136+
protected void updateWorkspace(Repository repo) throws GitAPIException {
140137
ResetCommand cmd = new Git(repo).reset();
141138
cmd.setMode(ResetType.HARD);
142139
cmd.setRef("master");

0 commit comments

Comments
 (0)