[MacPorts] #66067: enabling git fsmonitor causes base to hang on git operations

MacPorts noreply at macports.org
Wed Oct 26 08:27:24 UTC 2022


#66067: enabling git fsmonitor causes base to hang on git operations
---------------------------+----------------------
  Reporter:  cjones051073  |      Owner:  (none)
      Type:  defect        |     Status:  assigned
  Priority:  Normal        |  Milestone:
 Component:  base          |    Version:  2.8.0
Resolution:                |   Keywords:
      Port:                |
---------------------------+----------------------
Description changed by cjones051073:

Old description:

> There is an issue with the latest base release, 2.8.0, not present with
> 2.7.x that causes base to hang if the user has
>
> a) Set their ports tree to be a git clone and
>
> b) Enabled the fsmonitor feature of recent git versions.
>
> The feature is available since git 2.37
>
> https://github.blog/2022-06-27-highlights-from-git-2-37/#a-builtin-
> filesystem-monitor-for-windows-and-macos
>
> Enabling it just requires running
>
> {{{
>  > git config core.fsmonitor true
> }}}
>
> When this is done, and if a) above is satisfied commands like `port sync`
> hang up just after the git command spawned completes
>
> {{{
> Oberon ~/Projects/MacPorts/ports > sudo port -d sync
> DEBUG: Copying /Users/chris/Library/Preferences/com.apple.dt.Xcode.plist
> to /opt/local/var/macports/home/Library/Preferences
> --->  Updating the ports tree
> Synchronizing local ports tree from
> file:///Users/chris/Projects/MacPorts/ports
> DEBUG: euid/egid changed to: 501/20, env: HOME=/Users/chris
> DEBUG: /opt/local/bin/git pull --rebase --autostash
> DEBUG: system -W /Users/chris/Projects/MacPorts/ports: /opt/local/bin/git
> pull --rebase --autostash
> Already up to date.
> <hangup>
> }}}
>
> If, during this hangup, I check the processes running I see this one
>
> 67138 s010  S+     0:00.01 /opt/local/libexec/git-core/git fsmonitor--
> daemon run --detach --ipc-threads=8
>
> and indeed if I manually kill that process the port sync command
> continues.
>
> So... A simple reproducer for the issue is the following
>
> 1. Configure your macports installation to use a git clone of the ports
> tree in your personal user area, instead of the default tarball approach.
> In my case this is under /Users/chris/Projects/MacPorts/ports.
>
> 2. Install macports git
>
>   > sudo port install git
>
> 3. Enable the fs monitor for the ports tree checkout you made in 1.
>
>   > cd /Users/chris/Projects/MacPorts/ports
>   > git config core.fsmonitor true
>
> 3. run 'port -d sync'
>
> My guess from the above is port is waiting for the git command it spawned
> to complete, but isn't handling correctly the fact that with the
> fsmonitor option enabled git could spawn a sub-process that remains
> running after the command that spawned it completes.
>
> This was not an issue with the previous 2.7.x releases, so appears to be
> an issue new to 2.8.0.

New description:

 There is an issue with the latest base release, 2.8.0, not present with
 2.7.x that causes base to hang if the user has

 a) Set their ports tree to be a git clone and

 b) Enabled the fsmonitor feature of recent git versions.

 The feature is available since git 2.37

 https://github.blog/2022-06-27-highlights-from-git-2-37/#a-builtin-
 filesystem-monitor-for-windows-and-macos

 Enabling it just requires running

 {{{
  > git config core.fsmonitor true
 }}}

 When this is done, and if a) above is satisfied commands like `port sync`
 hang up just after the git command spawned completes

 {{{
 Oberon ~/Projects/MacPorts/ports > sudo port -d sync
 DEBUG: Copying /Users/chris/Library/Preferences/com.apple.dt.Xcode.plist
 to /opt/local/var/macports/home/Library/Preferences
 --->  Updating the ports tree
 Synchronizing local ports tree from
 file:///Users/chris/Projects/MacPorts/ports
 DEBUG: euid/egid changed to: 501/20, env: HOME=/Users/chris
 DEBUG: /opt/local/bin/git pull --rebase --autostash
 DEBUG: system -W /Users/chris/Projects/MacPorts/ports: /opt/local/bin/git
 pull --rebase --autostash
 Already up to date.
 <hangup>
 }}}

 If, during this hangup, I check the processes running I see this one

 {{{
 67138 s010  S+     0:00.01 /opt/local/libexec/git-core/git fsmonitor--
 daemon run --detach --ipc-threads=8
 }}}

 and indeed if I manually kill that process the port sync command
 continues.

 So... A simple reproducer for the issue is the following

 1. Configure your macports installation to use a git clone of the ports
 tree in your personal user area, instead of the default tarball approach.
 In my case this is under /Users/chris/Projects/MacPorts/ports.

 2. Install macports git

   > sudo port install git

 3. Enable the fs monitor for the ports tree checkout you made in 1.

   > cd /Users/chris/Projects/MacPorts/ports
   > git config core.fsmonitor true

 3. run 'port -d sync'

 My guess from the above is port is waiting for the git command it spawned
 to complete, but isn't handling correctly the fact that with the fsmonitor
 option enabled git could spawn a sub-process that remains running after
 the command that spawned it completes.

 This was not an issue with the previous 2.7.x releases, so appears to be
 an issue new to 2.8.0.

--

-- 
Ticket URL: <https://trac.macports.org/ticket/66067#comment:1>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list