X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fsave-cmd.py;h=b8e4f7aa597d999d877a31a40b36f4c40e205a71;hb=e9dd83a1fd86630e98d44a37a3deb48912c787c5;hp=5031edb690801e229dbfe9808a36c442f4a0c73e;hpb=46dae41b4bdfeb55aa00c34f92fe9cf514a3b809;p=bup.git diff --git a/cmd/save-cmd.py b/cmd/save-cmd.py index 5031edb..b8e4f7a 100755 --- a/cmd/save-cmd.py +++ b/cmd/save-cmd.py @@ -1,5 +1,8 @@ #!/usr/bin/env python import sys, stat, time, math +from cStringIO import StringIO +from errno import EACCES + 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 @@ -71,9 +74,13 @@ if opt.name and opt.name.startswith('.'): 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: - cli = client.Client(opt.remote) + try: + cli = client.Client(opt.remote) + except client.ClientError, e: + log('error: %s' % e) + sys.exit(1) oldref = refname and cli.read_ref(refname) or None - w = cli.new_packwriter() + w = cli.new_packwriter(compression_level=opt.compress) else: cli = None oldref = refname and git.read_ref(refname) or None @@ -129,7 +136,11 @@ 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]) - shalist.append((0100644, '.bupm', w.new_blob(metadata))) + metadata_f = StringIO(metadata) + mode, id = hashsplit.split_to_blob_or_tree(w.new_blob, w.new_tree, + [metadata_f], + keep_boundaries=False) + shalist.append((mode, '.bupm', id)) tree = force_tree or w.new_tree(shalist) if shalists: shalists[-1].append((GIT_MODE_TREE, @@ -180,10 +191,13 @@ def progress_report(n): indexfile = opt.indexfile or git.repo('bupindex') r = index.Reader(indexfile) -if not os.access(indexfile + '.meta', os.W_OK|os.R_OK): - log('error: cannot access "%s"; have you run bup index?' % indexfile) +try: + msr = index.MetaStoreReader(indexfile + '.meta') +except IOError, ex: + if ex.errno != EACCES: + raise + log('error: cannot access %r; have you run bup index?' % indexfile) sys.exit(1) -msr = index.MetaStoreReader(indexfile + '.meta') hlink_db = hlinkdb.HLinkDB(indexfile + '.hlink') def already_saved(ent): @@ -264,7 +278,8 @@ for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during): continue if opt.smaller and ent.size >= opt.smaller: if exists and not hashvalid: - add_error('skipping large file "%s"' % ent.name) + if opt.verbose: + log('skipping large file "%s"\n' % ent.name) lastskip_name = ent.name continue @@ -422,7 +437,7 @@ tree = _pop(force_tree = None, if opt.tree: print tree.encode('hex') if opt.commit or opt.name: - msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv + msg = 'bup save\n\nGenerated by command:\n%r\n' % sys.argv commit = w.new_commit(oldref, tree, date, msg) if opt.commit: print commit.encode('hex')