Skip to content
Snippets Groups Projects
Select Git revision
  • bc49e32b161883cb7c2af8f5a1cb623266a39e07
  • master default protected
2 results

01-clone.py

Blame
  • 01-clone.py 2.78 KiB
    import subprocess
    from gitlab import Gitlab
    from config import Config
    import gitlab_functions
    
    
    class_start_date = '2019-08'
    
    message = [
        'Human-readable names limited by students\' creation of human-readable names.',
        'You will need to add students who did not create a homework repository',
        'before the due date, who misspelled the repository\'s name,',
        'or who created a repository in a previous semester.'
    ]
    
    
    def get_projects(git_server):
        retrieved_projects = gitlab_functions.get_projects_by_keyword(git_server, 'csce361-homework')
        projects = len(retrieved_projects)
        print(f'retrieved {projects} projects')
        retrieved_projects = list(filter(lambda p: p.created_at.startswith(class_start_date), retrieved_projects))
        projects = len(retrieved_projects)
        print(f'after culling, there are {projects} projects')
        return retrieved_projects
    
    
    def create_csv(git_server, projects, filename):
        file = open(filename, 'x')
        file.write('Student,NUID,Gitlab Username,Canvas Username\n')
        for project in projects:
            student = gitlab_functions.get_user_by_id(git_server, project.creator_id)
            file.write(f'{student.name},unknown,{student.username},unknown\n')
        file.close()
        print('CSV file for students and their usernames has been started.')
        print(message[1])
        print(message[2])
        print(message[3])
    
    
    def create_bash_cloner(git_server, projects, filename):
        file = open(filename, 'x')
        file.write('#!/bin/bash\n\n')
        file.write('# Auto-generated clone script.\n')
        file.write(f'# {message[0]}\n')
        file.write(f'# {message[1]}\n')
        file.write(f'#     {message[2]}\n')
        file.write(f'#     {message[3]}\n\n')
        for project in projects:
            repo_url = project.ssh_url_to_repo
            student = gitlab_functions.get_user_by_id(git_server, project.creator_id).name.replace(' ', '_')
            file.write(f'git clone {repo_url} {student}\n')
        file.close()
        subprocess.call(['chmod', '+x', filename])
        print('Bash script created to provide to TAs so they can clone homework repositories.')
        print(message[0])
        print(message[1])
        print(message[2])
        print(message[3])
    
    
    def clone_repositories(git_server, projects):
        subprocess.call(['mkdir', 'homework'])
        for project in projects:
            repo_url = project.ssh_url_to_repo
            student = gitlab_functions.get_user_by_id(git_server, project.creator_id).name.replace(' ', '_')
            subprocess.call(['git', 'clone', repo_url, f'homework/{student}'])
    
    
    if __name__ == '__main__':
        git = Gitlab(Config.gitlab_url, private_token=Config.gitlab_api_key)
        student_repositories = get_projects(git)
        create_csv(git, student_repositories, f'{class_start_date}.csv')
        create_bash_cloner(git, student_repositories, '01-clone.sh')
        clone_repositories(git, student_repositories)