X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=cmd%2Fsave-cmd.py;h=bf2877ba240a0ff90c79745c5104217c4c1849ea;hb=aeafe13a9330e7deca3dc6b9c0496937d904663a;hp=e48170a667c1629e222d32e59b5a76b97b3a98f3;hpb=febb15487a47669374810622481ead399728d861;p=bup.git diff --git a/cmd/save-cmd.py b/cmd/save-cmd.py index e48170a..bf2877b 100755 --- a/cmd/save-cmd.py +++ b/cmd/save-cmd.py @@ -4,13 +4,19 @@ bup_python="$(dirname "$0")/bup-python" || exit $? exec "$bup_python" "$0" ${1+"$@"} """ # end of bup preamble -import sys, stat, time, math -from cStringIO import StringIO + +from __future__ import absolute_import, print_function from errno import EACCES +from io import BytesIO +import os, sys, stat, time, math from bup import hashsplit, git, options, index, client, metadata, hlinkdb -from bup.helpers import * from bup.hashsplit import GIT_MODE_TREE, GIT_MODE_FILE, GIT_MODE_SYMLINK +from bup.helpers import (add_error, grafted_path_components, handle_ctrl_c, + hostname, istty2, log, parse_date_or_fatal, parse_num, + path_components, progress, qprogress, resolve_parent, + saved_errors, stripped_path_components, + userfullname, username, valid_save_name) optspec = """ @@ -69,13 +75,14 @@ if opt.graft: old_path, new_path = splitted_parameter if not (old_path and new_path): o.fatal("a graft point cannot be empty") - graft_points.append((realpath(old_path), realpath(new_path))) + graft_points.append((resolve_parent(old_path), + resolve_parent(new_path))) is_reverse = os.environ.get('BUP_SERVER_REVERSE') if is_reverse and opt.remote: o.fatal("don't use -r in reverse mode; it's automatic") -if opt.name and opt.name.startswith('.'): +if opt.name and not valid_save_name(opt.name): o.fatal("'%s' is not a valid branch name" % opt.name) refname = opt.name and 'refs/heads/%s' % opt.name or None if opt.remote or is_reverse: @@ -141,7 +148,7 @@ def _pop(force_tree, dir_metadata=None): metalist = [('', dir_metadata)] + metalist[1:] sorted_metalist = sorted(metalist, key = lambda x : x[0]) metadata = ''.join([m[1].encode() for m in sorted_metalist]) - metadata_f = StringIO(metadata) + metadata_f = BytesIO(metadata) mode, id = hashsplit.split_to_blob_or_tree(w.new_blob, w.new_tree, [metadata_f], keep_boundaries=False) @@ -446,12 +453,14 @@ tree = _pop(force_tree = None, dir_metadata = metadata.Metadata() if root_collision else None) if opt.tree: - print tree.encode('hex') + print(tree.encode('hex')) if opt.commit or opt.name: msg = 'bup save\n\nGenerated by command:\n%r\n' % sys.argv - commit = w.new_commit(oldref, tree, date, msg) + userline = '%s <%s@%s>' % (userfullname(), username(), hostname()) + commit = w.new_commit(tree, oldref, userline, date, None, + userline, date, None, msg) if opt.commit: - print commit.encode('hex') + print(commit.encode('hex')) msr.close() w.close() # must close before we can update the ref