mirror of https://github.com/CIRCL/AIL-framework
				
				
				
			
		
			
				
	
	
		
			474 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			474 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env python3
 | |
| # -*-coding:UTF-8 -*
 | |
| 
 | |
| """
 | |
| Update AIL
 | |
| ============================
 | |
| 
 | |
| Update AIL clone and fork
 | |
| 
 | |
| """
 | |
| 
 | |
| import configparser
 | |
| import os
 | |
| import sys
 | |
| import argparse
 | |
| 
 | |
| import subprocess
 | |
| 
 | |
| sys.path.append(os.environ['AIL_BIN'])
 | |
| ##################################
 | |
| # Import Project packages
 | |
| ##################################
 | |
| # TODO: move other functions
 | |
| from packages import git_status
 | |
| 
 | |
| 
 | |
| UPDATER_FILENAME = os.path.join(os.environ['AIL_BIN'], 'Update.py')
 | |
| 
 | |
| UPDATER_LAST_MODIFICATION = float(os.stat(UPDATER_FILENAME).st_mtime)
 | |
| 
 | |
| def auto_update_enabled(cfg):
 | |
|     auto_update = cfg.get('Update', 'auto_update')
 | |
|     if auto_update == 'True' or auto_update == 'true':
 | |
|         return True
 | |
|     else:
 | |
|         return False
 | |
| 
 | |
| # check if files are modify locally
 | |
| def check_if_files_modified():
 | |
|     # return True
 | |
|     process = subprocess.run(['git', 'ls-files' ,'-m'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         modified_files = process.stdout
 | |
|         if modified_files:
 | |
|             l_modified_files = []
 | |
|             for modified_file in modified_files.decode().split('\n'):
 | |
|                 if modified_file:
 | |
|                     if modified_file.split('/')[0] != 'configs':
 | |
|                         l_modified_files.append(modified_file)
 | |
|             if l_modified_files:
 | |
|                 print('Modified Files:')
 | |
|                 for modified_file in l_modified_files:
 | |
|                     print('{}{}{}'.format(TERMINAL_BLUE, modified_file, TERMINAL_DEFAULT))
 | |
|                 print()
 | |
|                 return False
 | |
|             else:
 | |
|                 return True
 | |
|         else:
 | |
|             return True
 | |
|     else:
 | |
|         print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         sys.exit(1)
 | |
| 
 | |
| def repo_is_fork():
 | |
|     # return False
 | |
|     print('Check if this repository is a fork:')
 | |
|     process = subprocess.run(['git', 'remote', '-v'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
| 
 | |
|     if process.returncode == 0:
 | |
|         res = process.stdout.decode()
 | |
|         if 'origin	{}'.format(AIL_REPO) in res:
 | |
|             print('    This repository is a {}clone of {}{}'.format(TERMINAL_BLUE, AIL_REPO, TERMINAL_DEFAULT))
 | |
|             return False
 | |
|         elif 'origin	{}'.format(OLD_AIL_REPO) in res:
 | |
|             print('    old AIL repository, Updating remote origin...')
 | |
|             res = git_status.set_default_remote(AIL_REPO, verbose=False)
 | |
|             if res:
 | |
|                 return False
 | |
|             else:
 | |
|                 return True
 | |
|         else:
 | |
|             print('    This repository is a {}fork{}'.format(TERMINAL_BLUE, TERMINAL_DEFAULT))
 | |
|             print()
 | |
|             return True
 | |
|     else:
 | |
|         print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         aborting_update()
 | |
|         sys.exit(0)
 | |
| 
 | |
| def is_upstream_created(upstream):
 | |
|     process = subprocess.run(['git', 'remote', '-v'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         output = process.stdout.decode()
 | |
|         if upstream in output:
 | |
|             return True
 | |
|         else:
 | |
|             return False
 | |
|     else:
 | |
|         print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         aborting_update()
 | |
|         sys.exit(0)
 | |
| 
 | |
| def create_fork_upstream(upstream):
 | |
|     print('{}... Creating upstream ...{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|     print('git remote add {} {}'.format(upstream, AIL_REPO))
 | |
|     process = subprocess.run(['git', 'remote', 'add', upstream, AIL_REPO],
 | |
|                              stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         print(process.stdout.decode())
 | |
|         if is_upstream_created(upstream):
 | |
|             print('Fork upstream created')
 | |
|             print('{}...    ...{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|         else:
 | |
|             print('Fork not created')
 | |
|             aborting_update()
 | |
|             sys.exit(0)
 | |
|     else:
 | |
|         print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         aborting_update()
 | |
|         sys.exit(0)
 | |
| 
 | |
| def update_fork():
 | |
|     print('{}... Updating fork ...{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|     if cfg.get('Update', 'update-fork') == 'True' or cfg.get('Update', 'update-fork') == 'true':
 | |
|         upstream = cfg.get('Update', 'upstream')
 | |
|         if not is_upstream_created(upstream):
 | |
|             create_fork_upstream(upstream)
 | |
|         print('{}git fetch {}:{}'.format(TERMINAL_YELLOW, upstream, TERMINAL_DEFAULT))
 | |
|         process = subprocess.run(['git', 'fetch', upstream], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|         if process.returncode == 0:
 | |
|             print(process.stdout.decode())
 | |
|             print('{}git checkout master:{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|             process = subprocess.run(['git', 'checkout', 'master'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|             if process.returncode == 0:
 | |
|                 print(process.stdout.decode())
 | |
|                 print('{}git merge {}/master:{}'.format(TERMINAL_YELLOW, upstream, TERMINAL_DEFAULT))
 | |
|                 process = subprocess.run(['git', 'merge', '{}/master'.format(upstream)],
 | |
|                                          stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|                 if process.returncode == 0:
 | |
|                     print(process.stdout.decode())
 | |
|                     print('{}...    ...{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|                 else:
 | |
|                     print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|                     aborting_update()
 | |
|                     sys.exit(1)
 | |
|             else:
 | |
|                 print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|                 aborting_update()
 | |
|                 sys.exit(0)
 | |
|         else:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|             aborting_update()
 | |
|             sys.exit(0)
 | |
| 
 | |
|     else:
 | |
|         print('{}Fork Auto-Update disabled in config file{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|         aborting_update()
 | |
|         sys.exit(0)
 | |
| 
 | |
| 
 | |
| def get_git_current_tag(path_current_version):
 | |
|     try:
 | |
|         with open(path_current_version, 'r') as version_content:
 | |
|             version = version_content.read()
 | |
|     except FileNotFoundError:
 | |
|         version = 'v5.0' # TODO Replace with VERSION.json
 | |
|         with open(path_current_version, 'w') as version_content:
 | |
|             version_content.write(version)
 | |
| 
 | |
|     version = version.replace(" ", "").splitlines()[0]
 | |
|     if version[0] != 'v':
 | |
|         version = 'v{}'.format(version)
 | |
|     return version
 | |
| 
 | |
| def get_git_upper_tags_remote(current_tag, is_fork):
 | |
|     # keep only first dot
 | |
|     nb_dot = current_tag.count('.')
 | |
|     if nb_dot > 0:
 | |
|         nb_dot = nb_dot - 1
 | |
|     current_tag_val = current_tag.rsplit('.', nb_dot)
 | |
|     current_tag_val = ''.join(current_tag_val)
 | |
| 
 | |
|     if is_fork:
 | |
|         process = subprocess.run(['git', 'tag'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|         if process.returncode == 0:
 | |
|             list_all_tags = process.stdout.decode().splitlines()
 | |
| 
 | |
|             list_upper_tags = []
 | |
|             if list_all_tags[-1][1:] == current_tag:
 | |
|                 list_upper_tags.append((list_all_tags[-1], None))
 | |
|                 # force update order
 | |
|                 list_upper_tags.sort()
 | |
|                 return list_upper_tags
 | |
|             for tag in list_all_tags:
 | |
|                 if float(tag[1:]) >= float(current_tag_val):
 | |
|                     list_upper_tags.append((tag, None))
 | |
|             # force update order
 | |
|             list_upper_tags.sort()
 | |
|             return list_upper_tags
 | |
|         else:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|             aborting_update()
 | |
|             sys.exit(0)
 | |
|     else:
 | |
|         process = subprocess.run(['git', 'ls-remote', '--tags'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
| 
 | |
|         if process.returncode == 0:
 | |
|             list_all_tags = process.stdout.decode().splitlines()
 | |
|             last_tag = list_all_tags[-1].split('\trefs/tags/')
 | |
|             last_commit = last_tag[0]
 | |
|             last_tag = last_tag[1].split('^{}')[0]
 | |
|             list_upper_tags = []
 | |
|             if last_tag[1:] == current_tag:
 | |
|                 list_upper_tags.append((last_tag, last_commit))
 | |
|                 # force update order
 | |
|                 list_upper_tags.sort()
 | |
|                 return list_upper_tags
 | |
|             else:
 | |
|                 dict_tags_commit = {}
 | |
|                 for mess_tag in list_all_tags:
 | |
|                     commit, tag = mess_tag.split('\trefs/tags/')
 | |
| 
 | |
|                     tag = tag.replace('^{}', '')
 | |
|                     # remove 'v' version
 | |
|                     tag = tag.replace('v', '')
 | |
|                     # keep only first dot
 | |
|                     nb_dot = tag.count('.')
 | |
|                     if nb_dot > 0:
 | |
|                         nb_dot = nb_dot - 1
 | |
|                     tag_val = tag.rsplit('.', nb_dot)
 | |
|                     tag_val = ''.join(tag_val)
 | |
| 
 | |
|                     # check if tag is float
 | |
|                     try:
 | |
|                         tag_val = float(tag_val)
 | |
|                     except ValueError:
 | |
|                         continue
 | |
| 
 | |
|                     if float(current_tag) < 5.0:
 | |
|                         # add tag with last commit
 | |
|                         if float(current_tag_val) <= float(tag_val) < float(5.0):
 | |
|                             dict_tags_commit[tag] = commit
 | |
|                     else:
 | |
|                         # add tag with last commit
 | |
|                         if float(tag_val) >= float(current_tag_val):
 | |
|                             dict_tags_commit[tag] = commit
 | |
|                 list_upper_tags = [('v{}'.format(key), dict_tags_commit[key]) for key in dict_tags_commit]
 | |
|                 # force update order
 | |
|                 list_upper_tags.sort()
 | |
|                 return list_upper_tags
 | |
|         else:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|             aborting_update()
 | |
|             sys.exit(0)
 | |
| 
 | |
| def update_submodules():
 | |
|     print('{}git submodule update:{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|     process = subprocess.run(['git', 'submodule', 'update'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         print(process.stdout.decode())
 | |
|         print()
 | |
|     else:
 | |
|         print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
| 
 | |
| def update_ail(current_tag, list_upper_tags_remote, current_version_path, is_fork):
 | |
|     print('{}git checkout master:{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|     process = subprocess.run(['git', 'checkout', 'master'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     # process = subprocess.run(['ls'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         print(process.stdout.decode())
 | |
|         print()
 | |
| 
 | |
|         update_submodules()
 | |
| 
 | |
|         temp_current_tag = current_tag.replace('v', '')
 | |
|         if temp_current_tag.count('.') > 1:
 | |
|             temp_current_tag = temp_current_tag.rsplit('.', 1)
 | |
|             temp_current_tag = ''.join(temp_current_tag)
 | |
| 
 | |
|         if float(temp_current_tag) < 5.0:
 | |
|             roll_back_update('2c65194b94dab95df9b8da19c88d65239f398355')
 | |
|             pulled = True
 | |
|         else:
 | |
|             print('{}git pull:{}'.format(TERMINAL_YELLOW, TERMINAL_DEFAULT))
 | |
|             process = subprocess.run(['git', 'pull'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|             if process.returncode == 0:
 | |
|                 output = process.stdout.decode()
 | |
|                 print(output)
 | |
|                 pulled = True
 | |
|             else:
 | |
|                 print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|                 aborting_update()
 | |
|                 pulled = False
 | |
|                 sys.exit(1)
 | |
| 
 | |
|         if pulled:
 | |
|             # CHECK IF UPDATER Update
 | |
|             if float(os.stat(UPDATER_FILENAME).st_mtime) > UPDATER_LAST_MODIFICATION:
 | |
|                 # request updater relaunch
 | |
|                 print(f'{TERMINAL_RED}                  Relaunch Launcher                    {TERMINAL_DEFAULT}')
 | |
|                 sys.exit(3)
 | |
| 
 | |
|             if len(list_upper_tags_remote) == 1:
 | |
|                 # additional update (between 2 commits on the same version)
 | |
|                 additional_update_path = os.path.join(os.environ['AIL_HOME'], 'update', current_tag, 'additional_update.sh')
 | |
|                 if os.path.isfile(additional_update_path):
 | |
|                     print()
 | |
|                     print(f'{TERMINAL_YELLOW}------------------------------------------------------------------')
 | |
|                     print('-                 Launching Additional Update:                   -')
 | |
|                     print(f'--  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --{TERMINAL_DEFAULT}')
 | |
|                     process = subprocess.run(['bash', additional_update_path],
 | |
|                                              stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|                     if process.returncode == 0:
 | |
|                         output = process.stdout.decode()
 | |
|                         print(output)
 | |
|                     else:
 | |
|                         print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|                         aborting_update()
 | |
|                         sys.exit(1)
 | |
| 
 | |
|                 print()
 | |
|                 print(f'{TERMINAL_YELLOW}****************  AIL Successfully Updated  *****************{TERMINAL_DEFAULT}')
 | |
|                 print()
 | |
|                 exit(0)
 | |
| 
 | |
|             else:
 | |
|                 # map version with roll back commit
 | |
|                 list_update = []
 | |
|                 previous_commit = list_upper_tags_remote[0][1]
 | |
|                 for row_tuple in list_upper_tags_remote[1:]:
 | |
|                     tag = row_tuple[0]
 | |
|                     list_update.append((tag, previous_commit))
 | |
|                     previous_commit = row_tuple[1]
 | |
| 
 | |
|                 for update in list_update:
 | |
|                     launch_update_version(update[0], update[1], current_version_path, is_fork)
 | |
|                 # Success
 | |
|                 print(f'{TERMINAL_YELLOW}****************  AIL Successfully Updated  *****************{TERMINAL_DEFAULT}')
 | |
|                 print()
 | |
|                 sys.exit(0)
 | |
| 
 | |
|     else:
 | |
|         print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         aborting_update()
 | |
|         sys.exit(0)
 | |
| 
 | |
| def launch_update_version(version, roll_back_commit, current_version_path, is_fork):
 | |
|     update_path = os.path.join(os.environ['AIL_HOME'], 'update', str(version), 'Update.sh')
 | |
|     print()
 | |
|     print(f'{TERMINAL_YELLOW}------------------------------------------------------------------')
 | |
|     print(f'-                 Launching Update: {TERMINAL_BLUE}{version}{TERMINAL_YELLOW}                         -')
 | |
|     print(f'--  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --{TERMINAL_DEFAULT}')
 | |
|     if not os.path.isfile(update_path):
 | |
|         update_path = os.path.join(os.environ['AIL_HOME'], 'update', 'default_update', 'Update.sh')
 | |
|         process = subprocess.Popen(['bash', update_path, version], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     else:
 | |
|         process = subprocess.Popen(['bash', update_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     while True:
 | |
|         output = process.stdout.readline().decode()
 | |
|         if output == '' and process.poll() is not None:
 | |
|             break
 | |
|         if output:
 | |
|             print(output.strip())
 | |
|     if process.returncode == 0:
 | |
|         # output = process.stdout.decode()
 | |
|         # print(output)
 | |
| 
 | |
|         with open(current_version_path, 'w') as version_content:
 | |
|             version_content.write(version)
 | |
| 
 | |
|             print('{}--  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --'.format(TERMINAL_YELLOW))
 | |
|             print('-               Successfully Updated: {}{}{}                        -'.format(TERMINAL_BLUE, version, TERMINAL_YELLOW))
 | |
|             print('------------------------------------------------------------------{}'.format(TERMINAL_DEFAULT))
 | |
|             print()
 | |
|     else:
 | |
|         # print(process.stdout.read().decode())
 | |
|         print('{}{}{}'.format(TERMINAL_RED, process.stderr.read().decode(), TERMINAL_DEFAULT))
 | |
|         print('------------------------------------------------------------------')
 | |
|         print('                   {}Update Error: {}{}{}'.format(TERMINAL_RED, TERMINAL_BLUE, version, TERMINAL_DEFAULT))
 | |
|         print('------------------------------------------------------------------')
 | |
|         if not is_fork:
 | |
|             roll_back_update(roll_back_commit)
 | |
|         else:
 | |
|             aborting_update()
 | |
|             sys.exit(1)
 | |
| 
 | |
| def roll_back_update(roll_back_commit):
 | |
|     print('Rolling back to safe commit: {}{}{}'.format(TERMINAL_BLUE, roll_back_commit, TERMINAL_DEFAULT))
 | |
|     process = subprocess.run(['git', 'checkout', roll_back_commit], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         output = process.stdout
 | |
|         print(output)
 | |
|         sys.exit(0)
 | |
|     else:
 | |
|         print(TERMINAL_RED+process.stderr.decode()+TERMINAL_DEFAULT)
 | |
|         aborting_update()
 | |
|         sys.exit(1)
 | |
| 
 | |
| def aborting_update():
 | |
|     print()
 | |
|     print('{}Aborting ...{}'.format(TERMINAL_RED, TERMINAL_DEFAULT))
 | |
|     print('{}******************************************************************'.format(TERMINAL_RED))
 | |
|     print('*                    AIL Not Updated                             *')
 | |
|     print('******************************************************************{}'.format(TERMINAL_DEFAULT))
 | |
|     print()
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
| 
 | |
|     TERMINAL_RED = '\033[91m'
 | |
|     TERMINAL_YELLOW = '\33[93m'
 | |
|     TERMINAL_BLUE = '\33[94m'
 | |
|     TERMINAL_BLINK = '\33[6m'
 | |
|     TERMINAL_DEFAULT = '\033[0m'
 | |
| 
 | |
|     AIL_REPO = 'https://github.com/ail-project/ail-framework'
 | |
|     OLD_AIL_REPO = 'https://github.com/CIRCL/AIL-framework.git'
 | |
| 
 | |
|     configfile = os.path.join(os.environ['AIL_HOME'], 'configs/update.cfg')
 | |
|     if not os.path.exists(configfile):
 | |
|         raise Exception('Unable to find the configuration file. \
 | |
|                         Did you set environment variables? \
 | |
|                         Or activate the virtualenv.')
 | |
|     cfg = configparser.ConfigParser()
 | |
|     cfg.read(configfile)
 | |
| 
 | |
|     current_version_path = os.path.join(os.environ['AIL_HOME'], 'update/current_version')
 | |
| 
 | |
|     print('{}******************************************************************'.format(TERMINAL_YELLOW))
 | |
|     print('*                        Updating AIL ...                        *')
 | |
|     print('******************************************************************{}'.format(TERMINAL_DEFAULT))
 | |
| 
 | |
|     # manual updates
 | |
|     parser = argparse.ArgumentParser()
 | |
|     parser.add_argument("--manual", nargs='?', const=True, default=False)
 | |
|     args = parser.parse_args()
 | |
|     manual_update = args.manual
 | |
| 
 | |
|     if auto_update_enabled(cfg) or manual_update:
 | |
|         if check_if_files_modified():
 | |
|             is_fork = repo_is_fork()
 | |
|             if is_fork:
 | |
|                 update_fork()
 | |
| 
 | |
|             current_tag = get_git_current_tag(current_version_path)
 | |
|             print()
 | |
|             print('Current Version: {}{}{}'.format(TERMINAL_YELLOW, current_tag, TERMINAL_DEFAULT))
 | |
|             print()
 | |
|             list_upper_tags_remote = get_git_upper_tags_remote(current_tag.replace('v', ''), is_fork)
 | |
|             # new release
 | |
|             if len(list_upper_tags_remote) > 1:
 | |
|                 print('New Releases:')
 | |
|             if is_fork:
 | |
|                 for upper_tag in list_upper_tags_remote:
 | |
|                     print('    {}{}{}'.format(TERMINAL_BLUE, upper_tag[0], TERMINAL_DEFAULT))
 | |
|             else:
 | |
|                 for upper_tag in list_upper_tags_remote:
 | |
|                     print('    {}{}{}: {}'.format(TERMINAL_BLUE, upper_tag[0], TERMINAL_DEFAULT, upper_tag[1]))
 | |
|             print()
 | |
|             update_ail(current_tag, list_upper_tags_remote, current_version_path, is_fork)
 | |
| 
 | |
|         else:
 | |
|             print('Please, commit your changes or stash them before you can update AIL')
 | |
|             aborting_update()
 | |
|             sys.exit(0)
 | |
|     else:
 | |
|         print('               {}AIL Auto update is disabled{}'.format(TERMINAL_RED, TERMINAL_DEFAULT))
 | |
|         aborting_update()
 | |
|         sys.exit(0)
 | |
| 
 | |
| 
 | |
|     # r = get_git_upper_tags_remote('4.2.1', False)
 | |
|     # print(r)
 |