# File lib/gemnasium.rb, line 13
    def push options
      @config = load_config(options[:project_path])
      ensure_config_is_up_to_date!

      unless current_branch == @config.project_branch
        if options[:ignore_branch]
          notify "Not on tracked branch (#{@config.project_branch}), but ignore-branch option set to true. Continuing.\n", :blue
        elsif options[:silence_branch]
          notify "Not on tracked branch (#{@config.project_branch}). Exiting silently.\n", :blue
          return
        else
          quit_because_of("Not on tracked branch (#{@config.project_branch})")
        end
      end

      unless has_project_slug?
        quit_because_of('Project slug not defined. Please create a new project or "resolve" the name of an existing project.')
      end

      dependency_files_hashes = DependencyFiles.get_sha1s_hash(options[:project_path])
      quit_because_of("No supported dependency files detected.") if dependency_files_hashes.empty?
      notify "#{dependency_files_hashes.keys.count} supported dependency file(s) found: #{dependency_files_hashes.keys.join(', ')}"

      # Ask to Gemnasium server which dependency file should be uploaded (new or modified)
      comparison_results = request("#{connection.api_path_for('dependency_files')}/compare", dependency_files_hashes)
      files_to_upload = comparison_results['to_upload']
      deleted_files = comparison_results['deleted']
      notify "#{deleted_files.count} deleted file(s): #{deleted_files.join(', ')}", :blue unless deleted_files.empty?

      unless files_to_upload.empty?
        notify "#{files_to_upload.count} file(s) to upload: #{files_to_upload.join(', ')}"

        # Upload requested dependency files content
        upload_summary = request("#{connection.api_path_for('dependency_files')}/upload", DependencyFiles.get_content_to_upload(options[:project_path], files_to_upload))
        notify "Added dependency files: #{upload_summary['added']}", :green
        notify "Updated dependency files: #{upload_summary['updated']}", :green
        notify "Unchanged dependency files: #{upload_summary['unchanged']}", :blue unless upload_summary['unchanged'].empty?
        notify "Unsupported dependency files: #{upload_summary['unsupported']}", :blue unless upload_summary['unsupported'].empty?
      else
        notify "The project's dependency files are up-to-date.", :blue
      end
    rescue => exception
      quit_because_of(exception.message)
    end