Skip to content

Commit

Permalink
[JENKINS-73677] Decorate GitClient after adding credentials (jenkinsc…
Browse files Browse the repository at this point in the history
…i#1649)

Co-authored-by: Mark Waite <mark.earl.waite@gmail.com>
  • Loading branch information
Dohbedoh and MarkEWaite committed Sep 18, 2024
1 parent 9ba71f1 commit 843d48b
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/main/java/hudson/plugins/git/GitSCM.java
Original file line number Diff line number Diff line change
Expand Up @@ -912,9 +912,6 @@ private GitClient createClient(TaskListener listener, EnvVars environment, @NonN
Git git = Git.with(listener, environment).in(ws).using(gitExe);

GitClient c = git.getClient();
for (GitSCMExtension ext : extensions) {
c = ext.decorate(this,c);
}

for (UserRemoteConfig uc : getUserRemoteConfigs()) {
String ucCredentialsId = uc.getCredentialsId();
Expand All @@ -938,6 +935,10 @@ private GitClient createClient(TaskListener listener, EnvVars environment, @NonN
}
// TODO add default credentials

for (GitSCMExtension ext : extensions) {
c = ext.decorate(this,c);
}

return c;
}

Expand Down
40 changes: 40 additions & 0 deletions src/test/java/hudson/plugins/git/GitSCMTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.cloudbees.plugins.credentials.CredentialsStore;
import com.cloudbees.plugins.credentials.SystemCredentialsProvider;
import com.cloudbees.plugins.credentials.common.StandardCredentials;
import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
import com.cloudbees.plugins.credentials.domains.Domain;
import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl;
import org.htmlunit.html.HtmlPage;
Expand Down Expand Up @@ -2915,6 +2916,30 @@ public void testCommitMessageIsPrintedToLogs() throws Exception {
r.waitForMessage("Commit message: \"test commit\"", run);
}

@Issue("JENKINS-73677")
@Test
public void testExtensionsDecorateClientAfterSettingCredentials() throws Exception {
assumeTrue("Test class max time " + MAX_SECONDS_FOR_THESE_TESTS + " exceeded", isTimeAvailable());
FreeStyleProject project = setupSimpleProject("master");
StandardCredentials extensionCredentials = createCredential(CredentialsScope.GLOBAL, "github");
store.addCredentials(Domain.global(), extensionCredentials);
// setup global config
List<UserRemoteConfig> remoteConfigs = GitSCM.createRepoList("https://github.com/jenkinsci/git-plugin", null);
project.setScm(new GitSCM(
remoteConfigs,
Collections.singletonList(new BranchSpec("master")),
false,
null,
null,
null,
List.of(new TestSetCredentialsGitSCMExtension((StandardUsernameCredentials) extensionCredentials))));
sampleRepo.init();
sampleRepo.write("file", "v1");
sampleRepo.git("commit", "--all", "--message=test commit");
Run<?, ?> run = r.buildAndAssertSuccess(project);
r.waitForMessage("using GIT_ASKPASS to set credentials " + extensionCredentials.getDescription(), run);
}

private void setupJGit(GitSCM git) {
git.gitTool="jgit";
r.jenkins.getDescriptorByType(GitTool.DescriptorImpl.class).setInstallations(new JGitTool(Collections.emptyList()));
Expand Down Expand Up @@ -2948,4 +2973,19 @@ private boolean isWindows() {
private StandardCredentials createCredential(CredentialsScope scope, String id) {
return new UsernamePasswordCredentialsImpl(scope, id, "desc: " + id, "username", "password");
}

public static class TestSetCredentialsGitSCMExtension extends GitSCMExtension {

private final StandardUsernameCredentials credentials;

public TestSetCredentialsGitSCMExtension(StandardUsernameCredentials credentials) {
this.credentials = credentials;
}

@Override
public GitClient decorate(GitSCM scm, GitClient git) throws GitException {
git.setCredentials(credentials);
return git;
}
}
}

0 comments on commit 843d48b

Please sign in to comment.