~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/export/tar_exporter.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-06-11 03:10:47 UTC
  • mfrom: (3408.7.2 export)
  • Revision ID: pqm@pqm.ubuntu.com-20080611031047-5iokv2feh83kznkz
(mbp) allow tarball export to stdout

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2008 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
18
18
"""
19
19
 
20
20
import os
21
 
from bzrlib.trace import mutter
22
21
import tarfile
 
22
import time
 
23
import sys
 
24
 
23
25
from bzrlib import errors, export
 
26
from bzrlib.trace import mutter
24
27
 
25
28
 
26
29
def tar_exporter(tree, dest, root, compression=None):
29
32
    `dest` will be created holding the contents of this tree; if it
30
33
    already exists, it will be clobbered, like with "tar -c".
31
34
    """
32
 
    from time import time
33
 
    now = time()
 
35
    now = time.time()
34
36
    compression = str(compression or '')
35
 
    if root is None:
36
 
        root = export.get_root_name(dest)
37
 
    ball = tarfile.open(dest, 'w:' + compression)
 
37
    if dest == '-':
 
38
        # XXX: If no root is given, the output tarball will contain files
 
39
        # named '-/foo'; perhaps this is the most reasonable thing.
 
40
        ball = tarfile.open(None, 'w|' + compression, sys.stdout)
 
41
    else:
 
42
        if root is None:
 
43
            root = export.get_root_name(dest)
 
44
        ball = tarfile.open(dest, 'w:' + compression)
38
45
    mutter('export version %r', tree)
39
46
    inv = tree.inventory
40
47
    entries = inv.iter_entries()
44
51
        # so do not export it
45
52
        if dp == ".bzrignore":
46
53
            continue
47
 
        
48
 
        mutter("  export {%s} kind %s to %s", ie.file_id, ie.kind, dest)
49
54
        item, fileobj = ie.get_tar_item(root, dp, now, tree)
50
55
        ball.addfile(item, fileobj)
51
56
    ball.close()