~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/export/tar_exporter.py

  • Committer: Andrew Bennetts
  • Date: 2008-08-07 00:25:38 UTC
  • mfrom: (3612 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3613.
  • Revision ID: andrew.bennetts@canonical.com-20080807002538-mtl1fcgy2fdabha4
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""
19
19
 
20
20
import os
 
21
import sys
21
22
import tarfile
22
23
import time
23
 
import sys
24
24
 
25
 
from bzrlib import errors, export
 
25
from bzrlib import errors, export, osutils
26
26
from bzrlib.trace import mutter
27
27
 
28
28
 
47
47
    entries = inv.iter_entries()
48
48
    entries.next() # skip root
49
49
    for dp, ie in entries:
50
 
        # .bzrignore has no meaning outside of a working tree
51
 
        # so do not export it
52
 
        if dp == ".bzrignore":
 
50
        # The .bzr* namespace is reserved for "magic" files like
 
51
        # .bzrignore and .bzrrules - do not export these
 
52
        if dp.startswith(".bzr"):
53
53
            continue
54
 
        item, fileobj = ie.get_tar_item(root, dp, now, tree)
 
54
 
 
55
        filename = osutils.pathjoin(root, dp).encode('utf8')
 
56
        item = tarfile.TarInfo(filename)
 
57
        item.mtime = now
 
58
        if ie.kind == "file":
 
59
            item.type = tarfile.REGTYPE
 
60
            if tree.is_executable(ie.file_id):
 
61
                item.mode = 0755
 
62
            else:
 
63
                item.mode = 0644
 
64
            item.size = ie.text_size
 
65
            fileobj = tree.get_file(ie.file_id)
 
66
        elif ie.kind == "directory":
 
67
            item.type = tarfile.DIRTYPE
 
68
            item.name += '/'
 
69
            item.size = 0
 
70
            item.mode = 0755
 
71
            fileobj = None
 
72
        elif ie.kind == "symlink":
 
73
            item.type = tarfile.SYMTYPE
 
74
            item.size = 0
 
75
            item.mode = 0755
 
76
            item.linkname = ie.symlink_target
 
77
            fileobj = None
 
78
        else:
 
79
            raise BzrError("don't know how to export {%s} of kind %r" %
 
80
                           (ie.file_id, ie.kind))
55
81
        ball.addfile(item, fileobj)
56
82
    ball.close()
57
83
 
62
88
 
63
89
def tbz_exporter(tree, dest, root):
64
90
    tar_exporter(tree, dest, root, compression='bz2')
65