Skip to content

Commit

Permalink
Merge pull request #2047 from pre-commit/windows-as-usual
Browse files Browse the repository at this point in the history
fix pre-commit autoupdate for core.useBuiltinFSMonitor=true on windows
  • Loading branch information
asottile committed Sep 14, 2021
2 parents 2ef29b7 + ab94dd6 commit 530dbe6
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 8 deletions.
22 changes: 17 additions & 5 deletions pre_commit/commands/autoupdate.py
Expand Up @@ -36,24 +36,36 @@ def from_config(cls, config: Dict[str, Any]) -> 'RevInfo':
return cls(config['repo'], config['rev'], None)

def update(self, tags_only: bool, freeze: bool) -> 'RevInfo':
git_cmd = ('git', *git.NO_FS_MONITOR)

if tags_only:
tag_cmd = ('git', 'describe', 'FETCH_HEAD', '--tags', '--abbrev=0')
tag_cmd = (
*git_cmd, 'describe',
'FETCH_HEAD', '--tags', '--abbrev=0',
)
else:
tag_cmd = ('git', 'describe', 'FETCH_HEAD', '--tags', '--exact')
tag_cmd = (
*git_cmd, 'describe',
'FETCH_HEAD', '--tags', '--exact',
)

with tmpdir() as tmp:
git.init_repo(tmp, self.repo)
cmd_output_b('git', 'fetch', 'origin', 'HEAD', '--tags', cwd=tmp)
cmd_output_b(
*git_cmd, 'fetch', 'origin', 'HEAD', '--tags',
cwd=tmp,
)

try:
rev = cmd_output(*tag_cmd, cwd=tmp)[1].strip()
except CalledProcessError:
cmd = ('git', 'rev-parse', 'FETCH_HEAD')
cmd = (*git_cmd, 'rev-parse', 'FETCH_HEAD')
rev = cmd_output(*cmd, cwd=tmp)[1].strip()

frozen = None
if freeze:
exact = cmd_output('git', 'rev-parse', rev, cwd=tmp)[1].strip()
exact_rev_cmd = (*git_cmd, 'rev-parse', rev)
exact = cmd_output(*exact_rev_cmd, cwd=tmp)[1].strip()
if exact != rev:
rev, frozen = exact, rev
return self._replace(rev=rev, frozen=frozen)
Expand Down
9 changes: 6 additions & 3 deletions pre_commit/git.py
Expand Up @@ -12,9 +12,11 @@
from pre_commit.util import cmd_output
from pre_commit.util import cmd_output_b


logger = logging.getLogger(__name__)

# see #2046
NO_FS_MONITOR = ('-c', 'core.useBuiltinFSMonitor=false')


def zsplit(s: str) -> List[str]:
s = s.strip('\0')
Expand Down Expand Up @@ -185,10 +187,11 @@ def init_repo(path: str, remote: str) -> None:
if os.path.isdir(remote):
remote = os.path.abspath(remote)

git = ('git', *NO_FS_MONITOR)
env = no_git_env()
# avoid the user's template so that hooks do not recurse
cmd_output_b('git', 'init', '--template=', path, env=env)
cmd_output_b('git', 'remote', 'add', 'origin', remote, cwd=path, env=env)
cmd_output_b(*git, 'init', '--template=', path, env=env)
cmd_output_b(*git, 'remote', 'add', 'origin', remote, cwd=path, env=env)


def commit(repo: str = '.') -> None:
Expand Down
9 changes: 9 additions & 0 deletions tests/commands/autoupdate_test.py
Expand Up @@ -5,6 +5,7 @@
import yaml

import pre_commit.constants as C
from pre_commit import envcontext
from pre_commit import git
from pre_commit import util
from pre_commit.commands.autoupdate import _check_hooks_still_exist_at_rev
Expand Down Expand Up @@ -176,6 +177,14 @@ def test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store):
assert cfg.read() == fmt.format(out_of_date.path, out_of_date.head_rev)


def test_autoupdate_with_core_useBuiltinFSMonitor(out_of_date, tmpdir, store):
# force the setting on "globally" for git
home = tmpdir.join('fakehome').ensure_dir()
home.join('.gitconfig').write('[core]\nuseBuiltinFSMonitor = true\n')
with envcontext.envcontext((('HOME', str(home)),)):
test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store)


def test_autoupdate_pure_yaml(out_of_date, tmpdir, store):
with mock.patch.object(util, 'Dumper', yaml.SafeDumper):
test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store)
Expand Down

0 comments on commit 530dbe6

Please sign in to comment.