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

Unified Diff: utils/pub/command_uploader.dart

Issue 11569046: Add a pub command for managing uploaders for packages. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 8 years 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 | « utils/pub/command_lish.dart ('k') | utils/pub/hosted_source.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/pub/command_uploader.dart
diff --git a/utils/pub/command_uploader.dart b/utils/pub/command_uploader.dart
new file mode 100644
index 0000000000000000000000000000000000000000..199671b2bbcfdbf3f804c141d56d82e425d9d838
--- /dev/null
+++ b/utils/pub/command_uploader.dart
@@ -0,0 +1,82 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library command_uploader;
+
+import 'dart:io';
+import 'dart:uri';
+
+import '../../pkg/args/lib/args.dart';
+import 'entrypoint.dart';
+import 'exit_codes.dart' as exit_codes;
+import 'http.dart';
+import 'io.dart';
+import 'log.dart' as log;
+import 'oauth2.dart' as oauth2;
+import 'path.dart' as path;
+import 'pub.dart';
+
+/// Handles the `uploader` pub command.
+class UploaderCommand extends PubCommand {
+ final description = "Manage uploaders for a package on pub.dartlang.org.";
+ final usage = "pub uploader [options] {add/remove} <email>";
+ final requiresEntrypoint = false;
+
+ ArgParser get commandParser {
+ var parser = new ArgParser();
+ // TODO(nweiz): Use HostedSource.defaultUrl as the default value once we use
+ // dart:io for HTTPS requests.
+ parser.addOption('server', defaultsTo: 'https://pub.dartlang.org',
+ help: 'The package server on which the package is hosted');
+ parser.addOption('package', help: 'The package whose uploaders will be '
+ 'modified\n'
+ '(defaults to the current package)');
+ return parser;
+ }
+
+ /// The URL of the package hosting server.
+ Uri get server => new Uri.fromString(commandOptions['server']);
+
+ Future onRun() {
+ if (commandOptions.rest.isEmpty) {
+ log.error('No uploader command given.');
+ this.printUsage();
+ exit(exit_codes.USAGE);
+ }
+
+ var command = commandOptions.rest.removeAt(0);
+ if (!['add', 'remove'].contains(command)) {
+ log.error('Unknown uploader command "$command".');
+ this.printUsage();
+ exit(exit_codes.USAGE);
+ } else if (commandOptions.rest.isEmpty) {
+ log.error('No uploader given for "pub uploader $command".');
+ this.printUsage();
+ exit(exit_codes.USAGE);
+ }
+
+ return new Future.immediate(null).chain((_) {
+ var package = commandOptions['package'];
+ if (package != null) return new Future.immediate(package);
+ return Entrypoint.load(path.current, cache)
+ .transform((entrypoint) => entrypoint.root.name);
+ }).chain((package) {
+ var uploader = commandOptions.rest[0];
+ return oauth2.withClient(cache, (client) {
+ if (command == 'add') {
+ var url = server.resolve("/packages/${encodeUriComponent(package)}"
+ "/uploaders.json");
+ return client.post(url, fields: {"email": uploader});
+ } else { // command == 'remove'
+ var url = server.resolve("/packages/${encodeUriComponent(package)}"
+ "/uploaders/${encodeUriComponent(uploader)}.json");
+ return client.delete(url);
+ }
+ });
+ }).transform(handleJsonSuccess).transformException((e) {
+ if (e is! PubHttpException) throw e;
+ handleJsonError(e.response);
+ });
+ }
+}
« no previous file with comments | « utils/pub/command_lish.dart ('k') | utils/pub/hosted_source.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698