ยปCore Development>Code coverage>Lib/packaging/command/bdist_dumb.py

Python code coverage for Lib/packaging/command/bdist_dumb.py

#countcontent
1n/a"""Create a "dumb" built distribution.
2n/a
3n/aA dumb distribution is just an archive meant to be unpacked under
4n/asys.prefix or sys.exec_prefix.
5n/a"""
6n/a
7n/aimport os
8n/afrom shutil import rmtree
9n/afrom sysconfig import get_python_version
10n/a
11n/afrom packaging.util import get_platform
12n/afrom packaging.command.cmd import Command
13n/afrom packaging.errors import PackagingPlatformError
14n/afrom packaging import logger
15n/a
16n/a
17n/aclass bdist_dumb(Command):
18n/a
19n/a description = 'create a "dumb" built distribution'
20n/a
21n/a user_options = [('bdist-dir=', 'd',
22n/a "temporary directory for creating the distribution"),
23n/a ('plat-name=', 'p',
24n/a "platform name to embed in generated filenames "
25n/a "(default: %s)" % get_platform()),
26n/a ('format=', 'f',
27n/a "archive format to create (tar, gztar, bztar, zip)"),
28n/a ('keep-temp', 'k',
29n/a "keep the pseudo-installation tree around after " +
30n/a "creating the distribution archive"),
31n/a ('dist-dir=', 'd',
32n/a "directory to put final built distributions in"),
33n/a ('skip-build', None,
34n/a "skip rebuilding everything (for testing/debugging)"),
35n/a ('relative', None,
36n/a "build the archive using relative paths"
37n/a "(default: false)"),
38n/a ('owner=', 'u',
39n/a "Owner name used when creating a tar file"
40n/a " [default: current user]"),
41n/a ('group=', 'g',
42n/a "Group name used when creating a tar file"
43n/a " [default: current group]"),
44n/a ]
45n/a
46n/a boolean_options = ['keep-temp', 'skip-build', 'relative']
47n/a
48n/a default_format = {'posix': 'gztar',
49n/a 'nt': 'zip',
50n/a 'os2': 'zip'}
51n/a
52n/a def initialize_options(self):
53n/a self.bdist_dir = None
54n/a self.plat_name = None
55n/a self.format = None
56n/a self.keep_temp = False
57n/a self.dist_dir = None
58n/a self.skip_build = None
59n/a self.relative = False
60n/a self.owner = None
61n/a self.group = None
62n/a
63n/a def finalize_options(self):
64n/a if self.bdist_dir is None:
65n/a bdist_base = self.get_finalized_command('bdist').bdist_base
66n/a self.bdist_dir = os.path.join(bdist_base, 'dumb')
67n/a
68n/a if self.format is None:
69n/a try:
70n/a self.format = self.default_format[os.name]
71n/a except KeyError:
72n/a raise PackagingPlatformError(
73n/a "don't know how to create dumb built distributions "
74n/a "on platform %s" % os.name)
75n/a
76n/a self.set_undefined_options('bdist',
77n/a 'dist_dir', 'plat_name', 'skip_build')
78n/a
79n/a def run(self):
80n/a if not self.skip_build:
81n/a self.run_command('build')
82n/a
83n/a install = self.reinitialize_command('install_dist',
84n/a reinit_subcommands=True)
85n/a install.root = self.bdist_dir
86n/a install.skip_build = self.skip_build
87n/a install.warn_dir = False
88n/a
89n/a logger.info("installing to %s", self.bdist_dir)
90n/a self.run_command('install_dist')
91n/a
92n/a # And make an archive relative to the root of the
93n/a # pseudo-installation tree.
94n/a archive_basename = "%s.%s" % (self.distribution.get_fullname(),
95n/a self.plat_name)
96n/a
97n/a # OS/2 objects to any ":" characters in a filename (such as when
98n/a # a timestamp is used in a version) so change them to hyphens.
99n/a if os.name == "os2":
100n/a archive_basename = archive_basename.replace(":", "-")
101n/a
102n/a pseudoinstall_root = os.path.join(self.dist_dir, archive_basename)
103n/a if not self.relative:
104n/a archive_root = self.bdist_dir
105n/a else:
106n/a if (self.distribution.has_ext_modules() and
107n/a (install.install_base != install.install_platbase)):
108n/a raise PackagingPlatformError(
109n/a "can't make a dumb built distribution where base and "
110n/a "platbase are different (%r, %r)" %
111n/a (install.install_base, install.install_platbase))
112n/a else:
113n/a archive_root = os.path.join(
114n/a self.bdist_dir,
115n/a self._ensure_relative(install.install_base))
116n/a
117n/a # Make the archive
118n/a filename = self.make_archive(pseudoinstall_root,
119n/a self.format, root_dir=archive_root,
120n/a owner=self.owner, group=self.group)
121n/a if self.distribution.has_ext_modules():
122n/a pyversion = get_python_version()
123n/a else:
124n/a pyversion = 'any'
125n/a self.distribution.dist_files.append(('bdist_dumb', pyversion,
126n/a filename))
127n/a
128n/a if not self.keep_temp:
129n/a if self.dry_run:
130n/a logger.info('removing %s', self.bdist_dir)
131n/a else:
132n/a rmtree(self.bdist_dir)
133n/a
134n/a def _ensure_relative(self, path):
135n/a # copied from dir_util, deleted
136n/a drive, path = os.path.splitdrive(path)
137n/a if path[0:1] == os.sep:
138n/a path = drive + path[1:]
139n/a return path