\r
import org.jetbrains.annotations.NotNull;\r
\r
+import java.io.File;\r
import java.io.IOException;\r
import java.util.Collection;\r
\r
@NotNull\r
Collection<FeedPackage> queryPackageVersions(@NotNull String feedUrl,\r
@NotNull String packageId) throws IOException;\r
+\r
+ void downloadPackage(@NotNull FeedPackage pkg,\r
+ @NotNull File destFile) throws IOException;\r
}\r
*/\r
public class FeedConstants {\r
public static final String FEED_URL = "https://go.microsoft.com/fwlink/?LinkID=206669";\r
+ public static final String NUGET_COMMANDLINE = "NuGet.CommandLine";\r
}\r
import jetbrains.buildServer.util.XmlUtil;\r
import org.apache.http.HttpHeaders;\r
import org.apache.http.HttpResponse;\r
+import org.apache.http.HttpStatus;\r
+import org.apache.http.StatusLine;\r
import org.apache.http.client.methods.HttpGet;\r
import org.jdom.Element;\r
import org.jdom.JDOMException;\r
import org.jetbrains.annotations.NotNull;\r
\r
-import java.io.IOException;\r
+import java.io.*;\r
import java.util.Collection;\r
\r
/**\r
\r
@NotNull\r
public Collection<FeedPackage> queryPackageVersions(@NotNull String feedUrl,\r
- @NotNull String packageId) throws IOException {\r
+ @NotNull String packageId) throws IOException {\r
LOG.debug("Connecting to NuGet feed url: " + feedUrl);\r
final Pair<String, HttpResponse> pair = myResolver.resolvePath(feedUrl);\r
feedUrl = pair.first;\r
\r
final HttpGet get = myMethodFactory.createGet(feedUrl + "/Packages()",\r
new Param("$filter", "Id eq '" + packageId + "'")\r
- );\r
+ );\r
get.setHeader(HttpHeaders.ACCEPT_ENCODING, "application/atom+xml");\r
\r
LOG.debug("Query for packages: " + get.getURI());\r
return myParser.readPackages(toDocument(execute));\r
}\r
\r
+ public void downloadPackage(@NotNull FeedPackage pkg, @NotNull File file) throws IOException {\r
+ FileUtil.createParentDirs(file);\r
+ final String url = pkg.getDownloadUrl();\r
+\r
+ final HttpGet get = myMethodFactory.createGet(url);\r
+ final HttpResponse resp = myClient.getClient().execute(get);\r
+ final StatusLine statusLine = resp.getStatusLine();\r
+ if (statusLine.getStatusCode() != HttpStatus.SC_OK) {\r
+ throw new IOException("Failed to download package " + pkg + ". Server returned " + statusLine);\r
+ }\r
+\r
+ OutputStream os = null;\r
+ try {\r
+ os = new BufferedOutputStream(new FileOutputStream(file));\r
+ resp.getEntity().writeTo(os);\r
+ } catch (final IOException e) {\r
+ throw new IOException("Failed to download package " + pkg + ". " + e.getMessage()) {{ initCause(e); }};\r
+ } finally {\r
+ FileUtil.close(os);\r
+ }\r
+ }\r
+\r
private Element toDocument(HttpResponse response) throws IOException {\r
try {\r
return FileUtil.parseDocument(response.getEntity().getContent(), false);\r
import jetbrains.buildServer.nuget.server.feed.reader.FeedPackage;\r
import jetbrains.buildServer.nuget.server.feed.reader.NuGetFeedReader;\r
import jetbrains.buildServer.nuget.server.feed.reader.impl.*;\r
+import jetbrains.buildServer.util.FileUtil;\r
import org.testng.Assert;\r
import org.testng.annotations.AfterMethod;\r
import org.testng.annotations.BeforeMethod;\r
import org.testng.annotations.Test;\r
\r
+import java.io.BufferedInputStream;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
import java.io.IOException;\r
import java.util.Collection;\r
+import java.util.zip.ZipEntry;\r
+import java.util.zip.ZipInputStream;\r
\r
/**\r
* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
System.out.println("feedPackage = " + feedPackage);\r
}\r
}\r
+\r
+ @Test\r
+ public void testDownloadLatest() throws IOException {\r
+ final Collection<FeedPackage> packages = myReader.queryPackageVersions(FeedConstants.FEED_URL, "NuGet.CommandLine");\r
+ FeedPackage latest = null;\r
+ for (FeedPackage aPackage : packages) {\r
+ if (aPackage.isLatestVersion()) {\r
+ latest = aPackage;\r
+ }\r
+ }\r
+ Assert.assertNotNull(latest, "there should be the latest package");\r
+\r
+ final File pkd = createTempFile();\r
+ myReader.downloadPackage(latest, pkd);\r
+\r
+ Assert.assertTrue(pkd.length() > 100);\r
+ boolean hasNuGetExe = false;\r
+ ZipInputStream zip = new ZipInputStream(new BufferedInputStream(new FileInputStream(pkd)));\r
+ try {\r
+ for (ZipEntry ze = zip.getNextEntry(); ze != null; ze = zip.getNextEntry()) {\r
+ String name = ze.getName();\r
+ System.out.println("ze = " + name);\r
+ name = name.toLowerCase();\r
+ hasNuGetExe |= name.endsWith("/NuGet.exe".toLowerCase());\r
+ hasNuGetExe |= name.endsWith("\\NuGet.exe".toLowerCase());\r
+ }\r
+ } finally {\r
+ FileUtil.close(zip);\r
+ }\r
+\r
+ Assert.assertTrue(hasNuGetExe, "package should contain nuget.exe");\r
+ }\r
}\r