package org.jenkinsci.plugins.p4.browsers; import hudson.Extension; import hudson.Util; import hudson.model.Descriptor; import hudson.scm.RepositoryBrowser; import hudson.util.FormValidation; import org.jenkinsci.plugins.p4.changes.P4AffectedFile; import org.jenkinsci.plugins.p4.changes.P4ChangeEntry; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; public class OpenGrokBrowser extends P4Browser { private static final long serialVersionUID = 1L; /** * The URL of the OpenGrok server, e.g. * <tt>http://opengrok.libreoffice.org/</tt> */ /** * The Perforce depot path for the 'project', e.g. * <tt>//depot/core/main</tt> */ public final String depotPath; /** * The name of the 'project' in OpenGrok, e.g. <tt>core</tt> */ public final String projectName; @DataBoundConstructor public OpenGrokBrowser(String url, String depotPath, String projectName) throws MalformedURLException { super(url); this.depotPath = depotPath; this.projectName = projectName; } @Override public URL getDiffLink(P4AffectedFile file, String change) throws Exception { String path = getRelativeFilename(file); int rev = parseRevision(file); if(rev <= 1) { return null; } String r1 = "r1=" + URLEncoder.encode(path + "#" + (rev - 1), "UTF-8"); String r2 = "r2=" + URLEncoder.encode(path + "#" + rev, "UTF-8"); return new URL(getUrl(), "source/diff/" + projectName + "/build.properties?" + r2 + "&" + r1 + getRelativeFilename(file)); } @Override public URL getFileLink(P4AffectedFile file) throws Exception { return new URL(getUrl(), "source/xref/" + projectName + "/" + getRelativeFilename(file)); } @Override public URL getJobLink(String job) throws Exception { // TODO Auto-generated method stub return null; } private String getRelativeFilename(P4AffectedFile file) { String path = file.getPath(); if (path.startsWith(depotPath)) { path = path.substring(depotPath.length()); } return trimHeadSlash(path); } @Override public URL getChangeSetLink(P4ChangeEntry changeSet) throws IOException { // TODO Auto-generated method stub return null; } @Extension public static class DescriptorImpl extends Descriptor<RepositoryBrowser<?>> { @Override public String getDisplayName() { return "OpenGrok"; } public FormValidation doCheck(@QueryParameter final String value) { String url = Util.fixEmpty(value); if (url == null) { return FormValidation.ok(); } if (!url.startsWith("http://") && !url.startsWith("https://")) { return FormValidation .errorWithMarkup("The URL should contain <tt>http://</tt> or <tt>https://</tt>"); } return FormValidation.ok(); } } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 21990 | Paul Allen |
Reporting Graph changes. Update Browser and Jelly code to use String and not URL for url in Data Binding to Jelly. Use P4AffectedFile object for XML storage and not IFileSpec to allow Graph use. |
||
#1 | 21940 | Paul Allen | Branching using p4-jenkins | ||
//guest/perforce_software/p4jenkins/main/src/main/java/org/jenkinsci/plugins/p4/browsers/OpenGrokBrowser.java | |||||
#2 | 16409 | Paul Allen |
Use Fix records for Job information. 'p4 fixes' is lighter and still provides enough useful data. Includes jelly fix and extra job data in changelog.xml. |
||
#1 | 10600 | Paul Allen |
OpenGrok Browser (untested) Without an OpenGrok server/test environment I have had to base this on the job details. The diff @change is not possible as the previous change is not known, instead I have used #rev and #rev-1. JENKINS-19568 |