Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1664)

Unified Diff: app/lib/handlers.dart

Issue 2074933004: Add support for showing latest dev/stable versions (Closed) Base URL: git@github.com:dart-lang/pub-dartlang-dart.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | app/lib/package_memcache.dart » ('j') | app/views/pkg/show.mustache » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: app/lib/handlers.dart
diff --git a/app/lib/handlers.dart b/app/lib/handlers.dart
index a5ab000223a8d776a1c3a64d1c2d958916d8e0bc..0792a5c669ee803878108d611206ad55938357d1 100644
--- a/app/lib/handlers.dart
+++ b/app/lib/handlers.dart
@@ -228,10 +228,16 @@ packageHandler(shelf.Request request) {
var package = Uri.decodeComponent(path.substring(0, slash));
if (path.substring(slash).startsWith('/versions')) {
path = path.substring(slash + '/versions'.length);
- if (path.startsWith('/') && path.endsWith('.yaml')) {
- path = path.substring(1, path.length - '.yaml'.length);
- String version = Uri.decodeComponent(path);
- return packageVersionHandlerYaml(request, package, version);
+ if (path.startsWith('/')) {
+ if (path.endsWith('.yaml')) {
+ path = path.substring(1, path.length - '.yaml'.length);
+ String version = Uri.decodeComponent(path);
+ return packageVersionHandlerYaml(request, package, version);
+ } else {
+ path = path.substring(1);
+ String version = Uri.decodeComponent(path);
+ return packageVersionHandlerHtml(request, package, version);
+ }
} else {
return packageVersionsHandler(request, package);
}
@@ -258,9 +264,31 @@ packageShowHandlerJson(shelf.Request request, String packageName) async {
/// Handles requests for /packages/<package> - HTML
packageShowHandlerHtml(shelf.Request request, String packageName) async {
+ return packageVersionHandlerHtml(request, packageName, null);
+}
+
+/// Handles requests for /packages/<package>/versions
+packageVersionsHandler(shelf.Request request, String packageName) async {
+ var versions = await backend.versionsOfPackage(packageName);
+ if (versions.isEmpty) return _notFoundHandler(request);
+
+ _sortVersionsDesc(versions);
+
+ var versionDownloadUrls = await Future.wait(
+ versions.map((PackageVersion version) {
+ return backend.downloadUrl(packageName, version.version);
+ }).toList());
+
+ return _htmlResponse(templateService.renderPkgVersionsPage(
+ packageName, versions, versionDownloadUrls));
+}
+
+/// Handles requests for /packages/<package>/versions/<version>
+packageVersionHandlerHtml(request, String packageName, String versionName) async {
Søren Gjesse 2016/06/17 07:03:37 Long line.
kustermann 2016/06/28 09:53:31 Done.
String cachedPage;
if (backend.uiPackageCache != null) {
- cachedPage = await backend.uiPackageCache.getUIPackagePage(packageName);
+ cachedPage = await backend.uiPackageCache.getUIPackagePage(
+ packageName, versionName);
}
if (cachedPage == null) {
@@ -268,45 +296,46 @@ packageShowHandlerHtml(shelf.Request request, String packageName) async {
if (package == null) return _notFoundHandler(request);
var versions = await backend.versionsOfPackage(packageName);
- _sortVersionsDesc(versions);
-
- var latestVersion = versions.where(
- (version) => version.key == package.latestVersionKey).first;
+ _sortVersionsDesc(versions, decreasing: true, pubSorting: true);
+ var latestStable = versions[0];
var first10Versions = versions.take(10).toList();
+ _sortVersionsDesc(versions, decreasing: true, pubSorting: false);
+ var latestDev = versions[0];
+
+ var selectedVersion;
+ if (versionName != null) {
+ for (var v in versions) {
+ if (v.version == versionName) selectedVersion = v;
+ }
+ // TODO: cache error?
+ if (selectedVersion == null) {
+ return _notFoundHandler(request);
+ }
+ } else {
+ if (selectedVersion == null) {
+ selectedVersion = latestStable;
+ }
+ }
+
var versionDownloadUrls = await Future.wait(
first10Versions.map((PackageVersion version) {
return backend.downloadUrl(packageName, version.version);
}).toList());
cachedPage = templateService.renderPkgShowPage(
- package, first10Versions, versionDownloadUrls, latestVersion,
- versions.length);
+ package, first10Versions, versionDownloadUrls, selectedVersion,
+ latestStable, latestDev, versions.length);
if (backend.uiPackageCache != null) {
- await backend.uiPackageCache.setUIPackagePage(packageName, cachedPage);
+ await backend.uiPackageCache.setUIPackagePage(
+ packageName, versionName, cachedPage);
}
}
return _htmlResponse(cachedPage);
}
-/// Handles requests for /packages/<package>/versions
-packageVersionsHandler(shelf.Request request, String packageName) async {
- var versions = await backend.versionsOfPackage(packageName);
- if (versions.isEmpty) return _notFoundHandler(request);
-
- _sortVersionsDesc(versions);
-
- var versionDownloadUrls = await Future.wait(
- versions.map((PackageVersion version) {
- return backend.downloadUrl(packageName, version.version);
- }).toList());
-
- return _htmlResponse(templateService.renderPkgVersionsPage(
- packageName, versions, versionDownloadUrls));
-}
-
/// Handles requests for /packages/<package>/versions/<version>.yaml
packageVersionHandlerYaml(request, String package, String version) async {
var packageVersion = await backend.lookupPackageVersion(package, version);
@@ -439,12 +468,21 @@ shelf.Response _redirectResponse(url) {
/// Sorts [versions] according to the semantic versioning specification.
Søren Gjesse 2016/06/17 07:03:37 Please add a comment on the difference between pub
kustermann 2016/06/28 09:53:31 Done.
-void _sortVersionsDesc(List<PackageVersion> versions, {bool decreasing: true}) {
+void _sortVersionsDesc(List<PackageVersion> versions,
+ {bool decreasing: true, bool pubSorting: true}) {
versions.sort((PackageVersion a, PackageVersion b) {
- if (decreasing) {
- return semver.Version.prioritize(b.semanticVersion, a.semanticVersion);
+ if (pubSorting) {
+ if (decreasing) {
+ return semver.Version.prioritize(b.semanticVersion, a.semanticVersion);
+ } else {
+ return semver.Version.prioritize(a.semanticVersion, b.semanticVersion);
+ }
} else {
- return semver.Version.prioritize(a.semanticVersion, b.semanticVersion);
+ if (decreasing) {
+ return b.semanticVersion.compareTo(a.semanticVersion);
+ } else {
+ return a.semanticVersion.compareTo(b.semanticVersion);
+ }
}
});
}
« no previous file with comments | « no previous file | app/lib/package_memcache.dart » ('j') | app/views/pkg/show.mustache » ('J')

Powered by Google App Engine
This is Rietveld 408576698