bump2version icon indicating copy to clipboard operation
bump2version copied to clipboard

Using bump2version and pre-commit hooks

Open tucosaurus opened this issue 5 years ago • 9 comments

Hi,

I have been using bump2version for a while. Thank you for maintaining it. Most recently, I added pre-commit hooks to my workflow. Now, my bumpversion commands are always failing since I think it interferes with the pre-commit hooks.

I am using bumpversion's --no-commit flag for now and then commit manually. Is there a way to make them both work together ?

Here's my bumpversion config:

[bumpversion]
current_version = 1.0.0
commit = True
tag = True

And here's my pre commit hook config:

repos:
- repo: git://github.com/pre-commit/pre-commit-hooks
  rev: v1.4.0
  hooks:
    - id: end-of-file-fixer
    - id: trailing-whitespace
    - id: check-case-conflict
    - id: check-merge-conflict
    - id: check-yaml
      args: ['--unsafe']
    - id: detect-private-key
    - id: forbid-new-submodules
    - id: check-json
    - id: pretty-format-json
    - id: check-added-large-files
    - id: flake8

- repo: git://github.com/CuriousLearner/pre-commit-python-sorter
  sha: 5294cde9d51cff119af537e987c30c320e9fbe2f
  hooks:
    - id: python-import-sorter
      args: ['--silent-overwrite']

- repo: https://github.com/psf/black
  rev: stable
  hooks:
    - id: black

Let me know if you need more information from me.

tucosaurus avatar Jan 18 '20 02:01 tucosaurus

Well it would be informative if you could share the error message of the failure :-)

But I see you're using end-of-file-fixer which is known to cause problems. Please see issue #58 for a workaround.

florisla avatar Jan 18 '20 06:01 florisla

Maybe some more info since I also have problems with pre-commit hooks and bumpversion.

More specifically my problem is connected to the fix-trailing-whitespace hook. I configure bumpversion in setup.cfg in a python project. This means there are other sections, sometimes containing lines like these:

[flake8]
exclude =
	.git
	__pycache__

Bumpversion seems to add whitespace after exclude = which the fix-trailing-whitespace doesn't like. This causes an error since the pre-commit hooks obviously fail (bumpversion adds whitespace, hooks remove whitespace)

Maybe the original author has similar problems.

Edit: The version I am using is bumpversion: v1.0.0 (using Python v3.6.9)

bo5o avatar Feb 21 '20 14:02 bo5o

I can confirm I have the same issue as @cbows described above with the trailing whitespace pre-commit hook.

I've disabled this hook for now, but it would be nice if bump2version could leave the other lines untouched.

browniebroke avatar May 10 '20 16:05 browniebroke

I am also having the same issue with bump2version, and the fix-trailing-whitespace precommit hook failing on setup.cfg

rclough avatar Jun 09 '20 21:06 rclough

I can also chime in that the fix-trailing-whitespace hook is what causes errors when versioning my projects with bumpversion. Your workaround to manually commit when bumping versions is also how I've dealt with it.

Zeitsperre avatar Jul 29 '20 18:07 Zeitsperre

Apparently this is caused by python ConfigParser always appending a whitespace after the = even on multiline values. AFAIK there is no way to prevent this in the ConfigParser

One dirty solution is to strip the extra whitespace before writing the file:

diff --git a/bumpversion/cli.py b/bumpversion/cli.py
index b107e10..378389d 100644
--- a/bumpversion/cli.py
+++ b/bumpversion/cli.py
@@ -646,11 +646,12 @@ def _update_config_file(
         )
 
         config.write(new_config)
-        logger.info(new_config.getvalue())
+        config_text = new_config.getvalue().replace("= %s" % config_newlines, "=%s" % config_newlines)
+        logger.info(config_text)
 
         if write_to_config_file:
             with open(config_file, "wt", encoding="utf-8", newline=config_newlines) as f:
-                f.write(new_config.getvalue().strip() + "\n")
+                f.write(config_text.strip() + config_newlines)
 
     except UnicodeEncodeError:
         warnings.warn(

It this is acceptable I can open a PR including the fix and the test changes

yakky avatar Nov 16 '20 08:11 yakky

I also have a solution for this issue here: https://github.com/c4urself/bump2version/pull/163 Its using bump2version itself to bump the cfg, so it will only replace what is needed

balrok avatar Nov 16 '20 08:11 balrok

@balrok If I understood correctly your approach, it looks absolutely sane

yakky avatar Nov 16 '20 18:11 yakky

Another workaround is to exclude setup.cfg from the hook in your .pre-commit.config.yaml file:

-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.0.1
    hooks:
      - id: trailing-whitespace
        exclude: setup.cfg

But yeah, this isn't ideal, and it would be nice if bumpversion didn't modify any lines it doesn't need to. Even without the hook, if I edit setup.cfg manually my editor is currently configured to trim trailing whitespace, so that means the diff on a commit where I'm editing setup.cfg is a bit noisier because of the extra whitespace. What's worse is if I trim the whitespace manually, the next time bumpversion processes the file it'll put the spaces back which adds diff noise to the bumpversion commit.

pzelnip avatar Nov 01 '21 19:11 pzelnip