Skip to content

Commit

Permalink
expand repository browser URL
Browse files Browse the repository at this point in the history
  • Loading branch information
ndeloof committed Feb 17, 2014
1 parent eec487f commit 7abfafc
Show file tree
Hide file tree
Showing 24 changed files with 170 additions and 244 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>1.480</version>
<version>1.509</version>
</parent>

<licenses>
Expand Down
11 changes: 0 additions & 11 deletions src/main/java/hudson/plugins/git/GitSCM.java
Expand Up @@ -1193,17 +1193,6 @@ public static PreBuildMergeOptions createMergeOptions(UserMergeOptions mergeOpti
return mergeOptions;
}

public static GitWeb createGitWeb(String url) {
if (!isBlank(url)) {
try {
return new GitWeb(url);
} catch (MalformedURLException e) {
throw new GitException("Error creating GitWeb", e);
}
}
return null;
}

public FormValidation doGitRemoteNameCheck(StaplerRequest req)
throws IOException, ServletException {
String mergeRemoteName = req.getParameter("value");
Expand Down
15 changes: 4 additions & 11 deletions src/main/java/hudson/plugins/git/browser/BitbucketWeb.java
Expand Up @@ -20,26 +20,18 @@
public class BitbucketWeb extends GitRepositoryBrowser {

private static final long serialVersionUID = 1L;
private final URL url;

@DataBoundConstructor
public BitbucketWeb(String url) throws MalformedURLException {
this.url = normalizeToEndWithSlash(new URL(url));
}

public URL getUrl() {
return url;
public BitbucketWeb(String url) {
super(url);
}

@Override
public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
URL url = getUrl();
return new URL(url, url.getPath() + "changeset/" + changeSet.getId());
}

private QueryBuilder param() {
return new QueryBuilder(url.getQuery());
}

/**
* Creates a link to the file diff.
* http://[BitbucketWeb URL]/changeset/[commitid]
Expand Down Expand Up @@ -75,6 +67,7 @@ private URL getDiffLinkRegardlessOfEditType(GitChangeSet.Path path) throws IOExc
@Override
public URL getFileLink(GitChangeSet.Path path) throws IOException {
final String pathAsString = path.getPath();
URL url = getUrl();
return new URL(url, url.getPath() + "history/" + pathAsString);
}

Expand Down
23 changes: 10 additions & 13 deletions src/main/java/hudson/plugins/git/browser/CGit.java
Expand Up @@ -21,18 +21,13 @@
public class CGit extends GitRepositoryBrowser {

private static final long serialVersionUID = 1L;
private final URL url;

@DataBoundConstructor
public CGit(String url) throws MalformedURLException {
this.url = normalizeToEndWithSlash(new URL(url));
public CGit(String url) {
super(url);
}

public URL getUrl() {
return url;
}

private QueryBuilder param() {
private QueryBuilder param(URL url) {
return new QueryBuilder(url.getQuery());
}

Expand All @@ -46,7 +41,8 @@ private QueryBuilder param() {
*/
@Override
public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
return new URL(url, url.getPath() + "commit/" + param().add("id=" + changeSet.getId()).toString());
URL url = getUrl();
return new URL(url, url.getPath() + "commit/" + param(url).add("id=" + changeSet.getId()).toString());
}

/**
Expand All @@ -60,7 +56,8 @@ public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
@Override
public URL getDiffLink(Path path) throws IOException {
GitChangeSet changeSet = path.getChangeSet();
return new URL(url, url.getPath() + "diff/" + path.getPath() + param().add("id=" + changeSet.getId()).toString());
URL url = getUrl();
return new URL(url, url.getPath() + "diff/" + path.getPath() + param(url).add("id=" + changeSet.getId()).toString());
}

/**
Expand All @@ -74,11 +71,11 @@ public URL getDiffLink(Path path) throws IOException {
@Override
public URL getFileLink(Path path) throws IOException {
GitChangeSet changeSet = path.getChangeSet();

URL url = getUrl();
if (path.getEditType() == EditType.DELETE) {
return new URL(url, url.getPath() + "tree/" + path.getPath() + param().add("id=" + changeSet.getParentCommit()).toString());
return new URL(url, url.getPath() + "tree/" + path.getPath() + param(url).add("id=" + changeSet.getParentCommit()).toString());
} else {
return new URL(url, url.getPath() + "tree/" + path.getPath() + param().add("id=" + changeSet.getId()).toString());
return new URL(url, url.getPath() + "tree/" + path.getPath() + param(url).add("id=" + changeSet.getId()).toString());
}
}

Expand Down
Expand Up @@ -24,21 +24,9 @@ public class FisheyeGitRepositoryBrowser extends GitRepositoryBrowser {

private static final long serialVersionUID = 2881872624557203410L;

/**
* The URL of the FishEye repository.
*
* This is normally like <tt>http://fisheye5.cenqua.com/browse/glassfish/</tt>
* Normalized to have '/' at the tail.
*/
public final URL url;

@DataBoundConstructor
public FisheyeGitRepositoryBrowser(URL url) throws MalformedURLException {
this.url = normalizeToEndWithSlash(url);
}

public URL getUrl() {
return url;
public FisheyeGitRepositoryBrowser(String url) {
super(url);
}

@Override
Expand All @@ -47,12 +35,12 @@ public URL getDiffLink(Path path) throws IOException {
return null; // no diff if this is not an edit change
String r1 = path.getChangeSet().getParentCommit();
String r2 = path.getChangeSet().getId();
return new URL(url, getPath(path) + String.format("?r1=%s&r2=%s", r1, r2));
return new URL(getUrl(), getPath(path) + String.format("?r1=%s&r2=%s", r1, r2));
}

@Override
public URL getFileLink(Path path) throws IOException {
return new URL(url, getPath(path));
return new URL(getUrl(), getPath(path));
}

private String getPath(Path path) {
Expand All @@ -62,8 +50,8 @@ private String getPath(Path path) {
/**
* Pick up "FOOBAR" from "http://site/browse/FOOBAR/"
*/
private String getProjectName() {
String p = url.getPath();
private String getProjectName() throws IOException {
String p = getUrl().getPath();
if (p.endsWith("/"))
p = p.substring(0, p.length() - 1);

Expand All @@ -73,7 +61,7 @@ private String getProjectName() {

@Override
public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
return new URL(url, "../../changelog/" + getProjectName() + "?cs=" + changeSet.getId());
return new URL(getUrl(), "../../changelog/" + getProjectName() + "?cs=" + changeSet.getId());
}

@Extension
Expand Down
Expand Up @@ -23,17 +23,18 @@
public class GitBlitRepositoryBrowser extends GitRepositoryBrowser {

private static final long serialVersionUID = 1L;
private final URL url;

private final String projectName;

@DataBoundConstructor
public GitBlitRepositoryBrowser(String url, String projectName) throws MalformedURLException {
this.url = normalizeToEndWithSlash(new URL(url));
public GitBlitRepositoryBrowser(String url, String projectName) {
super(url);
this.projectName = projectName;
}

@Override
public URL getDiffLink(Path path) throws IOException {
URL url = getUrl();
return new URL(url,
String.format(url.getPath() + "blobdiff?r=%s&h=%s&hb=%s", encodeString(projectName), path.getChangeSet().getId(),
path.getChangeSet().getParentCommit()));
Expand All @@ -44,20 +45,18 @@ public URL getFileLink(Path path) throws IOException {
if (path.getEditType().equals(EditType.DELETE)) {
return null;
}
URL url = getUrl();
return new URL(url,
String.format(url.getPath() + "blob?r=%s&h=%s&f=%s", encodeString(projectName), path.getChangeSet().getId(),
encodeString(path.getPath())));
}

@Override
public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
URL url = getUrl();
return new URL(url, String.format(url.getPath() + "commit?r=%s&h=%s", encodeString(projectName), changeSet.getId()));
}

public URL getUrl() {
return url;
}

public String getProjectName() {
return projectName;
}
Expand Down
16 changes: 6 additions & 10 deletions src/main/java/hudson/plugins/git/browser/GitLab.java
Expand Up @@ -20,17 +20,13 @@
public class GitLab extends GitRepositoryBrowser {

private static final long serialVersionUID = 1L;
private final URL url;

private final double version;

@DataBoundConstructor
public GitLab(String url, String version) throws MalformedURLException {
public GitLab(String url, String version) {
super(url);
this.version = Double.valueOf(version);
this.url = normalizeToEndWithSlash(new URL(url));
}

public URL getUrl() {
return url;
}

public double getVersion() {
Expand All @@ -42,15 +38,14 @@ public double getVersion() {
*
* https://[GitLab URL]/commits/a9182a07750c9a0dfd89a8461adf72ef5ef0885b
*
* @param path
* @return diff link
* @throws IOException
*/
@Override
public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
String commitPrefix;

return new URL(url, calculatePrefix() + changeSet.getId().toString());
return new URL(getUrl(), calculatePrefix() + changeSet.getId().toString());
}

/**
Expand All @@ -65,7 +60,7 @@ public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
@Override
public URL getDiffLink(Path path) throws IOException {
final GitChangeSet changeSet = path.getChangeSet();
return new URL(url, calculatePrefix() + changeSet.getId().toString() + "#" + path.getPath());
return new URL(getUrl(), calculatePrefix() + changeSet.getId().toString() + "#" + path.getPath());
}

/**
Expand All @@ -87,6 +82,7 @@ public URL getFileLink(Path path) throws IOException {
} else {
spec = path.getChangeSet().getId() + "/tree/" + path.getPath();
}
URL url = getUrl();
return new URL(url, url.getPath() + spec);
}
}
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/hudson/plugins/git/browser/GitRepositoryBrowser.java
@@ -1,12 +1,48 @@
package hudson.plugins.git.browser;

import hudson.EnvVars;
import hudson.model.Job;
import hudson.model.TaskListener;
import hudson.plugins.git.GitChangeSet;
import hudson.scm.RepositoryBrowser;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;

import java.io.IOException;
import java.net.URL;

public abstract class GitRepositoryBrowser extends RepositoryBrowser<GitChangeSet> {

private final String url;

@Deprecated
protected GitRepositoryBrowser() {
this(null);
}

protected GitRepositoryBrowser(String url) {
this.url = url;
}

public final URL getUrl() throws IOException {
String u = url;
StaplerRequest req = Stapler.getCurrentRequest();
if (req != null) {
Job job = req.findAncestorObject(Job.class);
if (job != null) {
EnvVars env = null;
try {
env = job.getEnvironment(null, TaskListener.NULL);
} catch (InterruptedException e) {
throw new IOException("Failed to retrieve job environment", e);
}
u = env.expand(url);
}
}

return normalizeToEndWithSlash(new URL(u));
}

/**
* Determines the link to the diff between the version
* in the specified revision of {@link GitChangeSet.Path} to its previous version.
Expand Down
21 changes: 10 additions & 11 deletions src/main/java/hudson/plugins/git/browser/GitWeb.java
Expand Up @@ -21,23 +21,20 @@
public class GitWeb extends GitRepositoryBrowser {

private static final long serialVersionUID = 1L;
private final URL url;

@DataBoundConstructor
public GitWeb(String url) throws MalformedURLException {
this.url = new URL(url);
}

public URL getUrl() {
return url;
public GitWeb(String url) {
super(url);
}

@Override
public URL getChangeSetLink(GitChangeSet changeSet) throws IOException {
return new URL(url, url.getPath()+param().add("a=commit").add("h=" + changeSet.getId()).toString());
URL url = getUrl();

return new URL(url, url.getPath()+param(url).add("a=commit").add("h=" + changeSet.getId()).toString());
}

private QueryBuilder param() {
private QueryBuilder param(URL url) {
return new QueryBuilder(url.getQuery());
}

Expand All @@ -56,7 +53,8 @@ public URL getDiffLink(Path path) throws IOException {
return null;
}
GitChangeSet changeSet = path.getChangeSet();
String spec = param().add("a=blobdiff").add("f=" + path.getPath()).add("fp=" + path.getPath())
URL url = getUrl();
String spec = param(url).add("a=blobdiff").add("f=" + path.getPath()).add("fp=" + path.getPath())
.add("h=" + path.getSrc()).add("hp=" + path.getDst())
.add("hb=" + changeSet.getId()).add("hpb=" + changeSet.getParentCommit()).toString();
return new URL(url, url.getPath()+spec);
Expand All @@ -71,8 +69,9 @@ public URL getDiffLink(Path path) throws IOException {
*/
@Override
public URL getFileLink(Path path) throws IOException {
URL url = getUrl();
String h = (path.getDst() != null) ? path.getDst() : path.getSrc();
String spec = param().add("a=blob").add("f=" + path.getPath())
String spec = param(url).add("a=blob").add("f=" + path.getPath())
.add("h=" + h).add("hb=" + path.getChangeSet().getId()).toString();
return new URL(url, url.getPath()+spec);
}
Expand Down

0 comments on commit 7abfafc

Please sign in to comment.