def checkout_cookbook_repos(&callback)
      @dev_cookbooks.each_pair do |repo_sha, dev_repo|
        repo = dev_repo.to_scraper_hash

        # get the root dir this repo should be, or was, checked out to
        repo_dir = @scraper.repo_dir(repo)

        if File.directory?(repo_dir)
          # repo was already checked out on this machine; leave it alone
          # synthesize a scraper callback so our progress listener knows what's up
          if callback
            callback.call(:commit, :initialize, "Skipping checkout -- repository already exists in #{repo_dir}", nil)
          end
          @registered_checkouts[repo_sha] = repo_dir
        else
          # repo wasn't checked out successfully yet; check it out now
          success = false
          begin
            success = @scraper.scrape(repo, &callback)
          ensure
            if success
              @registered_checkouts[repo_sha] = repo_dir
            else
              # nuke the repo dir if checkout fails, so we try again next time
              FileUtils.rm_rf(repo_dir) unless success

              # scraper logger is an odd duck, so just transfer any errors to
              # the normal logger.
              @scraper.errors.each { |e| ::RightScale::Log.error(e) }
              ::RightScale::Log.error("Failed to checkout from #{repo[:url].inspect}")
            end
          end
        end
      end
      true
    end
def checkout_cookbook_repos(&callback)
      @dev_cookbooks.each_pair do |repo_sha, dev_repo|
        repo = dev_repo.to_scraper_hash

        # get the root dir this repo should be, or was, checked out to
        repo_dir = @scraper.repo_dir(repo)

        if File.directory?(repo_dir)
          # repo was already checked out on this machine; leave it alone
          # synthesize a scraper callback so our progress listener knows what's up
          if callback
            callback.call(:commit, :initialize, "Skipping checkout -- repository already exists in #{repo_dir}", nil)
          end
          @registered_checkouts[repo_sha] = repo_dir
        else
          # repo wasn't checked out successfully yet; check it out now
          success = false
          begin
            success = @scraper.scrape(repo, &callback)
          ensure
            if success
              @registered_checkouts[repo_sha] = repo_dir
            else
              # nuke the repo dir if checkout fails, so we try again next time
              FileUtils.rm_rf(repo_dir) unless success

              # scraper logger is an odd duck, so just transfer any errors to
              # the normal logger.
              @scraper.errors.each { |e| ::RightScale::Log.error(e) }
              ::RightScale::Log.error("Failed to checkout from #{repo[:url].inspect}")
            end
          end
        end
      end
      true
    end
Checkout the given repo and link each dev cookbook to it's matching repose path

 === Parameters
 callback (Proc) :: to be called for each repo checked out see RightScraper::Scraper.scrape for details

 === Return
  true