From: Rob Browning Date: Tue, 31 Dec 2019 23:02:50 +0000 (-0600) Subject: tag-cmd: accommodate python 3 X-Git-Tag: 0.31~157 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;ds=sidebyside;h=5f5e640210edfab364d5e16fd99be312b3d92b5e;p=bup.git tag-cmd: accommodate python 3 Signed-off-by: Rob Browning Tested-by: Rob Browning --- diff --git a/cmd/tag-cmd.py b/cmd/tag-cmd.py index 2fc068d..44c5b33 100755 --- a/cmd/tag-cmd.py +++ b/cmd/tag-cmd.py @@ -5,11 +5,14 @@ exec "$bup_python" "$0" ${1+"$@"} """ # end of bup preamble -from __future__ import absolute_import, print_function +from __future__ import absolute_import +from binascii import hexlify import os, sys from bup import git, options +from bup.compat import argv_bytes from bup.helpers import debug1, handle_ctrl_c, log +from bup.io import byte_stream, path_msg # FIXME: review for safe writes. @@ -36,31 +39,36 @@ if opt.delete: # could implement this verification but we'd need to read in the # contents of the tag file and pass the hash, and we already know # about the tag's existance via "tags". - if not opt.force and opt.delete not in tags: - log("error: tag '%s' doesn't exist\n" % opt.delete) + tag_name = argv_bytes(opt.delete) + if not opt.force and tag_name not in tags: + log("error: tag '%s' doesn't exist\n" % path_msg(tag_name)) sys.exit(1) - tag_file = 'refs/tags/%s' % opt.delete + tag_file = b'refs/tags/%s' % tag_name git.delete_ref(tag_file) sys.exit(0) if not extra: for t in tags: - print(t) + sys.stdout.flush() + out = byte_stream(sys.stdout) + out.write(t) + out.write(b'\n') sys.exit(0) -elif len(extra) < 2: - o.fatal('no commit ref or hash given.') +elif len(extra) != 2: + o.fatal('expected commit ref and hash') -(tag_name, commit) = extra[:2] +tag_name, commit = map(argv_bytes, extra[:2]) if not tag_name: o.fatal("tag name must not be empty.") -debug1("args: tag name = %s; commit = %s\n" % (tag_name, commit)) +debug1("args: tag name = %s; commit = %s\n" + % (path_msg(tag_name), commit.decode('ascii'))) if tag_name in tags and not opt.force: - log("bup: error: tag '%s' already exists\n" % tag_name) + log("bup: error: tag '%s' already exists\n" % path_msg(tag_name)) sys.exit(1) -if tag_name.startswith('.'): - o.fatal("'%s' is not a valid tag name." % tag_name) +if tag_name.startswith(b'.'): + o.fatal("'%s' is not a valid tag name." % path_msg(tag_name)) try: hash = git.rev_parse(commit) @@ -69,20 +77,20 @@ except git.GitError as e: sys.exit(2) if not hash: - log("bup: error: commit %s not found.\n" % commit) + log("bup: error: commit %s not found.\n" % commit.decode('ascii')) sys.exit(2) -pL = git.PackIdxList(git.repo('objects/pack')) +pL = git.PackIdxList(git.repo(b'objects/pack')) if not pL.exists(hash): - log("bup: error: commit %s not found.\n" % commit) + log("bup: error: commit %s not found.\n" % commit.decode('ascii')) sys.exit(2) -tag_file = git.repo('refs/tags/%s' % tag_name) +tag_file = git.repo(b'refs/tags/' + tag_name) try: - tag = open(tag_file, 'w') + tag = open(tag_file, 'wb') except OSError as e: - log("bup: error: could not create tag '%s': %s" % (tag_name, e)) + log("bup: error: could not create tag '%s': %s" % (path_msg(tag_name), e)) sys.exit(3) - -tag.write(hash.encode('hex')) -tag.close() +with tag as tag: + tag.write(hexlify(hash)) + tag.write(b'\n')