mirror of https://github.com/CIRCL/AIL-framework
				
				
				
			
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.9 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'
 | 
						|
 | 
						|
# 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/CIRCL/AIL-framework.git'))
 | 
						|
    print(is_working_directory_clean())
 | 
						|
    get_last_tag_from_remote(verbose=True)
 |