from lib.Utils import Utils import os import sh import sys class FormulaRepo(): # class variables repo_url = '' repo_path = '' repo = None # class constructor def __init__(self, formula): self.repo_url = formula.git_url self.repo_path = formula.local_path # sets up our class' repo instance def bake(self): self.repo = sh.git.bake(_cwd=self.repo_path) # list of git branches def get_branches(self): # define our branch array branches = [] # fetch output of git branches branch_lines = self.repo.branch() # loop through the branches for line in branch_lines: bits = Utils.remove_ansi_from_list(line.split()) # check if the branch was marked as current if bits[0] == '*': branches.append(bits[1]) else: branches.append(bits[0]) # return our list of branch names return branches # get current branch def get_current_branch(self): branches = self.repo.branch() # loop through the branches for line in branches: bits = Utils.remove_ansi_from_list(line.split()) # check for if a branch is listed as current if bits[0] == '*': # return the branch name return bits[1] # return false if no branch is selected return False # switch to branch def switch_branch(self, branch): print('Switching %s to the \'%s\' branch' % (self.repo_path, branch)) self.repo.checkout(branch) # retrieves repo from remote location def retrieve(self): # check if the destination directory exists if not os.path.exists(self.repo_path): # clone git repo print('Downloading ' + self.repo_url + ' into ' + self.repo_path) sh.git.clone(self.repo_url, self.repo_path) else: # let the user know it's already downloaded so we'll update it later print(self.repo_path + ' already exists, so we\'re not downloading it again.') # set up our class repo instance self.bake() # check if the repo is up to date def check_tracking_info(self, branch): if branch != False: # tracking a specific branch on the repo # check to make sure that the given branch name actually exists first if not branch in self.get_branches(): print('%s is not an existing branch name for %s - please fix this.' % (branch, self.repo_path)) sys.exit(1) repo_branch = self.get_current_branch() # check to make sure that the current tracked branch is, in fact, what we want if branch != repo_branch: self.switch_branch(branch) # let the user know which branch we're using print('For %s, we\'re using the \'%s\' branch.' % (self.repo_path, branch)) else: # no branch was specified, so we're going with what's there print('Using the default/current branch for %s' % (self.repo_path)) # pull any new updates for the repo def pull_updates(self): print('Pulling updates for %s.' % self.repo_path) # git pull self.repo.pull()