Skip to content
Snippets Groups Projects
Commit 917813d6 authored by brinn's avatar brinn
Browse files

fix: create missing parent directory for Sprint tags

SVN: 12662
parent 93a10eca
No related branches found
No related tags found
No related merge requests found
......@@ -214,10 +214,35 @@ public class SVNBranchAndTagTask extends Task
+ branch.getVersion() + ")");
}
}
copyBranchToTag(svn, branch, tag);
}
private static void copyBranchToTag(final ISVNActions svn,
final SVNRepositoryProjectContextAntWrapper branch,
final SVNRepositoryProjectContextAntWrapper tag)
{
final String tagName = tag.getVersion();
final String logMessage = "Create tag '" + tagName + "'";
svn.copy(branch.getRepositoryUrl(), branch.getRevision(), tag.getRepositoryUrl(),
logMessage);
final String tagParent = SVNUtilities.getParent(tag.getRepositoryUrl());
if (svn.isMuccAvailable())
{
final List<String> commandLine = new ArrayList<String>();
if (nodeExists(svn, tag, tagParent, branch.getVersion()) == false)
{
commandLine.addAll(Arrays.asList("mkdir", tagParent));
}
commandLine.addAll(Arrays.asList("cp", branch.getRevision(), branch.getRepositoryUrl(),
tag.getRepositoryUrl()));
svn.mucc(logMessage, commandLine.toArray(new String[commandLine.size()]));
} else
{
if (nodeExists(svn, tag, tagParent, branch.getVersion()) == false)
{
svn.mkdir(tagParent, logMessage);
}
svn.copy(branch.getRepositoryUrl(), branch.getRevision(), tag.getRepositoryUrl(),
logMessage);
}
}
/**
......@@ -329,13 +354,16 @@ public class SVNBranchAndTagTask extends Task
private static boolean nodeExists(final ISVNActions svn,
final SVNRepositoryProjectContextAntWrapper node)
{
final String tagName = node.getVersion();
final String tagUrl = node.getRepositoryUrl();
final String parentUrl = SVNUtilities.getParent(tagUrl);
return nodeExists(svn, node, node.getRepositoryUrl(), node.getVersion());
}
private static boolean nodeExists(final ISVNActions svn,
final SVNRepositoryProjectContextAntWrapper node, String url, String name)
{
final String parentUrl = SVNUtilities.getParent(url);
assert parentUrl != null;
assert tagName.equals(tagUrl.substring(parentUrl.length() + 1));
final Set<String> branchSet = new HashSet<String>(svn.list(parentUrl));
final boolean exists = branchSet.contains(tagName + "/");
final boolean exists = branchSet.contains(name + "/");
return exists;
}
......
......@@ -340,7 +340,11 @@ public class SVNBranchAndTagTaskTest
final String releaseBranchesUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"branches/release"), "/");
final String releaseTagsUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"tags/release"), "/");
listMap.put(releaseBranchesUrl, Collections.singletonList(branchName + "/"));
listMap.put(releaseTagsUrl, Collections.singletonList(branchName + "/"));
final Map<String, String> catMap = new HashMap<String, String>();
final MockSVNRepositoryActions svn = new MockSVNRepositoryActions(listMap, catMap);
final SVNBranchAndTagTask task = new SVNBranchAndTagTask()
......@@ -357,9 +361,11 @@ public class SVNBranchAndTagTaskTest
task.setName(projectName);
task.setReleaseTag(tagName);
task.execute();
final String tagUrlSuper =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"tags/release", branchName), "/");
final String tagUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"tags/release", branchName, tagName), "/");
StringUtils.join(Arrays.asList(tagUrlSuper, tagName), "/");
final String branchUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"branches/release", branchName), "/");
......@@ -384,9 +390,7 @@ public class SVNBranchAndTagTaskTest
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"tags/sprint"), "/");
List<String> folders = new ArrayList<String>();
folders.add("S41/");
folders.add("42/");
folders.add("S43/");
folders.add("S41.x/");
listMap.put(tagUrl, folders);
final String branchUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
......@@ -411,12 +415,15 @@ public class SVNBranchAndTagTaskTest
final String sourceMainUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"branches/sprint", branchName), "/");
final String targetSuperUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"tags/sprint", branchName), "/");
final String targetUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"tags/sprint", branchName, tagName), "/");
StringUtils.join(Arrays.asList(targetSuperUrl, tagName), "/");
final String logMessage = "Create tag '" + tagName + "'";
assertEquals(0, svn.mkdirList.size());
assertEquals(1, svn.mkdirList.size());
assertEquals(new MkdirItem(targetSuperUrl, logMessage), svn.mkdirList.get(0));
final Set<CopyItem> expectedCopySet =
new HashSet<CopyItem>(Arrays.asList(new CopyItem(sourceMainUrl,
......@@ -478,9 +485,11 @@ public class SVNBranchAndTagTaskTest
final String logMessageBranch = "Create branch '" + branchName + "'";
final String logMessageTag = "Create tag '" + tagName + "'";
assertEquals(1, svn.mkdirList.size());
assertEquals(2, svn.mkdirList.size());
assertEquals("http://host/repos/group/testProject/branches/sprint/S42.x", svn.mkdirList
.get(0).path);
assertEquals("http://host/repos/group/testProject/tags/sprint/S42.x", svn.mkdirList
.get(1).path);
final String sourceBuildResourcesUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName,
......@@ -611,7 +620,11 @@ public class SVNBranchAndTagTaskTest
final String releaseBranchesUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"branches/release"), "/");
final String tagsBranchesUrl =
StringUtils.join(Arrays.asList(repositoryRoot, groupName, projectName,
"tags/release"), "/");
listMap.put(releaseBranchesUrl, Collections.<String> emptyList());
listMap.put(tagsBranchesUrl, Collections.singletonList(branchName + "/"));
final Map<String, String> catMap = new HashMap<String, String>();
final MockSVNRepositoryActions svn = new MockSVNRepositoryActions(listMap, catMap);
final SVNBranchAndTagTask task = new SVNBranchAndTagTask()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment