X-Git-Url: https://git.ralfj.de/mass-build.git/blobdiff_plain/b8fb01b798441403be79fb586f2ece3a5578214e..1948a7fb45ffc56a537351c0f7bebb667bcc7d93:/vcs.py?ds=sidebyside diff --git a/vcs.py b/vcs.py index c1068fb..2e7e818 100644 --- a/vcs.py +++ b/vcs.py @@ -32,14 +32,10 @@ def get_non_digit_prefix(val): class GitCommand: def __getattr__(self, name): - def call(*args, split = True): + def call(*args, get_stderr = False): cmd = ["git", name.replace('_', '-')] + list(args) - with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p: - (stdout, stderr) = p.communicate() - if p.returncode != 0: - raise Exception("Running %s returned non-zero exit code %d" % (str(cmd), p.returncode)) - stdout = stdout.decode('utf-8').strip('\n') - return stdout.split('\n') if split else stdout + output = subprocess.check_call(cmd, stderr=subprocess.STDOUT if get_stderr else None) + return output.decode('utf-8').strip('\n') return call git = GitCommand() @@ -73,10 +69,10 @@ class Git: # create/find correct branch if not git.branch("--list", branchname): # the branch does not yet exit git.branch(branchname, self.commit) - if isBranch: # make sure we track remote branch + if isBranch: # make sure we track the correct remote branch git.branch("-u", self.commit, branchname) # update it to the latest remote commit - git.checkout(branchname) + git.checkout(branchname, get_stderr=True) if mode == MODE_RESET: git.reset("--hard", self.commit) else: @@ -85,20 +81,19 @@ class Git: git.submodule("update", "--init", "--recursive", "--rebase") # done print("...done", end=' ') - if git.rev_parse("HEAD", split=False) != git.rev_parse(self.commit, split=False): + if git.rev_parse("HEAD") != git.rev_parse(self.commit): print("(keeping local patches around)", end=' ') print() def version(self): - repo = git.Repo(self.folder) - v = repo.git.describe() + v = git.describe() return v[len(get_non_digit_prefix(v)):] # remove the non-digit prefix from v (so that it starts with a number) def checkVersions(self): self.update(mode = MODE_FETCH) - currentVersion = git.describe(split=False) + currentVersion = git.describe() # get sorted list of tag names with the same non-digit prefix and higher version number - tags = git.tag() + tags = git.tag().split('\n') tags = [t for t in tags if get_non_digit_prefix(t) == get_non_digit_prefix(currentVersion) and natural_sort_key(t) > natural_sort_key(currentVersion)] if not tags: return tags.sort(key = natural_sort_key)