bup split -b COMMON\_OPTIONS
-bup split \<--noop \[--copy\]|--copy\> COMMON\_OPTIONS
+bup split --copy COMMON\_OPTIONS
+
+bup split --noop \<\[-t|-b\]\> COMMON\_OPTIONS
COMMON\_OPTIONS
~ \[-r *host*:*path*\] \[-v\] \[-q\] \[-d *seconds-since-epoch*\] \[\--bench\]
\--noop
: read the data and split it into blocks based on the "bupsplit"
- rolling checksum algorithm, but don't do anything with the blocks.
- This is mostly useful for benchmarking. Incompatible with -n, -t,
- -c, and -b.
+ rolling checksum algorithm, but don't store anything in the repo.
+ Can be combined with -b or -t to compute (but not store) the git
+ blobs or tree ids for the dataset. This is mostly useful for
+ benchmarking and validating the bupsplit algorithm. Incompatible
+ with -n and -c.
\--copy
: like `--noop`, but also write the data to stdout. This can be
optspec = """
bup split [-t] [-c] [-n name] OPTIONS [--git-ids | filenames...]
bup split -b OPTIONS [--git-ids | filenames...]
-bup split <--noop [--copy]|--copy> OPTIONS [--git-ids | filenames...]
+bup split --copy OPTIONS [--git-ids | filenames...]
+bup split --noop [<-b|-t>] OPTIONS [--git-ids | filenames...]
--
Modes:
b,blobs output a series of blob ids. Implies --fanout=0.
if not (opt.blobs or opt.tree or opt.commit or opt.name or
opt.noop or opt.copy):
o.fatal("use one or more of -b, -t, -c, -n, --noop, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or
- opt.commit or opt.name):
- o.fatal('--noop and --copy are incompatible with -b, -t, -c, -n')
+if opt.copy and (opt.blobs or opt.tree):
+ o.fatal('--copy is incompatible with -b, -t')
+if (opt.noop or opt.copy) and (opt.commit or opt.name):
+ o.fatal('--noop and --copy are incompatible with -c, -n')
if opt.blobs and (opt.tree or opt.commit or opt.name):
o.fatal('-b is incompatible with -t, -c, -n')
if extra and opt.git_ids:
# the input either comes from a series of files or from stdin.
files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if pack_writer and opt.blobs:
- shalist = hashsplit.split_to_blobs(pack_writer.new_blob, files,
+if pack_writer:
+ new_blob = pack_writer.new_blob
+ new_tree = pack_writer.new_tree
+elif opt.blobs or opt.tree:
+ # --noop mode
+ new_blob = lambda content: git.calc_hash('blob', content)
+ new_tree = lambda shalist: git.calc_hash('tree', git.tree_encode(shalist))
+
+if opt.blobs:
+ shalist = hashsplit.split_to_blobs(new_blob, files,
keep_boundaries=opt.keep_boundaries,
progress=prog)
for (sha, size, level) in shalist:
print sha.encode('hex')
reprogress()
-elif pack_writer: # tree or commit or name
+elif opt.tree or opt.commit or opt.name:
if opt.name: # insert dummy_name which may be used as a restore target
mode, sha = \
- hashsplit.split_to_blob_or_tree(pack_writer.new_blob,
- pack_writer.new_tree,
- files,
+ hashsplit.split_to_blob_or_tree(new_blob, new_tree, files,
keep_boundaries=opt.keep_boundaries,
progress=prog)
splitfile_name = git.mangle_name('data', hashsplit.GIT_MODE_FILE, mode)
shalist = [(mode, splitfile_name, sha)]
else:
shalist = hashsplit.split_to_shalist(
- pack_writer.new_blob, pack_writer.new_tree, files,
+ new_blob, new_tree, files,
keep_boundaries=opt.keep_boundaries, progress=prog)
- tree = pack_writer.new_tree(shalist)
+ tree = new_tree(shalist)
else:
last = 0
it = hashsplit.hashsplit_iter(files,