salt-formula-manager/lib/FormulaRepo.py

99 lines
3.3 KiB
Python

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()