Skip to content

Commit

Permalink
Merge pull request #20 from MadsNielsen/JENKINS-26484
Browse files Browse the repository at this point in the history
Implemented JENKINS-26484
  • Loading branch information
MadsNielsen committed Feb 16, 2015
2 parents dead363 + a99d265 commit 6a093cc
Show file tree
Hide file tree
Showing 53 changed files with 916 additions and 299 deletions.
8 changes: 4 additions & 4 deletions pom.xml
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>1.534</version>
<version>1.554.3</version>
</parent>

<properties>
Expand All @@ -12,7 +12,7 @@
</properties>

<artifactId>clearcase-ucm-plugin</artifactId>
<version>1.5.6-SNAPSHOT</version>
<version>1.6.0-SNAPSHOT</version>
<name>ClearCase UCM Plugin!</name>
<description>Integrates Jenkins to ClearCase UCM</description>
<url>https://wiki.jenkins-ci.org/display/JENKINS/ClearCase+UCM+Plugin</url>
Expand Down Expand Up @@ -430,14 +430,14 @@
<dependency>
<groupId>net.praqma</groupId>
<artifactId>cool</artifactId>
<version>0.6.36</version>
<version>0.6.38</version>
<type>jar</type>
</dependency>

<dependency>
<groupId>net.praqma</groupId>
<artifactId>cool</artifactId>
<version>0.6.36</version>
<version>0.6.38</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Expand Down
1 change: 0 additions & 1 deletion src/main/java/net/praqma/hudson/Config.java
Expand Up @@ -19,7 +19,6 @@ private Config() { }

public static List<String> getLevels() {
List<String> levels = Project.getPromotionLevels();
levels.add( "ANY" );
return levels;
}

Expand Down
48 changes: 10 additions & 38 deletions src/main/java/net/praqma/hudson/Util.java
Expand Up @@ -8,11 +8,9 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import net.praqma.clearcase.Cool;
import net.praqma.clearcase.PVob;
import net.praqma.clearcase.exceptions.ClearCaseException;
import net.praqma.clearcase.exceptions.ViewException;
Expand All @@ -21,15 +19,13 @@
import net.praqma.clearcase.ucm.entities.Project;
import net.praqma.clearcase.ucm.entities.Stream;
import net.praqma.clearcase.ucm.entities.Version;
import net.praqma.clearcase.ucm.utils.ReadOnlyVersionFilter;
import net.praqma.clearcase.ucm.utils.VersionList;
import net.praqma.clearcase.ucm.view.SnapshotView;
import net.praqma.clearcase.ucm.view.UCMView;
import net.praqma.clearcase.ucm.view.SnapshotView.Components;
import net.praqma.clearcase.ucm.view.SnapshotView.LoadRules2;
import net.praqma.clearcase.ucm.view.UpdateView;
import net.praqma.hudson.exception.ScmException;
import net.praqma.hudson.remoting.GetLatestForActivities;
import net.praqma.hudson.remoting.CreateChangeSetRemote;
import org.apache.commons.lang.SystemUtils;

public abstract class Util {
Expand Down Expand Up @@ -61,42 +57,18 @@ public Stream getDeveloperStream( String streamname, PVob pvob, Stream buildInte

return devstream;
}

public static String createChangelog(AbstractBuild<?, ?> build, List<Activity> activities, Baseline bl, boolean trimmed, File viewRoot, List<String> readonly, boolean ignoreReadOnly) throws IOException, InterruptedException {
return Util.createChangelog(build, activities, bl, trimmed, viewRoot, readonly, ignoreReadOnly, true);
}

public static String createChangelog(AbstractBuild<?, ?> build, List<Activity> activities, Baseline bl, boolean trimmed, File viewRoot, List<String> readonly, boolean ignoreReadOnly ) throws IOException, InterruptedException {
logger.fine( String.format("Trim changeset: %s", trimmed));
ChangeSetGenerator csg = new ChangeSetGenerator().createHeader( bl.getShortname() );

if( trimmed ) {
logger.fine("Creating trimmed change set");
VersionList vl = new VersionList().addActivities( activities ).setBranchName( "^.*" + Cool.qfs + bl.getStream().getShortname() + ".*$" );

if(ignoreReadOnly) {
vl = vl.addFilter(new ReadOnlyVersionFilter(viewRoot, readonly)).apply();
}

Map<Activity, List<Version>> changeSet = build.getWorkspace().act(new GetLatestForActivities(vl));
int now = 0;

for(List<Version> vlist : changeSet.values()) {
now+=vlist.size();
}

for( Activity activity : changeSet.keySet() ) {
csg.addAcitivity( activity.getShortname(), activity.getHeadline(), activity.getUser(), changeSet.get( activity ) );
}
public static String createChangelog(AbstractBuild<?, ?> build, List<Activity> activities, Baseline bl, boolean trimmed, File viewRoot, List<String> readonly, boolean ignoreReadOnly, boolean useSlaves ) throws IOException, InterruptedException {
if(useSlaves) {
return build.getWorkspace().act(new CreateChangeSetRemote(activities, bl, trimmed, viewRoot, readonly, ignoreReadOnly));
} else {
logger.fine("Creating non-trimmed changeset");
for( Activity activity : activities ) {
VersionList versions = new VersionList( activity.changeset.versions ).getLatest();
if(ignoreReadOnly) {
versions = versions.addFilter(new ReadOnlyVersionFilter(viewRoot, readonly)).apply();
}

csg.addAcitivity( activity.getShortname(), activity.getHeadline(), activity.getUser(), versions );
}
CreateChangeSetRemote set = new CreateChangeSetRemote(activities, bl, trimmed, viewRoot, readonly, ignoreReadOnly);
return set.invoke(null, null);
}

return csg.close().get();
}

public static class ChangeSetGenerator {
Expand Down
8 changes: 1 addition & 7 deletions src/main/java/net/praqma/hudson/notifier/CCUCMNotifier.java
Expand Up @@ -228,13 +228,7 @@ private void processBuild( AbstractBuild<?, ?> build, Launcher launcher, BuildLi
if( pstate.doRecommend() ) {
out.println( String.format( "%s Cannot recommend Baseline when not created", logShortPrefix ) );
}

//JENKINS-18107
if( pstate.getPolling().isPollingSelf() && pstate.doCreateBaseline() ) {
out.println("You cannot create a baseline in poll self mode.");
logger.warning("You cannot create a baseline in poll self mode.");
}


/* Set unstable? */
logger.warning( "Failing build because baseline could not be created" );
build.setResult( Result.FAILURE );
Expand Down
@@ -0,0 +1,80 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package net.praqma.hudson.remoting;

import hudson.FilePath;
import hudson.remoting.VirtualChannel;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import net.praqma.clearcase.Cool;
import net.praqma.clearcase.exceptions.UnableToLoadEntityException;
import net.praqma.clearcase.ucm.entities.Activity;
import net.praqma.clearcase.ucm.entities.Baseline;
import net.praqma.clearcase.ucm.entities.Version;
import net.praqma.clearcase.ucm.utils.ReadOnlyVersionFilter;
import net.praqma.clearcase.ucm.utils.VersionList;
import net.praqma.hudson.Util;

/**
*
* @author Mads
*/
public class CreateChangeSetRemote implements FilePath.FileCallable<String>{

private static final Logger logger = Logger.getLogger(CreateChangeSetRemote.class.getName());

public final List<Activity> activities;
public final Baseline bl;
public final boolean trimmed;
public final File viewRoot;
public final List<String> readOnly;
public final boolean ignoreReadOnly;

public CreateChangeSetRemote(List<Activity> activities, Baseline bl, boolean trimmed, File viewRoot, List<String> readonly, boolean ignoreReadOnly) {
this.activities = activities;
this.bl = bl;
this.trimmed = trimmed;
this.viewRoot = viewRoot;
this.readOnly = readonly;
this.ignoreReadOnly = ignoreReadOnly;
}

@Override
public String invoke(File file, VirtualChannel vc) throws IOException, InterruptedException {
logger.fine( String.format("Trim changeset: %s", trimmed));
Util.ChangeSetGenerator csg = new Util.ChangeSetGenerator().createHeader( bl.getShortname() );

if( trimmed ) {
logger.fine("Creating trimmed change set");
VersionList vl = new VersionList().addActivities( activities ).setBranchName( "^.*" + Cool.qfs + bl.getStream().getShortname() + ".*$" );

if(ignoreReadOnly) {
vl = vl.addFilter(new ReadOnlyVersionFilter(viewRoot, readOnly)).apply();
}

Map<Activity, List<Version>> acts = vl.getLatestForActivities();

for( Activity activity : acts.keySet() ) {
csg.addAcitivity( activity.getShortname(), activity.getHeadline(), activity.getUser(), acts.get( activity ) );
}
} else {
logger.fine("Creating non-trimmed changeset");
for( Activity activity : activities ) {
VersionList versions = new VersionList( activity.changeset.versions, activities ).getLatest();
if(ignoreReadOnly) {
versions = versions.addFilter(new ReadOnlyVersionFilter(viewRoot, readOnly)).apply();
}
csg.addAcitivity( activity.getShortname(), activity.getHeadline(), activity.getUser(), versions );
}
}

return csg.close().get();
}

}
21 changes: 21 additions & 0 deletions src/main/java/net/praqma/hudson/remoting/GetRelatedStreams.java
Expand Up @@ -10,20 +10,39 @@
import java.util.List;

import net.praqma.clearcase.ucm.entities.Stream;
import net.praqma.hudson.scm.Polling;
import net.praqma.hudson.scm.Polling.PollingType;

public class GetRelatedStreams implements FileCallable<List<Stream>> {

private static final long serialVersionUID = -8984877325832486334L;
private final Stream stream;

@Deprecated
private final boolean pollingChildStreams;

private final TaskListener listener;
private final boolean multisitePolling;
private final Polling polling;
private final String hyperLinkName;

@Deprecated
public GetRelatedStreams( TaskListener listener, Stream stream, boolean pollingChildStreams, boolean multisitePolling ) {
this.stream = stream;
this.pollingChildStreams = pollingChildStreams;
this.listener = listener;
this.multisitePolling = multisitePolling;
this.polling = null;
this.hyperLinkName = "AlternateDeliverTarget";
}

public GetRelatedStreams( TaskListener listener, Stream stream, Polling polling, boolean multisitePolling, String hyperLinkName ) {
this.stream = stream;
this.pollingChildStreams = polling.isPollingChilds();
this.listener = listener;
this.multisitePolling = multisitePolling;
this.polling = polling;
this.hyperLinkName = hyperLinkName;
}

@Override
Expand All @@ -35,6 +54,8 @@ public List<Stream> invoke( File f, VirtualChannel channel ) throws IOException,
try {
if( pollingChildStreams ) {
streams = stream.getChildStreams( multisitePolling );
} else if(polling.getType().equals(PollingType.siblingshlink)) {
streams = stream.getDeliveringStreamsUsingHlink(hyperLinkName);
} else {
streams = stream.getSiblingStreams();
}
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/net/praqma/hudson/remoting/RemoteUtil.java
Expand Up @@ -15,6 +15,7 @@
import hudson.model.BuildListener;
import hudson.model.TaskListener;
import java.util.logging.Logger;
import net.praqma.hudson.scm.Polling;

public abstract class RemoteUtil {

Expand Down Expand Up @@ -54,11 +55,11 @@ public static void endView( FilePath workspace, String viewtag ) throws IOExcept

}

public static List<Stream> getRelatedStreams( FilePath workspace, TaskListener listener, Stream stream, boolean pollingChildStreams, boolean slavePolling, boolean multisitePolling ) throws IOException, InterruptedException {
public static List<Stream> getRelatedStreams( FilePath workspace, TaskListener listener, Stream stream, Polling polling, boolean slavePolling, boolean multisitePolling, String hLinkFeedFrom ) throws IOException, InterruptedException {
if( slavePolling ) {
return workspace.act( new GetRelatedStreams( listener, stream, pollingChildStreams, multisitePolling ) );
return workspace.act( new GetRelatedStreams( listener, stream, polling, multisitePolling, hLinkFeedFrom) );
} else {
GetRelatedStreams t = new GetRelatedStreams( listener, stream, pollingChildStreams, multisitePolling );
GetRelatedStreams t = new GetRelatedStreams( listener, stream, polling, multisitePolling, hLinkFeedFrom );
return t.invoke( null, null );
}
}
Expand Down

0 comments on commit 6a093cc

Please sign in to comment.