http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"\r
default-autowire="constructor">\r
\r
+ <import resource="classpath*:META-INF/spring-nuget-common.xml"/>\r
+\r
<bean class="jetbrains.buildServer.nuget.agent.util.impl.CommandlineBuildProcessFactoryImpl"/>\r
\r
<bean class="jetbrains.buildServer.nuget.agent.install.PackagesInstallerRunner"/>\r
\r
package jetbrains.buildServer.nuget.agent.install;\r
\r
-import jetbrains.buildServer.nuget.common.PackageInfo;\r
+import jetbrains.buildServer.nuget.common.PackageDependencies;\r
import org.jetbrains.annotations.NotNull;\r
import org.jetbrains.annotations.Nullable;\r
\r
-import java.util.Collection;\r
-\r
/**\r
* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
* Date: 18.07.11 22:43\r
* @return sorted list of packages that were registered\r
*/\r
@NotNull\r
- public Collection<PackageInfo> getPackages();\r
+ public PackageDependencies getPackages();\r
}\r
\r
package jetbrains.buildServer.nuget.agent.install.impl;\r
\r
+import jetbrains.buildServer.nuget.common.PackageDependencies;\r
import jetbrains.buildServer.nuget.common.PackageInfo;\r
import org.jetbrains.annotations.NotNull;\r
import org.jetbrains.annotations.Nullable;\r
\r
-import java.util.Collection;\r
import java.util.Collections;\r
import java.util.TreeSet;\r
\r
}\r
\r
@NotNull\r
- public Collection<PackageInfo> getPackages() {\r
- return Collections.unmodifiableCollection(myPackages);\r
+ public PackageDependencies getPackages() {\r
+ return new PackageDependencies(\r
+ Collections.<String>emptyList(),\r
+ myPackages);\r
}\r
\r
public void removeAllPackages() {\r
\r
import jetbrains.buildServer.agent.AgentRunningBuild;\r
import jetbrains.buildServer.agent.artifacts.ArtifactsWatcher;\r
-import jetbrains.buildServer.nuget.common.PackageInfo;\r
+import jetbrains.buildServer.nuget.common.PackageDependencies;\r
+import jetbrains.buildServer.nuget.common.PackageDependenciesStore;\r
import jetbrains.buildServer.util.FileUtil;\r
-import jetbrains.buildServer.util.XmlUtil;\r
-import org.jdom.Content;\r
-import org.jdom.Document;\r
-import org.jdom.Element;\r
import org.jetbrains.annotations.NotNull;\r
\r
-import java.io.*;\r
-import java.util.Collection;\r
+import java.io.File;\r
+import java.io.IOException;\r
\r
/**\r
* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
*/\r
public class PackagesInfoUploader {\r
private final ArtifactsWatcher myPublisher;\r
+ private final PackageDependenciesStore myStore;\r
\r
- public PackagesInfoUploader(@NotNull final ArtifactsWatcher publisher) {\r
+ public PackagesInfoUploader(@NotNull final ArtifactsWatcher publisher,\r
+ @NotNull final PackageDependenciesStore store) {\r
myPublisher = publisher;\r
+ myStore = store;\r
}\r
\r
public void uploadDepectedPackages(@NotNull final AgentRunningBuild build,\r
- @NotNull final Collection<PackageInfo> infos) throws IOException {\r
+ @NotNull final PackageDependencies infos) throws IOException {\r
File tmp = FileUtil.createTempDirectory("nuget", "packages", build.getBuildTempDirectory());\r
-\r
- Element root = new Element("packages");\r
- for (PackageInfo info : infos) {\r
- Element pkg = new Element("package");\r
- pkg.setAttribute("id", info.getId());\r
- pkg.setAttribute("version", info.getVersion());\r
- root.addContent((Content)pkg);\r
- }\r
- Document doc = new Document(root);\r
-\r
- final File content = new File(tmp, "nuget-packages.xml");\r
- OutputStream os = new BufferedOutputStream(new FileOutputStream(content));\r
- try {\r
- XmlUtil.saveDocument(doc, os);\r
- } finally {\r
- FileUtil.close(os);\r
- }\r
-\r
+ File content = new File(tmp, "nuget.xml");\r
+ myStore.save(infos, content);\r
myPublisher.addNewArtifactsPath(content.getPath() + " => .teamcity/nuget");\r
}\r
}\r
import jetbrains.buildServer.agent.AgentLifeCycleListener;\r
import jetbrains.buildServer.agent.AgentRunningBuild;\r
import jetbrains.buildServer.agent.BuildFinishedStatus;\r
+import jetbrains.buildServer.nuget.common.PackageDependencies;\r
import jetbrains.buildServer.nuget.common.PackageInfo;\r
import jetbrains.buildServer.util.EventDispatcher;\r
import org.jetbrains.annotations.NotNull;\r
\r
@Override\r
public void beforeBuildFinish(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) {\r
- Collection<PackageInfo> packages = new ArrayList<PackageInfo>(collector.getPackages());\r
+ PackageDependencies packages = collector.getPackages();\r
if (packages.isEmpty()) return;\r
\r
try {\r
<orderEntry type="inheritedJdk" />\r
<orderEntry type="sourceFolder" forTests="false" />\r
<orderEntry type="library" name="idea annotations.jar" level="project" />\r
+ <orderEntry type="library" name="Idea-OpenApi" level="project" />\r
+ <orderEntry type="library" name="Common-Api" level="project" />\r
+ <orderEntry type="library" name="Common-Impl" level="project" />\r
</component>\r
</module>\r
\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--suppress AutowiredDependenciesInspection -->\r
+<beans xmlns="http://www.springframework.org/schema/beans"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://www.springframework.org/schema/beans\r
+ http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"\r
+ default-autowire="constructor">\r
+\r
+ <bean class="jetbrains.buildServer.nuget.common.PackageDependenciesStore"/>\r
+\r
+</beans>\r
--- /dev/null
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.common;\r
+\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.TreeSet;\r
+\r
+/**\r
+ * Represent list of downloaded dependecies of a build\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 19.07.11 11:41\r
+ */\r
+public class PackageDependencies {\r
+ private final Collection<String> mySources;\r
+ private final Collection<PackageInfo> myPackages;\r
+\r
+ public PackageDependencies(@NotNull final Collection<String> sources,\r
+ @NotNull final Collection<PackageInfo> packages) {\r
+ mySources = Collections.unmodifiableCollection(new TreeSet<String>(sources));\r
+ myPackages = Collections.unmodifiableCollection(new TreeSet<PackageInfo>(packages));\r
+ }\r
+\r
+ /**\r
+ * @return NuGet sources configured from web\r
+ */\r
+ @NotNull\r
+ public Collection<String> getSources() {\r
+ return mySources;\r
+ }\r
+\r
+ /**\r
+ *\r
+ * @return sorted list of packages that were used in project\r
+ */\r
+ @NotNull\r
+ public Collection<PackageInfo> getPackages() {\r
+ return myPackages;\r
+ }\r
+\r
+ public boolean isEmpty() {\r
+ return getPackages().isEmpty();\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.common;\r
+\r
+import jetbrains.buildServer.util.FileUtil;\r
+import jetbrains.buildServer.util.XmlUtil;\r
+import jetbrains.buildServer.util.XmlXppAbstractParser;\r
+import org.jdom.Content;\r
+import org.jdom.Document;\r
+import org.jdom.Element;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+import java.io.*;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 19.07.11 11:39\r
+ */\r
+public class PackageDependenciesStore {\r
+ public PackageDependencies load(@NotNull final File file) throws IOException {\r
+ final List<String> sources = new ArrayList<String>();\r
+ final List<PackageInfo> infos = new ArrayList<PackageInfo>();\r
+\r
+ new XmlXppAbstractParser(){\r
+ @Override\r
+ protected List<XmlHandler> getRootHandlers() {\r
+ return Arrays.asList(elementsPath(new Handler() {\r
+ public XmlReturn processElement(@NotNull XmlElementInfo xmlElementInfo) {\r
+ return xmlElementInfo.visitChildren(\r
+ elementsPath(\r
+ new Handler() {\r
+ public XmlReturn processElement(@NotNull XmlElementInfo xmlElementInfo) {\r
+ final String id = xmlElementInfo.getAttribute("id");\r
+ final String version = xmlElementInfo.getAttribute("version");\r
+ if (id != null && version != null) {\r
+ infos.add(new PackageInfo(id, version));\r
+ }\r
+ return xmlElementInfo.noDeep();\r
+ }\r
+ }, "packages", "package"),\r
+ elementsPath(\r
+ new Handler() {\r
+ public XmlReturn processElement(@NotNull XmlElementInfo xmlElementInfo) {\r
+ xmlElementInfo.visitText(new TextHandler() {\r
+ public void setText(@NotNull String s) {\r
+ sources.add(s);\r
+ }\r
+ });\r
+ return null;\r
+ }\r
+ }, "sources", "source")\r
+ );\r
+ }\r
+ }, "nuget-dependencies"));\r
+ }\r
+ }.parse(file);\r
+\r
+ return new PackageDependencies(sources, infos);\r
+ }\r
+\r
+ public void save(@NotNull final PackageDependencies deps,\r
+ @NotNull final File file) throws IOException {\r
+ Element root = new Element("nuget-dependencies");\r
+\r
+ Element pkgs = new Element("packages");\r
+ for (PackageInfo info : deps.getPackages()) {\r
+ Element pkg = new Element("package");\r
+ pkg.setAttribute("id", info.getId());\r
+ pkg.setAttribute("version", info.getVersion());\r
+ pkgs.addContent((Content) pkg);\r
+ }\r
+\r
+ root.addContent((Content)pkgs);\r
+\r
+ Element sources = new Element("sources");\r
+ for (String source : deps.getSources()) {\r
+ Element src = new Element("source");\r
+ src.setText(source);\r
+ }\r
+\r
+ root.addContent((Content)sources);\r
+\r
+ Document doc = new Document(pkgs);\r
+\r
+ OutputStream os = new BufferedOutputStream(new FileOutputStream(file));\r
+ try {\r
+ XmlUtil.saveDocument(doc, os);\r
+ } finally {\r
+ FileUtil.close(os);\r
+ }\r
+ }\r
+}\r
NuGetPackagesCollectorImpl i = new NuGetPackagesCollectorImpl();\r
p.parseNuGetPackages(Paths.getTestDataPath("config/" + testData), i);\r
\r
- if (packages.length != i.getPackages().size()) {\r
+ if (packages.length != i.getPackages().getPackages().size()) {\r
System.out.println(i.getPackages());\r
}\r
\r
- Assert.assertEquals(i.getPackages(), new TreeSet<PackageInfo>(Arrays.asList(packages)));\r
+ Assert.assertEquals(\r
+ new TreeSet<PackageInfo>(i.getPackages().getPackages()),\r
+ new TreeSet<PackageInfo>(Arrays.asList(packages)));\r
}\r
}\r