~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/export/zip_exporter.py

  • Committer: Jelmer Vernooij
  • Date: 2011-05-10 07:46:15 UTC
  • mfrom: (5844 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5845.
  • Revision ID: jelmer@samba.org-20110510074615-eptod049ndjxc4i7
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
import os
21
21
import stat
 
22
import sys
22
23
import time
23
24
import zipfile
24
25
 
43
44
_DIR_ATTR = stat.S_IFDIR | ZIP_DIRECTORY_BIT | DIR_PERMISSIONS
44
45
 
45
46
 
46
 
def zip_exporter(tree, dest, root, subdir, filtered=False,
47
 
                 per_file_timestamps=False):
 
47
def zip_exporter(tree, dest, root, subdir=None, filtered=False, force_mtime=None):
48
48
    """ Export this tree to a new zip file.
49
49
 
50
50
    `dest` will be created holding the contents of this tree; if it
51
51
    already exists, it will be overwritten".
52
52
    """
53
 
    mutter('export version %r', tree)
54
 
 
55
 
    now = time.localtime()[:6]
56
53
 
57
54
    compression = zipfile.ZIP_DEFLATED
 
55
    if dest == "-":
 
56
        dest = sys.stdout
58
57
    zipf = zipfile.ZipFile(dest, "w", compression)
59
 
 
60
58
    try:
61
59
        for dp, ie in _export_iter_entries(tree, subdir):
62
60
            file_id = ie.file_id
64
62
 
65
63
            # zipfile.ZipFile switches all paths to forward
66
64
            # slashes anyway, so just stick with that.
67
 
            if per_file_timestamps:
 
65
            if force_mtime is not None:
 
66
                mtime = force_mtime
 
67
            else:
68
68
                mtime = tree.get_file_mtime(ie.file_id, dp)
69
 
            else:
70
 
                mtime = now
 
69
            date_time = time.localtime(mtime)[:6]
71
70
            filename = osutils.pathjoin(root, dp).encode('utf8')
72
71
            if ie.kind == "file":
73
72
                zinfo = zipfile.ZipInfo(
74
73
                            filename=filename,
75
 
                            date_time=mtime)
 
74
                            date_time=date_time)
76
75
                zinfo.compress_type = compression
77
76
                zinfo.external_attr = _FILE_ATTR
78
77
                if filtered:
90
89
                # not just empty files.
91
90
                zinfo = zipfile.ZipInfo(
92
91
                            filename=filename + '/',
93
 
                            date_time=mtime)
 
92
                            date_time=date_time)
94
93
                zinfo.compress_type = compression
95
94
                zinfo.external_attr = _DIR_ATTR
96
95
                zipf.writestr(zinfo,'')
97
96
            elif ie.kind == "symlink":
98
97
                zinfo = zipfile.ZipInfo(
99
98
                            filename=(filename + '.lnk'),
100
 
                            date_time=mtime)
 
99
                            date_time=date_time)
101
100
                zinfo.compress_type = compression
102
101
                zinfo.external_attr = _FILE_ATTR
103
 
                zipf.writestr(zinfo, ie.symlink_target)
 
102
                zipf.writestr(zinfo, tree.get_symlink_target(file_id))
104
103
 
105
104
        zipf.close()
106
105