Fix zodbot-announce-commits for python3

Signed-off-by: Aurélien Bompard <aurelien@bompard.org>
This commit is contained in:
Aurélien Bompard 2020-06-04 20:56:57 +02:00
parent 203489b2bc
commit 80e2c8757d
No known key found for this signature in database
GPG key ID: 31584CFEB9BF64AD

View file

@ -1,19 +1,18 @@
#!/usr/bin/env python #!/usr/bin/env python3
# encoding: utf-8 # encoding: utf-8
# (c) 2012 Red Hat, Inc. # (c) 2012 Red Hat, Inc.
# Authored by Ricky Elrod # Authored by Ricky Elrod
# But when it breaks, don't yell at him because that's mean. # But when it breaks, don't yell at him because that's mean.
# update hook for FI repos -> zodbot. # update hook for FI repos -> zodbot.
import os
import sys import sys
import subprocess import subprocess
import shlex import shlex
import socket import socket
import urllib
ZODBOT_SERVER = "value01" ZODBOT_SERVER = "value01"
ZODBOT_PORT = 5050 ZODBOT_PORT = 5050
ZODBOT_ANNOUNCE = ["ansible", "dns"]
hook = sys.argv[0] hook = sys.argv[0]
repodir = sys.argv[1] repodir = sys.argv[1]
@ -24,7 +23,7 @@ branch = sys.argv[5]
# Split on /, nuke empties from the result, use the last nonempty # Split on /, nuke empties from the result, use the last nonempty
# element. This lets us not care if there's a trailing slash. # element. This lets us not care if there's a trailing slash.
repodir = filter(None, repodir.split('/'))[-1] repodir = [d for d in repodir.split('/') if d][-1]
def run_command(command): def run_command(command):
@ -32,7 +31,8 @@ def run_command(command):
escaped = shlex.split(command) escaped = shlex.split(command)
cmd = subprocess.Popen(escaped, cmd = subprocess.Popen(escaped,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE) stderr=subprocess.PIPE,
universal_newlines=True)
stdout, stderr = cmd.communicate() stdout, stderr = cmd.communicate()
return {"stdout": stdout, "stderr": stderr} return {"stdout": stdout, "stderr": stderr}
@ -40,19 +40,14 @@ def run_command(command):
def construct_url(slug): def construct_url(slug):
""" Return a space-padded url to the commit. """ Return a space-padded url to the commit.
If and only if it is handled by cgit. Otherwise, return an empty string. If and only if it is handled by pagure. Otherwise, return an empty string.
""" """
# Our long url template. # Our long url template.
tmpl = "https://infrastructure.fedoraproject.org/cgit/{repo}/commit/?id={slug}" tmpl = "https://pagure.io/fedora-infra/{repo}/c/{slug}"
repo = repodir + ".git" if repodir in ZODBOT_ANNOUNCE and slug:
return " " + tmpl.format(repo=repodir, slug=slug)
with open('/etc/cgit-projects-batcave', 'r') as f:
lines = [line.strip() for line in f.readlines()]
if repo in lines and slug:
return " " + tmpl.format(repo=repo, slug=slug)
else: else:
return "" return ""
@ -85,7 +80,7 @@ def parse_commit(commit):
try: try:
slug = message.split(' -')[1].strip().split(':')[1] slug = message.split(' -')[1].strip().split(':')[1]
except IndexError: except IndexError:
print "** Couldn't parse slug from git-rev.", message print("** Couldn't parse slug from git-rev.", message)
# The remaining lines are files changed. # The remaining lines are files changed.
for changed_file in filter(None, lines): for changed_file in filter(None, lines):
@ -119,20 +114,23 @@ def parse_commit(commit):
# Replace the ---- with the files list... # Replace the ---- with the files list...
return message.replace('----', fileslist, 1) + padded_url return message.replace('----', fileslist, 1) + padded_url
# Get a list of commits to report. # Get a list of commits to report.
if branch == 'master': if branch == 'master':
revs = run_command("git rev-list ^%s %s" % (old, new))["stdout"].split("\n") revs = run_command(f"git rev-list ^{old} {new}")["stdout"].split("\n")
revs = filter(None, revs) revs = [r for r in revs if r]
revs.reverse() revs.reverse()
for commit_hash in revs: for commit_hash in revs:
# Get the commit in a format that we can deal with # Get the commit in a format that we can deal with
commit = run_command( commit = run_command(
"git show --name-status " + commit_hash + " --oneline " f"git show --name-status {commit_hash} --oneline "
"--format='%an - " + repodir + ":%h ---- %s'") f"--format='%an - {repodir}:%h ---- %s'")
parsed_commit = parse_commit(commit["stdout"]) parsed_commit = parse_commit(commit["stdout"])
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ZODBOT_SERVER, ZODBOT_PORT)) s.connect((ZODBOT_SERVER, ZODBOT_PORT))
s.sendall(channel + " " + parsed_commit) s.sendall(channel + " " + parsed_commit)
msg = f"{channel} {parsed_commit}"
s.sendall(msg.encode('utf-8'))
s.close() s.close()