public void visitSources()

in src/main/java/org/apache/jenkins/gitpubsub/ASFGitSCMNavigator.java [168:214]


    public void visitSources(@NonNull final SCMSourceObserver observer) throws IOException, InterruptedException {
        ASFGitSCMFileSystem.preRequestSleep();
        try (ASFGitSCMNavigatorRequest request = new ASFGitSCMNavigatorContext()
                .withTraits(traits)
                .newRequest(this, observer)) {
            JsonNode repositories = MAPPER.readTree(new URL(server.replaceAll("repos/[^/]+$", "repositories.json")));
            int count = 0;
            String line;
            observer.getListener().getLogger().format("%n  Checking repositories...%n");
            for (JsonNode project : repositories.path("projects")) {
                for (Iterator<String> i = project.path("repositories").fieldNames(); i.hasNext(); ) {
                    final String repo = i.next();
                    count++;
                    observer.getListener().getLogger().format("%n    Checking repository %s%n",
                            HyperlinkNote
                                    .encodeTo(server + "?p=" + URLEncoder.encode(repo, "UTF-8") + ".git;a=summary",
                                            repo));
                    if (request.process(repo, new SCMNavigatorRequest.SourceLambda() {
                        @NonNull
                        @Override
                        public SCMSource create(@NonNull String projectName) throws IOException, InterruptedException {
                            return new ASFGitSCMSourceBuilder(getId() + "::" + projectName,
                                    server, projectName
                            )
                                    .withTraits(traits)
                                    .build();
                        }
                    }, null, new SCMNavigatorRequest.Witness() {
                        @Override
                        public void record(@NonNull String projectName, boolean isMatch) {
                            if (isMatch) {
                                observer.getListener().getLogger().format("      Proposing %s%n", projectName);
                            } else {
                                observer.getListener().getLogger().format("      Ignoring %s%n", projectName);
                            }
                        }
                    })) {
                        observer.getListener().getLogger()
                                .format("%n  %d repositories were processed (query complete)%n",
                                        count);
                        return;
                    }
                }
            }
            observer.getListener().getLogger().format("%n  %d repositories were processed%n", count);
        }
    }