if opt.verbose >= 2:
git.verbose = opt.verbose - 1
opt.bench = 1
+
+max_pack_size = None
if opt.max_pack_size:
- git.max_pack_size = parse_num(opt.max_pack_size)
+ max_pack_size = parse_num(opt.max_pack_size)
+max_pack_objects = None
if opt.max_pack_objects:
- git.max_pack_objects = parse_num(opt.max_pack_objects)
+ max_pack_objects = parse_num(opt.max_pack_objects)
+
if opt.fanout:
hashsplit.fanout = parse_num(opt.fanout)
if opt.blobs:
elif opt.remote or is_reverse:
cli = client.Client(opt.remote)
oldref = refname and cli.read_ref(refname) or None
- pack_writer = cli.new_packwriter(compression_level=opt.compress)
+ pack_writer = cli.new_packwriter(compression_level=opt.compress,
+ max_pack_size=max_pack_size,
+ max_pack_objects=max_pack_objects)
else:
cli = None
oldref = refname and git.read_ref(refname) or None
- pack_writer = git.PackWriter(compression_level=opt.compress)
+ pack_writer = git.PackWriter(compression_level=opt.compress,
+ max_pack_size=max_pack_size,
+ max_pack_objects=max_pack_objects)
if opt.git_ids:
# the input is actually a series of git object ids that we should retrieve
self.conn.write('%s\n' % ob)
return idx
- def new_packwriter(self, compression_level = 1):
+ def new_packwriter(self, compression_level=1,
+ max_pack_size=None, max_pack_objects=None):
self.check_busy()
def _set_busy():
self._busy = 'receive-objects-v2'
onopen = _set_busy,
onclose = self._not_busy,
ensure_busy = self.ensure_busy,
- compression_level = compression_level)
+ compression_level=compression_level,
+ max_pack_size=max_pack_size,
+ max_pack_objects=max_pack_objects)
def read_ref(self, refname):
self.check_busy()
def __init__(self, conn, objcache_maker, suggest_packs,
onopen, onclose,
ensure_busy,
- compression_level=1):
+ compression_level=1,
+ max_pack_size=None,
+ max_pack_objects=None):
git.PackWriter.__init__(self,
objcache_maker=objcache_maker,
- compression_level=compression_level)
+ compression_level=compression_level,
+ max_pack_size=max_pack_size,
+ max_pack_objects=max_pack_objects)
self.file = conn
self.filename = 'remote socket'
self.suggest_packs = suggest_packs
unlink, username, userfullname,
utc_offset_str)
-
-max_pack_size = 1000*1000*1000 # larger packs will slow down pruning
-max_pack_objects = 200*1000 # cache memory usage is about 83 bytes per object
-
verbose = 0
ignore_midx = 0
repodir = None # The default repository, once initialized
class PackWriter:
"""Writes Git objects inside a pack file."""
def __init__(self, objcache_maker=_make_objcache, compression_level=1,
- run_midx=True, on_pack_finish=None):
+ run_midx=True, on_pack_finish=None,
+ max_pack_size=None, max_pack_objects=None):
+ self.repo_dir = repo()
self.file = None
self.parentfd = None
self.count = 0
self.compression_level = compression_level
self.run_midx=run_midx
self.on_pack_finish = on_pack_finish
+ # larger packs will slow down pruning
+ self.max_pack_size = max_pack_size if max_pack_size \
+ else 1000 * 1000 * 1000
+ # cache memory usage is about 83 bytes per object
+ self.max_pack_objects = max_pack_objects if max_pack_objects \
+ else max(1, self.max_pack_size // 5000)
def __del__(self):
self.close()
def _open(self):
if not self.file:
- objdir = dir=repo('objects')
+ objdir = dir = os.path.join(self.repo_dir, 'objects')
fd, name = tempfile.mkstemp(suffix='.pack', dir=objdir)
try:
self.file = os.fdopen(fd, 'w+b')
size, crc = self._raw_write(_encode_packobj(type, content,
self.compression_level),
sha=sha)
- if self.outbytes >= max_pack_size or self.count >= max_pack_objects:
+ if self.outbytes >= self.max_pack_size \
+ or self.count >= self.max_pack_objects:
self.breakpoint()
return sha
f.close()
obj_list_sha = self._write_pack_idx_v2(self.filename + '.idx', idx, packbin)
-
- nameprefix = repo('objects/pack/pack-%s' % obj_list_sha)
+ nameprefix = os.path.join(self.repo_dir,
+ 'objects/pack/pack-' + obj_list_sha)
if os.path.exists(self.filename + '.map'):
os.unlink(self.filename + '.map')
os.rename(self.filename + '.pack', nameprefix + '.pack')
os.close(self.parentfd)
if run_midx:
- auto_midx(repo('objects/pack'))
+ auto_midx(os.path.join(self.repo_dir, 'objects/pack'))
if self.on_pack_finish:
self.on_pack_finish(nameprefix)