anchor.diff:    DockerCommandsMultiProjectImpl(this._graph);
   
     @override
  -  Future generateDockerfile(
  -          String serverProjectName, String clientProjectName,
  -          {Directory outputDirectory,
  -          String dartVersion: 'latest',
  -          Map<String, dynamic> environment: const {},
  -          Iterable<int> exposePorts: const [],
  -          Iterable<String> entryPointOptions: const [],
  -          bool omitClientWhenPathDependencies: true,
  -          bool setupForPrivateGit: true,
  -          String targetRootPath: '/app'}) {
  -      Future foo(JefeProjectGraph graph, Directory rootDirectory) async {
  -      final serverProjectDeps = graph.forProject(serverProjectName);
  -      final clientProjectDeps = graph.forProject(clientProjectName);
  +  Future generateDockerfile(String serverProjectName, String clientProjectName,
  +      {Directory outputDirectory,
  +      String dartVersion: 'latest',
  +      Map<String, dynamic> environment: const {},
  +      Iterable<int> exposePorts: const [],
  +      Iterable<String> entryPointOptions: const [],
  +      bool omitClientWhenPathDependencies: true,
  +      bool setupForPrivateGit: true,
  +      String targetRootPath: '/app'}) {
  +    Future foo(JefeProjectGraph graph, Directory rootDirectory) async {
  +      JefeProject getProjectByName(String type, String name) =>
  +          graph.getProjectByName(name).getOrElse(() =>
  +              throw new ArgumentError('$type project $name does not exist'));
  +
  +      final serverProject = getProjectByName('server', serverProjectName);
  +      final clientProject = getProjectByName('client', clientProjectName);
   
         final dockerfile = new Dockerfile();
   
  
positive.code:       _setupForPrivateGit(setupForPrivateGit, dockerfile);
  
        final serverFiles = new _TopLevelProjectFiles(
          dockerfile, serverProjectDeps, rootDirectory.path, targetRootPath);
  
        final clientFiles = new _TopLevelProjectFiles(
          dockerfile, clientProjectDeps, rootDirectory.path, targetRootPath);
  
        final omitClient =
          omitClientWhenPathDependencies && clientFiles.hasPathDependencies;
  
        final excludedDependencies = serverFiles.addAll();
        if (!omitClient) {
  
negative.code: 
  import 'package:dockerfile/dockerfile.dart';
  import 'package:jefe/src/git/git.dart';
  import 'package:jefe/src/project/docker_commands.dart';
  import 'package:jefe/src/project/jefe_project.dart';
  import 'package:jefe/src/project/project.dart';
  import 'package:logging/logging.dart';
  import 'package:path/path.dart' as p;
  import 'package:pubspec/pubspec.dart';
  import 'package:quiver/iterables.dart';
  
  Logger _log = new Logger('jefe.project.commands.docker.impl');
  
  abstract class DockerCommandsImpl implements DockerCommands {
    factory DockerCommandsImpl(JefeProjectGraph graph,
        {bool multiProject: true}) {
      // no distinction between multi and single project docker. Always operates
      // at one level
      return new _DockerCommandsMultiProjectImpl(graph);
  