package org.jenkinsci.plugins.github.status.sources;
import com.cloudbees.jenkins.GitHubRepositoryName;
import com.google.common.annotations.VisibleForTesting;
import hudson.Extension;
import hudson.model.Descriptor;
import hudson.model.Run;
import hudson.model.TaskListener;
import org.jenkinsci.plugins.github.extension.status.GitHubReposSource;
import org.jenkinsci.plugins.github.util.misc.NullSafeFunction;
import org.kohsuke.github.GHRepository;
import org.kohsuke.stapler.DataBoundConstructor;
import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import static org.jenkinsci.plugins.github.util.FluentIterableWrapper.from;
public class ManuallyEnteredRepositorySource extends GitHubReposSource {
private String url;
@DataBoundConstructor
public ManuallyEnteredRepositorySource(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
@VisibleForTesting
GitHubRepositoryName createName(String url) {
return GitHubRepositoryName.create(url);
}
@Override
public List<GHRepository> repos(@Nonnull Run<?, ?> run, @Nonnull final TaskListener listener) {
List<String> urls = Collections.singletonList(url);
return from(urls).transformAndConcat(new NullSafeFunction<String, Iterable<GHRepository>>() {
@Override
protected Iterable<GHRepository> applyNullSafe(@Nonnull String url) {
GitHubRepositoryName name = createName(url);
if (name != null) {
return name.resolve();
} else {
listener.getLogger().printf("Unable to match %s with a GitHub repository.%n", url);
return Collections.emptyList();
}
}
}).toList();
}
@Extension
public static class ManuallyEnteredRepositorySourceDescriptor extends Descriptor<GitHubReposSource> {
@Override
public String getDisplayName() {
return "Manually entered repository";
}
}
}