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(', ')}"
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_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