     }
     
     private func buildJobs(jobs: [SignalProducer<TaskEvent<(ProjectLocator, String)>, CarthageError>]) -> Disposable {
+        // compile the checked out dependencies
         var completedJobs = 0
         return SignalProducer(values: jobs)
             |> flatMap(.Concat) { job in

    
    func start() {
        self.currentOperation = self.updateCartfileProject(self.project)
        self.project.projectEvents
            |> observe(next: { event in
                switch event {
                case .Cloning(let id):
                    println("Cloning: \(id.name)")
                case .Fetching(let id):
                    println("Fetching: \(id.name)")
                case .CheckingOut(let id, let string):
                    println("Checking Out: \(id.name), string: \(string)")
                case .DownloadingBinaries(let id, let string):
                    println("Downloading Binaries: \(id.name), string: \(string)")
                case .SkippedDownloadingBinaries(let id, let string):
                    println("Skipped Downloading Binaries: \(id.name), string: \(string)")
                }
            })
    }
    
    /// Builds the project in the given directory, using the given options.
    ///
    /// Returns a producer of producers, representing each scheme being built.
    private func buildProjectInDirectoryURL(directoryURL: NSURL) -> SignalProducer<BuildSchemeProducer, CarthageError> {
        let project = Project(directoryURL: directoryURL)
        let buildProducer = project.loadCombinedCartfile()
            |> map { _ in project }
            |> catch { error in
                return SignalProducer(error: error)
            }
            |> flatMap(.Merge) { project in
                return project //.migrateIfNecessary(options.colorOptions)
                    |> on(next: { next in println(next) })
                    |> then(SignalProducer(value: project))
            }
            |> flatMap(.Merge) { project in
                return project.buildCheckedOutDependenciesWithConfiguration("", forPlatform: .All)
        }
        
        return buildProducer
    }
    
    func cancel() {

import XCGLogger
import ObserverSet

// MARK: Delegate Protocol
protocol CartfileUpdateControllerDelegate: class {
    var changeNotifier: ObserverSet<CWCartfile> { get }
