'init' command

This commit is contained in:
thosakwe 2016-09-17 23:56:08 -04:00
parent 034ede4dad
commit 57d95e71c4
7 changed files with 87 additions and 19 deletions

1
.gitignore vendored
View file

@ -74,3 +74,4 @@ doc/api/
pubspec.lock pubspec.lock
/sample_project/lib/src/services/ /sample_project/lib/src/services/
/sample_project/test/services/ /sample_project/test/services/
/sample_project/

View file

@ -0,0 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Init" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application" singleton="true">
<option name="arguments" value="init sample_project" />
<option name="filePath" value="$PROJECT_DIR$/bin/angel.dart" />
<option name="workingDirectory" value="$PROJECT_DIR$" />
<method />
</configuration>
</component>

View file

@ -13,6 +13,7 @@ main(List<String> args) {
runner.addCommand(new DoctorCommand()); runner.addCommand(new DoctorCommand());
runner.addCommand(new ServiceCommand()); runner.addCommand(new ServiceCommand());
runner.addCommand(new InitCommand());
return runner.run(args).then((_) {}).catchError((exc) { return runner.run(args).then((_) {}).catchError((exc) {
stderr.writeln("Oops, something went wrong: $exc"); stderr.writeln("Oops, something went wrong: $exc");

View file

@ -1,4 +1,5 @@
library angel_cli.commands; library angel_cli.commands;
export "doctor.dart"; export "doctor.dart";
export "init.dart";
export "service.dart"; export "service.dart";

View file

@ -0,0 +1,76 @@
import "dart:convert";
import "dart:io";
import "package:args/command_runner.dart";
import "package:console/console.dart";
class InitCommand extends Command {
final TextPen _pen = new TextPen();
@override
String get name => "init";
@override
String get description =>
"Initializes a new Angel project in the current directory.";
InitCommand() {}
@override
run() async {
Directory projectDir = new Directory(
argResults.arguments.isEmpty ? "." : argResults.arguments[0]);
print("Creating new Angel project in ${projectDir.absolute.path}...");
await _cloneRepo(projectDir);_pen.green();
_pen("${Icon.CHECKMARK} Successfully initialized Angel project. Now running pub get...");
_pen();
await _pubGet();
}
_cloneRepo(Directory projectDir) async {
try {
if (await projectDir.exists()) {
var chooser = new Chooser(["Yes", "No"],
message:
"Directory '${projectDir.absolute.path}' exists. Overwrite it? (Yes/No)");
if (await chooser.choose() != "Yes")
throw new Exception("Chose not to overwrite existing directory.");
await projectDir.delete(recursive: true);
}
var git = await Process.start("git", [
"clone",
"--depth",
"1",
"https://github.com/angel-dart/angel",
projectDir.absolute.path
]);
git.stdout.transform(UTF8.decoder).listen(stdout.write);
git.stderr.transform(UTF8.decoder).listen(stderr.write);
if (await git.exitCode != 0) {
throw new Exception("Could not clone repo.");
}
var gitDir = new Directory.fromUri(projectDir.uri.resolve(".git"));
if (await gitDir.exists())
await gitDir.delete(recursive: true);
} catch (e) {
print(e);
_pen.red();
_pen("${Icon.BALLOT_X} Could not initialize Angel project.");
_pen();
rethrow;
}
}
_pubGet() async {
var pub = await Process.start("pub", ["get"]);
pub.stdout.pipe(stdout);
pub.stderr.pipe(stderr);
var code = await pub.exitCode;
print("Pub process exited with code $code");
}
}

View file

@ -1,11 +0,0 @@
import "dart:async";
import "dart:io";
import "package:angel_framework/angel_framework.dart";
import "package:angel/src/services/services.dart";
class SampleServer extends Angel {
@override
startServer(address, port) async {
return await super.startServer(address, port);
}
}

View file

@ -1,8 +0,0 @@
name: angel
publish_to: none
dependencies:
angel_framework: ^1.0.0-dev
angel_mongo: ^1.0.0-dev
dev_dependencies:
http: ^0.11.3
test: ^0.12.13