# frozen_string_literal: true module Neptuno module Services # Update project to to latest GH master/main class Update < Neptuno::CLI::Base desc "Stashes changes and pulls latest from main/master" option :all, type: :boolean, default: false, desc: "Run on all services" option :main, type: :boolean, default: false, desc: "Keep service on main/master after pull. Uncommited changes are stashed as 'neptuno_stash'" argument :services, type: :array, required: false, desc: "Optional list of services" def call(services: [], **options) command_services_to("update", all: options.fetch(:all), services_as_args: services) do |services| services.each do |service| puts "---Updating #{service}---" current_branch = `git branch --show-current` puts current_branch system("cd #{neptuno_path}/services/#{service} 2>/dev/null && git stash save -u -q neptuno_stash") `cd #{neptuno_path}/services/#{service} 2>/dev/null && git checkout main 2>/dev/null` `cd #{neptuno_path}/services/#{service} 2>/dev/null && git checkout master 2>/dev/null` system("cd #{neptuno_path}/services/#{service} 2>/dev/null && git pull") unless options.fetch(:main) stash_id = `git stash list`.lines.find { |str| str =~ /neptuno_stash/ }&.split(":")&.first `cd #{neptuno_path}/services/#{service} 2>/dev/null && git checkout #{current_branch} 2>/dev/null` if stash_id puts "Applying stashed changes" system("cd #{neptuno_path}/services/#{service} 2>/dev/null && git stash pop -q #{stash_id}") end end puts "" end end end end end end