zestsoftware / zest.releaser

Python software releasing made easy and repeatable
https://zestreleaser.readthedocs.io
GNU General Public License v2.0
198 stars 62 forks source link

Fixed IOError when ``setup.cfg`` is missing and no version is found. #260

Closed mauritsvanrees closed 6 years ago

mauritsvanrees commented 6 years ago

I got this in a project where the setup.py had the version in __version__ so it could not be written back. zest.releaser then reads setup.cfg to see if it has a hint on where to find the version. But when setup.cfg is missing, it fails:

Traceback (most recent call last):
  File "/Users/maurits/tools/bin/prerelease", line 45, in <module>
    sys.exit(zest.releaser.prerelease.main())
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/prerelease.py", line 104, in main
    prereleaser.run()
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/baserelease.py", line 353, in run
    self.execute()
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/prerelease.py", line 68, in execute
    self._write_version()
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/baserelease.py", line 283, in _write_version
    self.vcs.version = self.data['new_version']
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/vcs.py", line 275, in _update_version
    setup_cfg_lines, encoding = utils.read_text_file('setup.cfg')
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/utils.py", line 117, in read_text_file
    with open(filename, 'rb') as filehandler:
IOError: [Errno 2] No such file or directory: u'setup.cfg'

With the fix, you still get an error, but it is the intended one:

Enter version [3.0.14]: ERROR: We could read a version from setup.py, but could not write it back. See http://zestreleaser.readthedocs.io/en/latest/versions.html for hints.
Traceback (most recent call last):
  File "/Users/maurits/tools/bin/prerelease", line 45, in <module>
    sys.exit(zest.releaser.prerelease.main())
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/prerelease.py", line 104, in main
    prereleaser.run()
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/baserelease.py", line 353, in run
    self.execute()
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/prerelease.py", line 68, in execute
    self._write_version()
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/baserelease.py", line 283, in _write_version
    self.vcs.version = self.data['new_version']
  File "/Users/maurits/tools/src/zest.releaser/zest/releaser/vcs.py", line 296, in _update_version
    raise RuntimeError("Cannot set version")
RuntimeError: Cannot set version

This fix is simply an added condition and indenting the original lines unchanged.