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

Side by Side Diff: pkg/pubserver/lib/repository.dart

Issue 917793002: Use pub_server package (Closed) Base URL: git@github.com:dart-lang/pub-dartlang-dart.git@master
Patch Set: Created 5 years, 10 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 unified diff | Download patch
« no previous file with comments | « pkg/pub_server/test/shelf_pubserver_test.dart ('k') | pkg/pubserver/lib/shelf_pubserver.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library pubserver.repository;
6
7 import 'dart:async';
8
9 import 'package:pub_semver/pub_semver.dart';
10
11 /// Represents information about a specific version of a pub package.
12 class PackageVersion {
13 /// The name of the package.
14 final String packageName;
15
16 /// The version string of the package.
17 final String versionString;
18
19 /// The pubspec yaml file of the package
20 final String pubspecYaml;
21
22 Version _cached;
23
24 /// The version of the package as a [Version] object.
25 Version get version {
26 if (_cached != null) return _cached;
27 _cached = new Version.parse(versionString);
28 return _cached;
29 }
30
31 PackageVersion(this.packageName, this.versionString, this.pubspecYaml);
32
33 int get hashCode =>
34 packageName.hashCode ^ versionString.hashCode ^ pubspecYaml.hashCode;
35
36 bool operator==(other) {
37 return other is PackageVersion &&
38 other.packageName == packageName &&
39 other.versionString == versionString &&
40 other.pubspecYaml == pubspecYaml;
41 }
42
43 String toString() => 'PackageVersion: $packageName/$versionString';
44 }
45
46
47 /// Information obtained when starting an asynchronous upload.
48 class AsyncUploadInfo {
49 /// The endpoint where the uploaded data should be posted.
50 ///
51 /// The upload is a POST to [uri] with the headers [fields] in the HTTP
52 /// request. The body of the POST request must be a valid tar.gz file.
53 final Uri uri;
54
55 /// The fields the uploader should add to the multipart upload.
56 final Map<String, String> fields;
57
58 AsyncUploadInfo(this.uri, this.fields);
59 }
60
61 /// Exception for unauthorized access attempts.
62 ///
63 /// Uploading a new package from an unauthorized user will result in an
64 /// [UnauthorizedAccess] exception.
65 class UnauthorizedAccess implements Exception {
66 final String message;
67
68 UnauthorizedAccess(this.message);
69
70 String toString() => 'UnauthorizedAccess: $message';
71 }
72
73 /// Represents a pub repository.
74 abstract class PackageRepository {
75 /// Returns the known versions of [package].
76 Stream<PackageVersion> versions(String package);
77
78 /// Whether the [version] of [package] exists.
79 Future<PackageVersion> lookupVersion(String package, String version);
80
81
82 /// Whether this package repository supports uploading packages.
83 bool get supportsUpload => false;
84
85 /// Uploads a new pub package.
86 ///
87 /// [data] must be a stream of a valid .tar.gz file.
88 Future upload(Stream<List<int>> data)
89 => new Future.error(new UnsupportedError('No upload support.'));
90
91 /// Whether this package repository supports asynchronous uploads.
92 bool get supportsAsyncUpload => false;
93
94 /// Starts a new upload.
95 ///
96 /// The given [baseRedirectUrl] instructs the uploading client to make a GET
97 /// request to this location once the upload is complete. It might contain
98 /// additional query parameters and must be supplied to `finishAsyncUpload`.
99 ///
100 /// The returned [AsyncUploadInfo] specifies where the tar.gz file should be
101 /// posted to and what headers should be supplied.
102 Future<AsyncUploadInfo> startAsyncUpload(Uri redirectUrl)
103 => new Future.error(new UnsupportedError('No async upload support.'));
104
105 /// Finishes the upload of a package.
106 Future finishAsyncUpload(Uri uri)
107 => new Future.error(new UnsupportedError('No async upload support.'));
108
109
110 /// Downloads a pub package.
111 Future<Stream> download(String package, String version);
112
113 /// Whether this package repository supports download URLs.
114 bool get supportsDownloadUrl => false;
115
116 /// A permanent download URL to a package (if supported).
117 Future<Uri> downloadUrl(String package, String version)
118 => new Future.error(new UnsupportedError('No download link support.'));
119 }
OLDNEW
« no previous file with comments | « pkg/pub_server/test/shelf_pubserver_test.dart ('k') | pkg/pubserver/lib/shelf_pubserver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698