On 14 September 2000, Rene Liebscher said:
Another problem:
python setup.py bdist --formats=zip,gztar
doesn't work. It deletes the build tree after creating the first archive.
OK, I've fixed the bug. The problem was that when you ask to reinitialize the "install" command, it doesn't reinitialize "install_lib", "install_headers", etc. Part of reinitializing a command is resetting its "have run" flag to 0, so on the second run of bdist_dumb, it looked like "install" had not run, but "install_lib" had. So nothing actually got installed, and the directory that was supposed to become the root of the archive didn't even exist. The solution was to add a 'reinit_subcommands' flag to Distribution's 'reinitialize_command()' method. Making this work required promoting the "sub-commands" machinery -- which already had informal standing in the "install" command -- up to the Command base class. Now the Distutils have formal recognition of command "families", something that I've known for a while is needed, but hadn't gotten around to until now.
There is a simple solution for that. First find out all commands to run. Then execute all commands, check for every command if it has to be run later again (eg. bdist_dumb with other format), if it has, check if there is a keep_tree option and set it.
OK, I applied your patch as an optimization. It's not essential at all, but what the hell. Also, I renamed --keep-tree to --keep-temp in the two bdist commands that had it (bdist_dumb and bdist_wininst). And I changed bdist_rpm so it, too, has a --keep-tree option (it used to have --clean/--no-clean). Now, all bdist commands must support the --keep-tree option, so there's no need for bdist.py to check if it exists before assigning to it. Greg