Repository: pre-commit/pre-commit-hooks

Issue:
`check-vcs-permalinks` - Add support for different branch names
Not all repositories use `master` for their branch name so it would be great if this hook could support other branch names.

Preferably, this would match any blob link that doesn't contain a full hash (so *only* matching 0-f with len of 40 or 64) but if you don't consider that to be a good solution, then being able to specify a list of branches to match would also work, though it would be a lot more likely to lead to non-permalinks not getting matched.

Discussion:
asottile: the title says "Allow", but specifically it's the opposite

Patch:
diff --git a/pre_commit_hooks/check_vcs_permalinks.py b/pre_commit_hooks/check_vcs_permalinks.py
index a30277c..5231d7a 100644
--- a/pre_commit_hooks/check_vcs_permalinks.py
+++ b/pre_commit_hooks/check_vcs_permalinks.py
@@ -8,7 +8,10 @@ from typing import Sequence
 
 
 def _get_pattern(domain: str) -> Pattern[bytes]:
-    regex = rf'https://{domain}/[^/ ]+/[^/ ]+/blob/master/[^# ]+#L\d+'
+    regex = (
+        rf'https://{domain}/[^/ ]+/[^/ ]+/blob/'
+        r'(?![a-fA-F0-9]{4,64}/)([^/. ]+)/[^# ]+#L\d+'
+    )
     return re.compile(regex.encode())
 
 


Test patch:
diff --git a/tests/check_vcs_permalinks_test.py b/tests/check_vcs_permalinks_test.py
index 7d5f86c..ad59151 100644
--- a/tests/check_vcs_permalinks_test.py
+++ b/tests/check_vcs_permalinks_test.py
@@ -11,6 +11,8 @@ def test_passing(tmpdir):
     f.write_binary(
         # permalinks are ok
         b'https://github.com/asottile/test/blob/649e6/foo%20bar#L1\n'
+        # tags are ok
+        b'https://github.com/asottile/test/blob/1.0.0/foo%20bar#L1\n'
         # links to files but not line numbers are ok
         b'https://github.com/asottile/test/blob/master/foo%20bar\n'
         # regression test for overly-greedy regex
@@ -23,7 +25,8 @@ def test_failing(tmpdir, capsys):
     with tmpdir.as_cwd():
         tmpdir.join('f.txt').write_binary(
             b'https://github.com/asottile/test/blob/master/foo#L1\n'
-            b'https://example.com/asottile/test/blob/master/foo#L1\n',
+            b'https://example.com/asottile/test/blob/master/foo#L1\n'
+            b'https://example.com/asottile/test/blob/main/foo#L1\n',
         )
 
         assert main(('f.txt', '--additional-github-domain', 'example.com'))
@@ -31,6 +34,7 @@ def test_failing(tmpdir, capsys):
         assert out == (
             'f.txt:1:https://github.com/asottile/test/blob/master/foo#L1\n'
             'f.txt:2:https://example.com/asottile/test/blob/master/foo#L1\n'
+            'f.txt:3:https://example.com/asottile/test/blob/main/foo#L1\n'
             '\n'
             'Non-permanent github link detected.\n'
             'On any page on github press [y] to load a permalink.\n'