-#!/usr/bin/python
+#!/usr/bin/python3
+
+# pylint: disable=fixme,invalid-name
+# pylint: disable=too-many-branches,too-many-locals,too-many-statements
"""Repack git repos fully the way I like them."""
def readfile(path):
"""Read |path| and return its data"""
if os.path.isfile(path):
- return open(path).read()
+ with open(path) as fp:
+ return fp.read()
return ''
"""See if the git repo is already packed"""
obj_path = os.path.join(path, 'objects')
paths = set(os.listdir(obj_path))
- if {'info', 'pack'} != paths and {'pack'} != paths:
+ if paths not in ({'info', 'pack'}, {'pack'}):
return False
packs = os.listdir(os.path.join(obj_path, 'pack'))
if len(packs) != 2:
packed_refs = readfile(os.path.join(path, 'packed-refs'))
if os.path.exists(origin_path) or 'refs/remotes/origin/' in packed_refs:
cmd = ['git', '--git-dir', path, 'remote', 'prune', 'origin']
- subprocess.check_call(cmd, cwd='/')
+ subprocess.run(cmd, cwd='/', check=True)
clean_packs(path)
cmd = ['git', '--git-dir', rundir, 'reflog', 'expire', '--all', '--stale-fix']
print('Cleaning reflog: %s' % ' '.join(cmd))
- subprocess.check_call(cmd, cwd='/')
+ subprocess.run(cmd, cwd='/', check=True)
# This also packs refs/tags for us.
cmd = ['git', '--git-dir', rundir, 'gc', '--aggressive', '--prune=all']
print('Repacking git repo: %s' % ' '.join(cmd))
- subprocess.check_call(cmd, cwd='/')
+ subprocess.run(cmd, cwd='/', check=True)
# Clean empty dirs.
cmd = ['find', rundir, '-depth', '-type', 'd', '-exec', 'rmdir', '{}', '+']
- subprocess.call(cmd, stderr=open('/dev/null', 'w'))
+ subprocess.call(cmd, stderr=subprocess.DEVNULL)
# There's a few dirs we need to exist even if they're empty.
refdir = os.path.join(rundir, 'refs')
- if not os.path.isdir(refdir):
- os.mkdir(refdir)
+ os.makedirs(refdir, exist_ok=True)
if tmpdir:
cmd = ['rsync', '-a', '--delete', tmpdir + '/', path + '/']
print('Syncing back git repo: %s' % ' '.join(cmd))
- subprocess.check_call(cmd, cwd='/')
+ subprocess.run(cmd, cwd='/', check=True)
cmd = ['find', path + '/', '-exec', 'chmod', 'u+rw', '{}', '+']
- subprocess.check_call(cmd, cwd='/')
+ subprocess.run(cmd, cwd='/', check=True)
finally:
if grafts:
- open(graft_file, 'w').write(grafts)
+ with open(graft_file, 'w') as fp:
+ fp.write(grafts)
if alts:
- open(alt_file, 'w').write(alts)
- if tmpdir and os.path.exists(tmpdir):
- shutil.rmtree(tmpdir)
+ with open(alt_file, 'w') as fp:
+ fp.write(alts)
+ if tmpdir:
+ shutil.rmtree(tmpdir, ignore_errors=True)
def get_parser():