]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/cmd/split.py
Remove Client __del__ in favor of context management
[bup.git] / lib / bup / cmd / split.py
index 0c1ed4a8038e60fc2a48a77ce5d18aa229cd62fb..1ffe44d3cdd7f4fc4919f7fa0634ef1048e195d8 100755 (executable)
@@ -4,7 +4,7 @@ from binascii import hexlify
 import sys, time
 
 from bup import compat, hashsplit, git, options, client
-from bup.compat import argv_bytes, environ
+from bup.compat import argv_bytes, environ, nullcontext
 from bup.helpers import (add_error, hostname, log, parse_num,
                          qprogress, reprogress, saved_errors,
                          valid_save_name,
@@ -225,42 +225,39 @@ def main(argv):
     if writing:
         git.check_repo_or_die()
 
-    if not writing:
-        cli = None
-    elif remote_dest:
+    if remote_dest and writing:
         cli = repo = client.Client(opt.remote)
     else:
-        cli = None
+        cli = nullcontext()
         repo = git
 
-    if opt.name and writing:
-        refname = opt.name and b'refs/heads/%s' % opt.name
-        oldref = repo.read_ref(refname)
-    else:
-        refname = oldref = None
+    # cli creation must be last nontrivial command in each if clause above
+    with cli:
+        if opt.name and writing:
+            refname = opt.name and b'refs/heads/%s' % opt.name
+            oldref = repo.read_ref(refname)
+        else:
+            refname = oldref = None
 
-    if not writing:
-        pack_writer = NoOpPackWriter()
-    elif not remote_dest:
-        pack_writer = git.PackWriter(compression_level=opt.compress,
-                                     max_pack_size=opt.max_pack_size,
-                                     max_pack_objects=opt.max_pack_objects)
-    else:
-        pack_writer = cli.new_packwriter(compression_level=opt.compress,
+        if not writing:
+            pack_writer = NoOpPackWriter()
+        elif not remote_dest:
+            pack_writer = git.PackWriter(compression_level=opt.compress,
                                          max_pack_size=opt.max_pack_size,
                                          max_pack_objects=opt.max_pack_objects)
+        else:
+            pack_writer = cli.new_packwriter(compression_level=opt.compress,
+                                             max_pack_size=opt.max_pack_size,
+                                             max_pack_objects=opt.max_pack_objects)
 
-    commit = split(opt, files, oldref, out, pack_writer)
-
-    if pack_writer:
-        pack_writer.close()
+        commit = split(opt, files, oldref, out, pack_writer)
 
-    # pack_writer must be closed before we can update the ref
-    if refname:
-        repo.update_ref(refname, commit, oldref)
+        if pack_writer:
+            pack_writer.close()
 
-    if cli:
-        cli.close()
+        # pack_writer must be closed before we can update the ref
+        if refname:
+            repo.update_ref(refname, commit, oldref)
 
     secs = time.time() - start_time
     size = hashsplit.total_split