1#!/bin/sh
2"""": # -*-python-*-
3# https://sourceware.org/bugzilla/show_bug.cgi?id=26034
4export "BUP_ARGV_0"="$0"
5arg_i=1
6for arg in "$@"; do
7    export "BUP_ARGV_${arg_i}"="$arg"
8    shift
9    arg_i=$((arg_i + 1))
10done
11# Here to end of preamble replaced during install
12bup_python="$(dirname "$0")/../../config/bin/python" || exit $?
13exec "$bup_python" "$0"
14"""
15# end of bup preamble
16
17from __future__ import absolute_import
18import os.path, sys
19
20sys.path[:0] = [os.path.dirname(os.path.realpath(__file__)) + '/..']
21
22from bup import compat, git, options
23from bup.compat import argv_bytes
24from bup.helpers import linereader, log
25from bup.io import byte_stream
26from bup.repo import LocalRepo, RemoteRepo
27
28
29optspec = """
30bup join [-r host:path] [refs or hashes...]
31--
32r,remote=  remote repository path
33o=         output filename
34"""
35o = options.Options(optspec)
36opt, flags, extra = o.parse(compat.argv[1:])
37if opt.remote:
38    opt.remote = argv_bytes(opt.remote)
39
40git.check_repo_or_die()
41
42stdin = byte_stream(sys.stdin)
43
44if not extra:
45    extra = linereader(stdin)
46
47ret = 0
48repo = RemoteRepo(opt.remote) if opt.remote else LocalRepo()
49
50if opt.o:
51    outfile = open(opt.o, 'wb')
52else:
53    sys.stdout.flush()
54    outfile = byte_stream(sys.stdout)
55
56for ref in [argv_bytes(x) for x in extra]:
57    try:
58        for blob in repo.join(ref):
59            outfile.write(blob)
60    except KeyError as e:
61        outfile.flush()
62        log('error: %s\n' % e)
63        ret = 1
64
65sys.exit(ret)
66