bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 1 | # Copyright (C) 2005 Canonical Ltd
 | 
| 1887.1.1
by Adeodato Simó Do not separate paragraphs in the copyright statement with blank lines, | 2 | #
 | 
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 3 | # This program is free software; you can redistribute it and/or modify
 | 
| 4 | # it under the terms of the GNU General Public License as published by
 | |
| 5 | # the Free Software Foundation; either version 2 of the License, or
 | |
| 6 | # (at your option) any later version.
 | |
| 1887.1.1
by Adeodato Simó Do not separate paragraphs in the copyright statement with blank lines, | 7 | #
 | 
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 8 | # This program is distributed in the hope that it will be useful,
 | 
| 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| 11 | # GNU General Public License for more details.
 | |
| 1887.1.1
by Adeodato Simó Do not separate paragraphs in the copyright statement with blank lines, | 12 | #
 | 
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 13 | # You should have received a copy of the GNU General Public License
 | 
| 14 | # along with this program; if not, write to the Free Software
 | |
| 15 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| 16 | ||
| 17 | """Export a Tree to a non-versioned directory.
 | |
| 18 | """
 | |
| 19 | ||
| 3577.2.1
by Ian Clatworthy deprecate export-related InventoryEntry methods and refactor export code accordingly | 20 | |
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 21 | import os | 
| 3577.2.1
by Ian Clatworthy deprecate export-related InventoryEntry methods and refactor export code accordingly | 22 | |
| 23 | from bzrlib import errors, osutils | |
| 3613.2.2
by Robert Collins Refactor exporters to remove obvious duplication to a helper function. | 24 | from bzrlib.export import _export_iter_entries | 
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 25 | from bzrlib.trace import mutter | 
| 26 | ||
| 3577.2.1
by Ian Clatworthy deprecate export-related InventoryEntry methods and refactor export code accordingly | 27 | |
| 3613.2.1
by Robert Collins Teach export how to export a subdirectory. (Robert Collins) | 28 | def dir_exporter(tree, dest, root, subdir): | 
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 29 | """Export this tree to a new directory. | 
| 30 | ||
| 31 |     `dest` should not exist, and will be created holding the
 | |
| 32 |     contents of this tree.
 | |
| 33 | ||
| 34 |     TODO: To handle subdirectories we need to create the
 | |
| 35 |            directories first.
 | |
| 36 | ||
| 37 |     :note: If the export fails, the destination directory will be
 | |
| 38 |            left in a half-assed state.
 | |
| 39 |     """
 | |
| 3613.2.2
by Robert Collins Refactor exporters to remove obvious duplication to a helper function. | 40 | mutter('export version %r', tree) | 
| 1185.31.12
by John Arbash Meinel Refactored the export code to make it easier to add new export formats. | 41 | os.mkdir(dest) | 
| 3613.2.2
by Robert Collins Refactor exporters to remove obvious duplication to a helper function. | 42 | for dp, ie in _export_iter_entries(tree, subdir): | 
| 3577.2.1
by Ian Clatworthy deprecate export-related InventoryEntry methods and refactor export code accordingly | 43 | fullpath = osutils.pathjoin(dest, dp) | 
| 44 | if ie.kind == "file": | |
| 45 | fileobj = tree.get_file(ie.file_id) | |
| 46 | osutils.pumpfile(fileobj, file(fullpath, 'wb')) | |
| 47 | if tree.is_executable(ie.file_id): | |
| 48 | os.chmod(fullpath, 0755) | |
| 49 | elif ie.kind == "directory": | |
| 50 | os.mkdir(fullpath) | |
| 51 | elif ie.kind == "symlink": | |
| 52 | try: | |
| 53 | os.symlink(ie.symlink_target, fullpath) | |
| 54 | except OSError,e: | |
| 55 | raise errors.BzrError( | |
| 56 | "Failed to create symlink %r -> %r, error: %s" | |
| 57 | % (fullpath, self.symlink_target, e)) | |
| 58 | else: | |
| 59 | raise errors.BzrError("don't know how to export {%s} of kind %r" % | |
| 60 | (ie.file_id, ie.kind)) |