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