mirror of https://github.com/CIRCL/AIL-framework
				
				
				
			
		
			
				
	
	
		
			155 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env python3
 | |
| # -*-coding:UTF-8 -*
 | |
| 
 | |
| import subprocess
 | |
| 
 | |
| TERMINAL_RED = '\033[91m'
 | |
| TERMINAL_YELLOW = '\33[93m'
 | |
| TERMINAL_BLUE = '\33[94m'
 | |
| TERMINAL_BLINK = '\33[6m'
 | |
| TERMINAL_DEFAULT = '\033[0m'
 | |
| 
 | |
| # set defaut_remote
 | |
| def set_default_remote(new_origin_url, verbose=False):
 | |
|     process = subprocess.run(['git', 'remote', 'set-url', 'origin', new_origin_url], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         res = process.stdout
 | |
|         if res == b'':
 | |
|             return True
 | |
|         else:
 | |
|             return False
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return False
 | |
| 
 | |
| # Check if working directory is clean
 | |
| def is_working_directory_clean(verbose=False):
 | |
|     if verbose:
 | |
|         print('check if this git directory is clean ...')
 | |
|         #print('git ls-files -m')
 | |
|     process = subprocess.run(['git', 'ls-files', '-m'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         res = process.stdout
 | |
|         if res == b'':
 | |
|             return True
 | |
|         else:
 | |
|             return False
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return False
 | |
| 
 | |
| # Check if this git is a fork
 | |
| def is_not_fork(origin_repo, verbose=False):
 | |
|     if verbose:
 | |
|         print('check if this git is a fork ...')
 | |
|         #print('git remote -v')
 | |
|     process = subprocess.run(['git', 'remote', '-v'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         res = process.stdout.decode()
 | |
|         if verbose:
 | |
|             print(res)
 | |
|         if 'origin	{}'.format(origin_repo) in res:
 | |
|             return True
 | |
|         else:
 | |
|             return False
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return False
 | |
| 
 | |
| # Get current branch
 | |
| def get_current_branch(verbose=False):
 | |
|     if verbose:
 | |
|         print('retrieving current branch ...')
 | |
|         #print('git rev-parse --abbrev-ref HEAD')
 | |
|     process = subprocess.run(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         current_branch = process.stdout.replace(b'\n', b'').decode()
 | |
|         if verbose:
 | |
|             print(current_branch)
 | |
|         return current_branch
 | |
| 
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return ''
 | |
| 
 | |
| # Get last commit id on master branch from remote
 | |
| def get_last_commit_id_from_remote(branch='master', verbose=False):
 | |
|     if verbose:
 | |
|         print('retrieving last remote commit id ...')
 | |
|         #print('git ls-remote origin master')
 | |
|     process = subprocess.run(['git', 'ls-remote', 'origin', branch], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         last_commit_id = process.stdout.split(b'\t')[0].replace(b'\n', b'').decode()
 | |
|         if verbose:
 | |
|             print(last_commit_id)
 | |
|         return last_commit_id
 | |
| 
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return ''
 | |
| 
 | |
| # Get last commit id on master branch from local
 | |
| def get_last_commit_id_from_local(branch='master', verbose=False):
 | |
|     if verbose:
 | |
|         print('retrieving last local commit id ...')
 | |
|         #print('git rev-parse master')
 | |
|     process = subprocess.run(['git', 'rev-parse', branch], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         last_commit_id = process.stdout.replace(b'\n', b'').decode()
 | |
|         if verbose:
 | |
|             print(last_commit_id)
 | |
|         return last_commit_id
 | |
| 
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return ''
 | |
| 
 | |
| # Get last local tag
 | |
| def get_last_tag_from_local(verbose=False):
 | |
|     if verbose:
 | |
|         print('retrieving last local tag ...')
 | |
|         #print('git describe --abbrev=0 --tags')
 | |
|     process = subprocess.run(['git', 'describe', '--abbrev=0', '--tags'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         last_local_tag = process.stdout.replace(b'\n', b'').decode()
 | |
|         if verbose:
 | |
|             print(last_local_tag)
 | |
|         return last_local_tag
 | |
| 
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return ''
 | |
| 
 | |
| # Get last local tag
 | |
| def get_last_tag_from_remote(verbose=False):
 | |
|     if verbose:
 | |
|         print('retrieving last remote tag ...')
 | |
|         #print('git ls-remote --tags')
 | |
|     process = subprocess.run(['git', 'ls-remote', '--tags'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     if process.returncode == 0:
 | |
|         res = process.stdout.split(b'\n')[-2].split(b'/')[-1].replace(b'^{}', b'').decode()
 | |
|         if verbose:
 | |
|             print(res)
 | |
|         return res
 | |
| 
 | |
|     else:
 | |
|         if verbose:
 | |
|             print('{}{}{}'.format(TERMINAL_RED, process.stderr.decode(), TERMINAL_DEFAULT))
 | |
|         return ''
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     get_last_commit_id_from_remote(verbose=True)
 | |
|     get_last_commit_id_from_local(verbose=True)
 | |
|     get_last_tag_from_local(verbose=True)
 | |
|     get_current_branch(verbose=True)
 | |
|     print(is_fork('https://github.com/ail-project/ail-framework.git'))
 | |
|     print(is_working_directory_clean())
 | |
|     get_last_tag_from_remote(verbose=True)
 |