From 7d263c850deec702c70766742597dcf0e3c134c8 Mon Sep 17 00:00:00 2001 From: Brian Stinson Date: Mar 23 2018 06:08:07 +0000 Subject: there's less red now --- diff --git a/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMNavigator.java index 409fe1e..776bd2f 100644 --- a/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMNavigator.java +++ b/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMNavigator.java @@ -1,15 +1,24 @@ package org.jenkinsci.plugins.pagure; import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.ExtensionList; import hudson.Util; +import hudson.console.HyperlinkNote; +import hudson.model.Descriptor; import hudson.util.ListBoxModel; +import jenkins.model.Jenkins; +import jenkins.plugins.git.GitSCMBuilder; +import jenkins.plugins.git.GitSCMSource; +import jenkins.plugins.git.GitSCMSourceContext; import jenkins.plugins.git.traits.GitBrowserSCMSourceTrait; import jenkins.scm.api.SCMNavigator; import jenkins.scm.api.SCMNavigatorDescriptor; +import jenkins.scm.api.SCMSource; import jenkins.scm.api.SCMSourceObserver; -import jenkins.scm.api.trait.SCMTrait; -import jenkins.scm.api.trait.SCMTraitDescriptor; +import jenkins.scm.api.trait.*; import jenkins.scm.impl.form.NamedArrayList; +import jenkins.scm.impl.trait.Discovery; +import jenkins.scm.impl.trait.Selection; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; @@ -72,31 +81,21 @@ public class PagureSCMNavigator extends SCMNavigator { Commit-Id: d8c79bce8e42c0823479039a78ae7aef238c1b73 */ @Override - public void visitSources(@NonNull SCMSourceObserver observer) throws IOException, InterruptedException { + public void visitSources(@NonNull final SCMSourceObserver observer) throws IOException, InterruptedException { /* Create a Pagure Connection and get a list of all the repos that the user has access to by organization */ try (PagureSCMNavigatorRequest request = new PagureSCMNavigatorContext() .withTraits(traits) .newRequest(this, observer); - GiteaConnection c = gitea(observer.getContext()).open()) { + PagureConnection c = (observer.getContext()).open()) { giteaOwner = c.fetchUser(repoOwner); if (StringUtils.isBlank(giteaOwner.getEmail())) { giteaOwner = c.fetchOrganization(repoOwner); } - List repositories = c.fetchRepositories(giteaOwner); + List repositories = c.fetchRepositories(giteaOwner); int count = 0; observer.getListener().getLogger().format("%n Checking repositories...%n"); - Set seen = new HashSet<>(); - for (GiteaRepository r : repositories) { + for (PagureRepository r : repositories) { // TODO remove this hack for Gitea listing the repositories multiple times - if (seen.contains(r.getId())) { - continue; - } else { - seen.add(r.getId()); - } - if (!StringUtils.equalsIgnoreCase(r.getOwner().getUsername(), repoOwner)) { - // this is the user repos which includes all organizations that they are a member of - continue; - } count++; if (r.isEmpty()) { observer.getListener().getLogger().format("%n Ignoring empty repository %s%n", @@ -109,11 +108,9 @@ public class PagureSCMNavigator extends SCMNavigator { @NonNull @Override public SCMSource create(@NonNull String projectName) throws IOException, InterruptedException { - return new GiteaSCMSourceBuilder( + return new PagureSCMSourceBuilder( getId() + "::" + projectName, serverUrl, - credentialsId, - repoOwner, projectName ) .withTraits(traits) @@ -170,12 +167,12 @@ public class PagureSCMNavigator extends SCMNavigator { */ @SuppressWarnings("unused") // jelly public List>> getTraitsDescriptorLists() { - PagureSCMSource.DescriptorImpl sourceDescriptor = - Jenkins.getActiveInstance().getDescriptorByType(GiteaSCMSource.DescriptorImpl.class); + GitSCMSource.DescriptorImpl sourceDescriptor = + Jenkins.getInstance().getDescriptorByType(GitSCMSource.DescriptorImpl.class); List> all = new ArrayList<>(); - all.addAll(SCMNavigatorTrait._for(this, GiteaSCMNavigatorContext.class, GiteaSCMSourceBuilder.class)); - all.addAll(SCMSourceTrait._for(sourceDescriptor, GiteaSCMSourceContext.class, null)); - all.addAll(SCMSourceTrait._for(sourceDescriptor, null, GiteaSCMBuilder.class)); + all.addAll(SCMNavigatorTrait._for(this, PagureSCMNavigatorContext.class, PagureSCMSourceBuilder.class)); + all.addAll(SCMSourceTrait._for(sourceDescriptor, GitSCMSourceContext.class, null)); + all.addAll(SCMSourceTrait._for(sourceDescriptor, null, GitSCMBuilder.class)); Set> dedup = new HashSet<>(); for (Iterator> iterator = all.iterator(); iterator.hasNext(); ) { SCMTraitDescriptor d = iterator.next(); @@ -188,7 +185,7 @@ public class PagureSCMNavigator extends SCMNavigator { } } List>> result = new ArrayList<>(); - NamedArrayList.select(all, Messages.GiteaSCMNavigator_traitSection_repositories(), + NamedArrayList.select(all, "Repositories"), new NamedArrayList.Predicate>() { @Override public boolean test(SCMTraitDescriptor scmTraitDescriptor) { @@ -196,17 +193,17 @@ public class PagureSCMNavigator extends SCMNavigator { } }, true, result); - NamedArrayList.select(all, Messages.GiteaSCMNavigator_traitSection_withinRepo(), NamedArrayList + NamedArrayList.select(all, "Within Repos", NamedArrayList .anyOf(NamedArrayList.withAnnotation(Discovery.class), NamedArrayList.withAnnotation(Selection.class)), true, result); - NamedArrayList.select(all, Messages.GiteaSCMNavigator_traitSection_additional(), null, true, result); + NamedArrayList.select(all, "Additional Behaviors"), null, true, result); return result; } public List>> getTraitsDefaults() { - GiteaSCMSource.DescriptorImpl descriptor = - ExtensionList.lookup(Descriptor.class).get(GiteaSCMSource.DescriptorImpl.class); + GitSCMSource.DescriptorImpl descriptor = + ExtensionList.lookup(Descriptor.class).get(GitSCMSource.DescriptorImpl.class); if (descriptor == null) { throw new AssertionError(); } diff --git a/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMSourceBuilder.java b/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMSourceBuilder.java index 342e391..5d7db47 100644 --- a/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMSourceBuilder.java +++ b/src/main/java/org/jenkinsci/plugins/pagure/PagureSCMSourceBuilder.java @@ -1,20 +1,48 @@ package org.jenkinsci.plugins.pagure; import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Util; import jenkins.plugins.git.GitSCMSource; import jenkins.scm.api.trait.SCMSourceBuilder; +import jenkins.scm.api.trait.SCMSourceTrait; + +import java.util.ArrayList; +import java.util.List; public class PagureSCMSourceBuilder extends SCMSourceBuilder { + private final String id; + private final String server; + // TODO: Make this constructor match what is called in PagureSCMNavigator:100 - public PagureSCMSourceBuilder(@NonNull Class clazz, @NonNull String projectName) { - super(clazz, projectName); + public PagureSCMSourceBuilder(String id, String server, @NonNull String projectName) { + super(GitSCMSource.class, projectName); + this.id = id; + this.server = server; + } + + public String getId() { + return id; + } + + public String getServer() { + return server; } @NonNull @Override public GitSCMSource build() { - // Creates the SCM Source for Jenkins to query - return new GitSCMSource(); + GitSCMSource source = new GitSCMSource(getServer() + Util.rawEncode(projectName())+".git"); + source.withId(id); + + List traits = new ArrayList<>(traits()); + try{ + // TODO: Here is where we would add the Pagure browser trait, but it's not added to the Jenkins git plugin yet + } catch (Exception e) { + throw new AssertionError("Unsupported URL"); + } + + source.setTraits(traits); + return source; } }