
hudson.plugins.git.SubmoduleCombinator Maven / Gradle / Ivy
package hudson.plugins.git;
import hudson.FilePath;
import hudson.model.TaskListener;
import hudson.plugins.git.util.GitUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.spearce.jgit.lib.ObjectId;
/**
* A common usecase for git submodules is to have child submodules, and a parent 'configuration' project that ties the
* correct versions together. It is useful to be able to speculatively compile all combinations of submodules, so that
* you can _know_ if a particular combination is no longer compatible.
*
* @author nigelmagnay
*/
public class SubmoduleCombinator
{
IGitAPI git;
File workspace;
TaskListener listener;
long tid = new Date().getTime();
long idx = 1;
Collection submoduleConfig;
public SubmoduleCombinator(IGitAPI git, TaskListener listener, File workspace,
Collection cfg)
{
this.git = git;
this.listener = listener;
this.workspace = workspace;
this.submoduleConfig = cfg;
}
public void createSubmoduleCombinations() throws GitException, IOException
{
GitUtils gitUtils = new GitUtils(listener, git);
Map> moduleBranches = new HashMap>();
for (IndexEntry submodule : gitUtils.getSubmodules("HEAD"))
{
File subdir = new File(workspace, submodule.getFile());
IGitAPI subGit = new GitAPI(git.getGitExe(), new FilePath(subdir), listener, git.getEnvironment());
GitUtils gu = new GitUtils(listener, subGit);
Collection items = gu.filterTipBranches(gu.getAllBranchRevisions());
filterRevisions(submodule.getFile(), items);
moduleBranches.put(submodule, items);
}
// Remove any uninteresting branches
for (IndexEntry entry : moduleBranches.keySet())
{
listener.getLogger().print("Submodule " + entry.getFile() + " branches");
for (Revision br : moduleBranches.get(entry))
{
listener.getLogger().print(" " + br.toString());
}
listener.getLogger().print("\n");
}
// Make all the possible combinations
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy