~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

Refactored the export code to make it easier to add new export formats.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
from bzrlib import BZRDIR
27
27
from bzrlib.commands import Command, display_command
28
28
from bzrlib.branch import Branch
 
29
import bzrlib.errors as errors
29
30
from bzrlib.errors import BzrError, BzrCheckError, BzrCommandError, NotBranchError
30
31
from bzrlib.errors import DivergedBranches, NoSuchFile, NoWorkingTree
31
32
from bzrlib.option import Option
1120
1121
    takes_options = ['revision', 'format', 'root']
1121
1122
    def run(self, dest, revision=None, format=None, root=None):
1122
1123
        import os.path
 
1124
        from bzrlib.export import export
1123
1125
        b = Branch.open_containing('.')[0]
1124
1126
        if revision is None:
1125
1127
            rev_id = b.last_revision()
1128
1130
                raise BzrError('bzr export --revision takes exactly 1 argument')
1129
1131
            rev_id = revision[0].in_history(b).rev_id
1130
1132
        t = b.revision_tree(rev_id)
1131
 
        arg_root, ext = os.path.splitext(os.path.basename(dest))
1132
 
        if ext in ('.gz', '.bz2'):
1133
 
            new_root, new_ext = os.path.splitext(arg_root)
1134
 
            if new_ext == '.tar':
1135
 
                arg_root = new_root
1136
 
                ext = new_ext + ext
1137
 
        if root is None:
1138
 
            root = arg_root
1139
 
        if not format:
1140
 
            if ext in (".tar",):
1141
 
                format = "tar"
1142
 
            elif ext in (".tar.gz", ".tgz"):
1143
 
                format = "tgz"
1144
 
            elif ext in (".tar.bz2", ".tbz2"):
1145
 
                format = "tbz2"
1146
 
            elif ext in (".zip"):
1147
 
                format = "zip"
1148
 
            else:
1149
 
                format = "dir"
1150
 
        t.export(dest, format, root)
 
1133
        try:
 
1134
            export(t, dest, format, root)
 
1135
        except errors.NoSuchExportFormat, e:
 
1136
            raise BzrCommandError('Unsupported export format: %s' % e.format)
1151
1137
 
1152
1138
 
1153
1139
class cmd_cat(Command):