Skip to content

Commit 1916bf9

Browse files
authored
Merge branch 'master' into feature/JENKINS-56284
2 parents 5baf418 + ead9a34 commit 1916bf9

35 files changed

+1335
-114
lines changed

README.adoc

+408-50
Large diffs are not rendered by default.

pom.xml

+40-16
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>org.jenkins-ci.plugins</groupId>
66
<artifactId>plugin</artifactId>
7-
<version>3.55</version>
7+
<version>3.57</version>
88
<relativePath />
99
</parent>
1010

@@ -20,27 +20,28 @@
2020
<version>${revision}${changelist}</version>
2121
<packaging>hpi</packaging>
2222
<name>Jenkins Git plugin</name>
23-
<description>Integrates Jenkins with GIT SCM</description>
24-
<url>https://github.com/jenkinsci/git-plugin/README.adoc</url>
23+
<description>Integrates Jenkins with Git SCM</description>
24+
<url>https://github.com/jenkinsci/git-plugin/blob/master/README.adoc</url>
2525
<inceptionYear>2007</inceptionYear>
2626

2727
<properties>
28-
<revision>4.1.0</revision>
28+
<revision>4.3.0</revision>
2929
<changelist>-SNAPSHOT</changelist>
3030
<jenkins.version>2.138.4</jenkins.version>
3131
<java.level>8</java.level>
3232
<no-test-jar>false</no-test-jar>
3333
<useBeta>true</useBeta>
34-
<forkCount>1</forkCount>
34+
<forkCount>3</forkCount>
3535
<linkXRef>false</linkXRef>
36+
<configuration-as-code.version>1.35</configuration-as-code.version>
3637
</properties>
3738

3839
<build>
3940
<plugins>
4041
<plugin>
4142
<groupId>org.apache.maven.plugins</groupId>
4243
<artifactId>maven-checkstyle-plugin</artifactId>
43-
<version>3.1.0</version>
44+
<version>3.1.1</version>
4445
<configuration>
4546
<configLocation>google_checks.xml</configLocation>
4647
<failOnViolation>true</failOnViolation>
@@ -97,6 +98,10 @@
9798
<groupId>org.jenkins-ci.plugins</groupId>
9899
<artifactId>scm-api</artifactId>
99100
</dependency>
101+
<dependency>
102+
<groupId>org.jenkins-ci.plugins</groupId>
103+
<artifactId>script-security</artifactId>
104+
</dependency>
100105
<dependency>
101106
<groupId>org.jenkins-ci.plugins.workflow</groupId>
102107
<artifactId>workflow-step-api</artifactId>
@@ -120,11 +125,6 @@
120125
<artifactId>junit</artifactId>
121126
<scope>test</scope>
122127
</dependency>
123-
<dependency>
124-
<groupId>org.jenkins-ci.plugins</groupId>
125-
<artifactId>script-security</artifactId>
126-
<scope>test</scope>
127-
</dependency>
128128
<dependency>
129129
<groupId>org.hamcrest</groupId>
130130
<artifactId>hamcrest-core</artifactId>
@@ -139,7 +139,7 @@
139139
<dependency>
140140
<groupId>nl.jqno.equalsverifier</groupId>
141141
<artifactId>equalsverifier</artifactId>
142-
<version>3.1.11</version>
142+
<version>3.1.12</version>
143143
<scope>test</scope>
144144
</dependency>
145145

@@ -204,11 +204,17 @@
204204
<groupId>org.jenkins-ci.plugins.workflow</groupId>
205205
<artifactId>workflow-cps-global-lib</artifactId>
206206
<scope>test</scope>
207+
<exclusions>
208+
<exclusion>
209+
<groupId>org.apache.commons</groupId>
210+
<artifactId>commons-lang3</artifactId>
211+
</exclusion>
212+
</exclusions>
207213
</dependency>
208214
<dependency>
209215
<groupId>org.xmlunit</groupId>
210216
<artifactId>xmlunit-matchers</artifactId>
211-
<version>2.6.3</version>
217+
<version>2.6.4</version>
212218
<scope>test</scope>
213219
</dependency>
214220
<dependency>
@@ -227,13 +233,20 @@
227233
<dependency>
228234
<groupId>io.jenkins</groupId>
229235
<artifactId>configuration-as-code</artifactId>
236+
<version>${configuration-as-code.version}</version>
230237
<optional>true</optional>
231238
</dependency>
232239
<dependency>
233-
<groupId>io.jenkins</groupId>
234-
<artifactId>configuration-as-code</artifactId>
235-
<classifier>tests</classifier>
240+
<groupId>io.jenkins.configuration-as-code</groupId>
241+
<artifactId>test-harness</artifactId>
242+
<version>${configuration-as-code.version}</version>
236243
<scope>test</scope>
244+
<exclusions>
245+
<exclusion>
246+
<groupId>org.jsoup</groupId>
247+
<artifactId>jsoup</artifactId>
248+
</exclusion>
249+
</exclusions>
237250
</dependency>
238251
<!-- Exclude JTH dependency commons-net - otherwise it is included in hpi file as a transient dependency -->
239252
<dependency>
@@ -247,6 +260,17 @@
247260
</exclusion>
248261
</exclusions>
249262
</dependency>
263+
<dependency>
264+
<groupId>commons-validator</groupId>
265+
<artifactId>commons-validator</artifactId>
266+
<version>1.6</version>
267+
<exclusions>
268+
<exclusion>
269+
<groupId>commons-digester</groupId>
270+
<artifactId>commons-digester</artifactId>
271+
</exclusion>
272+
</exclusions>
273+
</dependency>
250274
</dependencies>
251275

252276
<dependencyManagement>

src/main/java/hudson/plugins/git/BranchSpec.java

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.StringTokenizer;
1616
import java.util.regex.Matcher;
1717
import java.util.regex.Pattern;
18+
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;
1819
import org.kohsuke.stapler.export.Exported;
1920
import org.kohsuke.stapler.export.ExportedBean;
2021

@@ -38,6 +39,7 @@ public class BranchSpec extends AbstractDescribableImpl<BranchSpec> implements S
3839
private String name;
3940

4041
@Exported
42+
@Whitelisted
4143
public String getName() {
4244
return name;
4345
}

src/main/java/hudson/plugins/git/GitSCM.java

+37-8
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import hudson.plugins.git.extensions.GitSCMExtensionDescriptor;
3737
import hudson.plugins.git.extensions.impl.AuthorInChangelog;
3838
import hudson.plugins.git.extensions.impl.BuildChooserSetting;
39+
import hudson.plugins.git.extensions.impl.BuildSingleRevisionOnly;
40+
import hudson.plugins.git.extensions.impl.ChangelogToBranch;
3941
import hudson.plugins.git.extensions.impl.PathRestriction;
4042
import hudson.plugins.git.extensions.impl.LocalBranch;
4143
import hudson.plugins.git.extensions.impl.RelativeTargetDirectory;
@@ -76,6 +78,7 @@
7678
import org.jenkinsci.plugins.gitclient.FetchCommand;
7779
import org.jenkinsci.plugins.gitclient.Git;
7880
import org.jenkinsci.plugins.gitclient.GitClient;
81+
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;
7982
import org.kohsuke.stapler.DataBoundConstructor;
8083
import org.kohsuke.stapler.StaplerRequest;
8184
import org.kohsuke.stapler.export.Exported;
@@ -164,6 +167,7 @@ public class GitSCM extends GitSCMBackwardCompatibility {
164167
@SuppressFBWarnings(value="SE_BAD_FIELD", justification="Known non-serializable field")
165168
private DescribableList<GitSCMExtension,GitSCMExtensionDescriptor> extensions;
166169

170+
@Whitelisted
167171
public Collection<SubmoduleConfig> getSubmoduleCfg() {
168172
return submoduleCfg;
169173
}
@@ -239,6 +243,7 @@ public GitSCM(
239243
*
240244
* @since 2.0
241245
*/
246+
@Whitelisted
242247
public DescribableList<GitSCMExtension, GitSCMExtensionDescriptor> getExtensions() {
243248
return extensions;
244249
}
@@ -350,6 +355,7 @@ public Object readResolve() throws IOException {
350355
}
351356

352357
@Override
358+
@Whitelisted
353359
public GitRepositoryBrowser getBrowser() {
354360
return browser;
355361
}
@@ -432,6 +438,7 @@ public boolean isUseExistingAccountWithSameEmail() {
432438
return (gitDescriptor != null && gitDescriptor.isUseExistingAccountWithSameEmail());
433439
}
434440

441+
@Whitelisted
435442
public BuildChooser getBuildChooser() {
436443
BuildChooser bc;
437444

@@ -521,6 +528,7 @@ public RemoteConfig getRepositoryByName(String repoName) {
521528
}
522529

523530
@Exported
531+
@Whitelisted
524532
public List<UserRemoteConfig> getUserRemoteConfigs() {
525533
if (userRemoteConfigs == null) {
526534
/* Prevent NPE when no remote config defined */
@@ -529,6 +537,7 @@ public List<UserRemoteConfig> getUserRemoteConfigs() {
529537
return Collections.unmodifiableList(userRemoteConfigs);
530538
}
531539

540+
@Whitelisted
532541
public List<RemoteConfig> getRepositories() {
533542
// Handle null-value to ensure backwards-compatibility, ie project configuration missing the <repositories/> XML element
534543
if (remoteRepositories == null) {
@@ -573,6 +582,7 @@ public String deriveLocalBranchName(String remoteBranchName) {
573582
}
574583

575584
@CheckForNull
585+
@Whitelisted
576586
public String getGitTool() {
577587
return gitTool;
578588
}
@@ -1062,17 +1072,24 @@ public EnvVars getEnvironment() {
10621072
if (buildData.getBuildsByBranchName().size() >= 100) {
10631073
log.println("JENKINS-19022: warning: possible memory leak due to Git plugin usage; see: https://wiki.jenkins.io/display/JENKINS/Remove+Git+Plugin+BuildsByBranch+BuildData");
10641074
}
1075+
boolean checkForMultipleRevisions = true;
1076+
BuildSingleRevisionOnly ext = extensions.get(BuildSingleRevisionOnly.class);
1077+
if (ext != null) {
1078+
checkForMultipleRevisions = ext.enableMultipleRevisionDetection();
1079+
}
10651080

10661081
if (candidates.size() > 1) {
10671082
log.println("Multiple candidate revisions");
1068-
Job<?, ?> job = build.getParent();
1069-
if (job instanceof AbstractProject) {
1070-
AbstractProject project = (AbstractProject) job;
1071-
if (!project.isDisabled()) {
1072-
log.println("Scheduling another build to catch up with " + project.getFullDisplayName());
1073-
if (!project.scheduleBuild(0, new SCMTrigger.SCMTriggerCause("This build was triggered by build "
1074-
+ build.getNumber() + " because more than one build candidate was found."))) {
1075-
log.println("WARNING: multiple candidate revisions, but unable to schedule build of " + project.getFullDisplayName());
1083+
if (checkForMultipleRevisions) {
1084+
Job<?, ?> job = build.getParent();
1085+
if (job instanceof AbstractProject) {
1086+
AbstractProject project = (AbstractProject) job;
1087+
if (!project.isDisabled()) {
1088+
log.println("Scheduling another build to catch up with " + project.getFullDisplayName());
1089+
if (!project.scheduleBuild(0, new SCMTrigger.SCMTriggerCause("This build was triggered by build "
1090+
+ build.getNumber() + " because more than one build candidate was found."))) {
1091+
log.println("WARNING: multiple candidate revisions, but unable to schedule build of " + project.getFullDisplayName());
1092+
}
10761093
}
10771094
}
10781095
}
@@ -1363,6 +1380,16 @@ public void buildEnvironment(Run<?, ?> build, java.util.Map<String, String> env)
13631380
}
13641381
}
13651382

1383+
/* Check all repository URLs are not empty */
1384+
/* JENKINS-38608 reports an unhelpful error message when a repository URL is empty */
1385+
/* Throws an IllegalArgumentException because that exception is thrown by env.put() on a null argument */
1386+
int repoCount = 1;
1387+
for (UserRemoteConfig config:userRemoteConfigs) {
1388+
if (config.getUrl() == null) {
1389+
throw new IllegalArgumentException("Git repository URL " + repoCount + " is an empty string in job definition. Checkout requires a valid repository URL");
1390+
}
1391+
repoCount++;
1392+
}
13661393

13671394
if (userRemoteConfigs.size()==1){
13681395
env.put("GIT_URL", userRemoteConfigs.get(0).getUrl());
@@ -1689,11 +1716,13 @@ public void populateEnvironmentVariables(Map<String,String> env) {
16891716

16901717
private static final long serialVersionUID = 1L;
16911718

1719+
@Whitelisted
16921720
public boolean isDoGenerateSubmoduleConfigurations() {
16931721
return this.doGenerateSubmoduleConfigurations;
16941722
}
16951723

16961724
@Exported
1725+
@Whitelisted
16971726
public List<BranchSpec> getBranches() {
16981727
return branches;
16991728
}

src/main/java/hudson/plugins/git/GitSCMBackwardCompatibility.java

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.Set;
1818

1919
import static org.apache.commons.lang.StringUtils.isNotBlank;
20+
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;
2021

2122
/**
2223
* This is a portion of {@link GitSCM} for the stuff that's used to be in {@link GitSCM}
@@ -178,6 +179,7 @@ public abstract class GitSCMBackwardCompatibility extends SCM implements Seriali
178179
private transient BuildChooser buildChooser;
179180

180181

182+
@Whitelisted
181183
abstract DescribableList<GitSCMExtension, GitSCMExtensionDescriptor> getExtensions();
182184

183185
@Override

src/main/java/hudson/plugins/git/SubmoduleConfig.java

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.common.base.Joiner;
44
import org.apache.commons.collections.CollectionUtils;
5+
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;
56
import org.kohsuke.stapler.DataBoundConstructor;
67

78
import java.util.Arrays;
@@ -31,6 +32,7 @@ public SubmoduleConfig(String submoduleName, Collection<String> branches) {
3132
}
3233
}
3334

35+
@Whitelisted
3436
public String getSubmoduleName() {
3537
return submoduleName;
3638
}

src/main/java/hudson/plugins/git/UserMergeOptions.java

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.Locale;
1414
import java.util.Map;
1515
import java.util.Objects;
16+
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted;
1617
import org.jenkinsci.plugins.structs.describable.CustomDescribableModel;
1718
import org.kohsuke.stapler.DataBoundSetter;
1819

@@ -70,6 +71,7 @@ public UserMergeOptions(PreBuildMergeOptions pbm) {
7071
* Repository name, such as 'origin' that designates which repository the branch lives in.
7172
* @return repository name
7273
*/
74+
@Whitelisted
7375
public String getMergeRemote() {
7476
return mergeRemote;
7577
}
@@ -84,6 +86,7 @@ public void setMergeRemote(String mergeRemote) {
8486
* Normally a branch name like 'master'.
8587
* @return branch name from which merge will be performed
8688
*/
89+
@Whitelisted
8790
public String getMergeTarget() {
8891
return mergeTarget;
8992
}

0 commit comments

Comments
 (0)