from steps import step
import sh
import os
import subprocess

class GitMetadata(step.Step):
    def __init__(self):
        super().__init__()
        repo_string = os.getenv('REPO_NAMES')
        self.repos = [x.strip() for x in repo_string.split(',')]

    def move_meta_repos_in_main_repo(self):
        '''Moves the meta repos into the gbmc folder'''
        sh.cd(self.build_dir)
        for i in range(1, len(self.repos)):
            sh.mv(self.repos[i], self.repos[0])

    def run_script(self):
        self.move_meta_repos_in_main_repo()
