[[!comment format=mdwn
 username="joey"
 subject="""comment 1"""
 date="2017-06-09T17:52:00Z"
 content="""
This must have to do with the fsevents interface used on OSX.

In Assistant.Threads.Committer.safeToAdd, when lsof detects
a file is still open for write by some process, it cancels
the add. This relies on events being received when files
get closed (closingTracked).

In Utility.DirWatcher.FSEvents.watchDir, when an event has
eventFlagItemModified set, it treats that as a file add event.
The intent is to emulate inotify's handling of file add events when
files are closed.

So, two theories:

1. Perhaps eventFlagItemModified only gets set if the file
   is actually modified. Ie, if MS office writes the file
   and while it's being written another process opens it to read
   it (perhaps to index the content), then if the other process
   doesn't modify it, eventFlagItemModified is not set.

2. Perhaps the way the assistant hard links/moves the file around
   confuses the FSEvents handling. Perhaps there is an event with
   eventFlagItemModified, but it's for the locked down file, or
   something like that, so git-annex ignores it.

In any case, I'm leaning toward thinking that closingTracked should
not be True for FSEvents. This bug report seems to show, conclusively,
that FSEvents does not have that property. If closingTracked was False,
as it is for KQueue, the assistant would postpone adding the file,
and keep retrying, around once per second, until it no longer had
any writers, and then add it.

So, I've made that change. I suspect it fixes the bug, but it would
be pretty hard for me to test it. Could you please download tomorrow's
daily build of git-annex for OSX, and see if it fixes the problem?
"""]]
