Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

164 lines
7.2 KiB

import subprocess
import glob
output_custom = {
'SUCCESS': '\033[92m',
'WARNING': '\033[93m',
'ERROR': '\033[91m',
'END': '\033[0m',
'BOLD': '\033[1m'
}
print(output_custom['WARNING'] + output_custom['BOLD'] + "Atenção!" + output_custom['END'])
print(
"Esse script" + output_custom['BOLD'] + " apaga " + output_custom['END'] + \
"todas as migrations da branch master e" + output_custom['BOLD'] + " copia " + \
output_custom['END'] + "as migrations da branch 3.1.x para a master."
)
will_continue = input('Deseja continuar (s/n): ')[0].lower()
if will_continue == "s" or will_continue == "y":
print("Iniciando.")
print("Verificando alterações na branch atual.")
changes = subprocess.run("git status -s", shell=True, capture_output=True, universal_newlines=True)
if changes.stderr:
print(output_custom['ERROR'] + output_custom['BOLD'] + "ERRO: " + output_custom['END'] + changes.stderr)
exit(-1)
if changes.stdout:
print(
output_custom['WARNING'] + "\nAtenção: " + output_custom['END'] + \
"Essa branch possui alterações não commitadas:\n"
)
subprocess.run("git status -s", shell=True)
print(
"\nSelecione uma opção:\n1)" + output_custom['BOLD'] + " Apagar " + output_custom['END'] + \
"todas as alterações e continuar.\n2) Sair."
)
selected_option = input('Opção: ')
if selected_option == '1':
print(
output_custom['BOLD'] + output_custom['WARNING'] + "\nAtenção: " + output_custom['END'] + \
output_custom['BOLD'] + "Essa opção excluirá todos os tipos de alterações." + output_custom["END"] + \
"\nAs mudanças a serem submetidas (staged), as mudanças não preparadas para submissão " + \
"(not staged) e os arquivos não monitorados (untracked) serão excluídos."
)
confirm_option_1 = input('Deseja continuar (s/n): ')[0].lower()
if confirm_option_1 == "s" or confirm_option_1 == "y":
print("Opção 1 selecionada.")
print("Apagando alterações.")
subprocess.run("git reset HEAD .", shell=True, capture_output=True)
subprocess.run("git checkout .", shell=True, capture_output=True)
subprocess.run("git clean -f -d", shell=True, capture_output=True)
changes_not_deleted = subprocess.run(
"git status -s", shell=True, capture_output=True, universal_newlines=True
).stdout
if changes_not_deleted:
print(
output_custom['ERROR'] + output_custom['BOLD'] + "ERRO: " + output_custom['END'] + \
"Não foi possível desfazer as alterações. Faça manualmente."
)
exit(-1)
else:
print(output_custom['SUCCESS'] + "Alterações desfeitas com sucesso." + output_custom['END'])
else:
print("Opção 2 selecionada.")
print("Saindo.")
exit(0)
else:
print("Opção 2 selecionada.")
print("Saindo.")
exit(0)
else:
print(output_custom['SUCCESS'] + "Branch sem alterações não commitadas." + output_custom['END'])
print("Acessando branch 3.1.x.")
subprocess.run("git checkout 3.1.x", shell=True, capture_output=True)
print("Identificando path do repositório.")
repo_path = subprocess.run(
"git rev-parse --show-toplevel", shell=True, capture_output=True, universal_newlines=True
).stdout
repo_path = repo_path[:len(repo_path)-1]
print("Listando paths dos diretórios de migrations dos aplicativos.")
apps_migrations_dir_path_list = list(glob.glob(repo_path + "/sapl/*/migrations/"))
print("Iniciando cópia de arquivos para diretório temporário.")
temp_apps_migrations_dir_path = repo_path + "/temp/"
subprocess.run("mkdir " + temp_apps_migrations_dir_path, shell=True, capture_output=True)
print("Copiando os diretórios de migrations dos aplicativos...")
for app_dir in apps_migrations_dir_path_list:
names = app_dir.split('/')
app_name = names[len(names)-3]
source = repo_path + "/sapl/" + app_name + "/migrations/ "
temp_app_migrations_dir_path = temp_apps_migrations_dir_path + app_name + "/"
subprocess.run("mkdir " + temp_app_migrations_dir_path, shell=True, capture_output=True)
print(app_name + " - Copiando...")
subprocess.run("cp -r " + source + temp_app_migrations_dir_path, shell=True, capture_output=True)
print(app_name + " - Verificando Cópia...")
copy_fail = subprocess.run(
"diff -q -r " + source + temp_app_migrations_dir_path + "/migrations/",
shell=True, capture_output=True, universal_newlines=True
)
if copy_fail.stderr or copy_fail.stdout:
print(
output_custom['ERROR'] + output_custom['BOLD'] + "ERRO: " + output_custom['END'] + \
"Cópia não realizada com sucesso."
)
subprocess.run("rm -r " + temp_apps_migrations_dir_path, shell=True)
exit(-1)
print(output_custom['SUCCESS'] + "Cópias realizadas com sucesso." + output_custom['END'])
print("Acessando branch master.")
subprocess.run("git checkout master", shell=True, capture_output=True)
print("Iniciando cópia de arquivos para a master.")
print("Substituindo os diretórios de migrations dos aplicativos na branch master...")
for app_dir in apps_migrations_dir_path_list:
names = app_dir.split('/')
app_name = names[len(names)-3]
source = temp_apps_migrations_dir_path + app_name + "/migrations/ "
print(app_name + " - Apagando...")
destiny = repo_path + "/sapl/" + app_name
subprocess.run("sudo rm -r " + destiny + "/migrations/", shell=True, capture_output=True)
print(app_name + " - Copiando...")
subprocess.run("cp -r " + source + destiny + "/", shell=True, capture_output=True)
print(app_name + " - Verificando Cópia...")
copy_fail = subprocess.run(
"diff -q -r " + source + destiny + "/migrations/", shell=True, capture_output=True, universal_newlines=True
)
if copy_fail.stderr or copy_fail.stdout:
print(
output_custom['ERROR'] + output_custom['BOLD'] + "ERRO: " + output_custom['END'] + \
"Cópia não realizada com sucesso."
)
subprocess.run("rm -r " + temp_apps_migrations_dir_path, shell=True)
subprocess.run("git checkout .", shell=True, capture_output=True)
subprocess.run("git clean -f -d", shell=True, capture_output=True)
exit(-1)
print(output_custom['SUCCESS'] + "Substituição realizada com sucesso." + output_custom['END'])
print("Excluindo diretório temporário.")
subprocess.run("rm -r " + temp_apps_migrations_dir_path, shell=True)
print(output_custom['SUCCESS'] + output_custom['BOLD'] + "SUCCESS" + output_custom['END'])
else:
print("Saindo.")
exit(0)