X-Git-Url: https://git.ralfj.de/mass-build.git/blobdiff_plain/e724c8e09f8d987d431db7d463624ee697e9e855..2d7dbfca0da3fb29cd8578a2e2fd66b698fe3a3d:/vcs.py diff --git a/vcs.py b/vcs.py index 8d8d836..5e481de 100644 --- a/vcs.py +++ b/vcs.py @@ -32,13 +32,10 @@ def get_non_digit_prefix(val): class GitCommand: def __getattr__(self, name): - def call(*args): + def call(*args, get_stderr = False): cmd = ["git", name.replace('_', '-')] + list(args) - p = subprocess.Popen(cmd, stdout=subprocess.PIPE) # TODO use with - (stdout, stderr) = p.communicate() - if p.returncode != 0: - raise Exception("Running %s returned non-zero exit code %d" % (str(cmd), p.returncode)) - return filter(len, stdout.split('\n')) # return list of non-empty lines + output = subprocess.check_output(cmd, stderr=subprocess.STDOUT if get_stderr else None) + return output.decode('utf-8').strip('\n') return call git = GitCommand() @@ -72,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: @@ -83,26 +80,25 @@ class Git: # update submodules git.submodule("update", "--init", "--recursive", "--rebase") # done - print "...done", - if git.rev_parse("HEAD")[0] != git.rev_parse(self.commit)[0]: - print "(keeping local patches around)", - print + print("...done", end=' ') + 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()[0] + currentVersion = git.describe() # get sorted list of tag names with the same non-digit prefix and higher version number - tags = git.tag() - tags = filter(lambda t: get_non_digit_prefix(t) == get_non_digit_prefix(currentVersion) and natural_sort_key(t) > natural_sort_key(currentVersion), tags) + 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) - print "Versions newer than "+currentVersion+" available:" - print tags + print("Versions newer than "+currentVersion+" available:") + print(tags) # Fetch updates via SVN class SVN: @@ -124,4 +120,4 @@ class SVN: return None def checkVersions(self): - print "Version checking not supporting with SVN" + print("Version checking not supporting with SVN")