| 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);
|
| + });
|
| + }
|
| +}
|
|
|