Subject: [PATCH 0/6] inotify support

From: Nguyễn Thái Ngọc Duy <[email-masked]>
Date: Sun, 12 Jan 2014 18:03:36 +0700

It's been 37 weeks since Robert Zeh's attempt to bring inotify support
to Git [1] and unless I missed some mails, no updates since. So here's
another attempt with my preferred approach (can't help it, playing
with your own ideas is more fun than improving other people's code)

To compare to Robert's approach:

- This one uses UNIX datagram socket. If I read its man page right,
  unix socket respects the containing directory's permission. Which
  means on normal repos, only the user process can access. On shared
  repos, multiple users can access it. This should work on Mac.
  Windows will need a different transport.

- The daemon is dumb. It passes the paths around and that's it.
  lstat() is done by git. If I design it right, there's should not be
  any race conditions that make git miss file updates.

- CE_VALID is reused to avoid mass changes (granted there's other
  neat ways as well). I quite like the idea of machine-controlled
  CE_VALID.

inotify support has the potential of reducing syscalls in
read_directory() as well. I wrote about using lstat() to reduce
readdir() a while back, if that's implemented then inotify will fit in
nicely.

This is just a proof of concept. I'm sure I haven't handled all error
cases very well. The first five patches show the protocol and git
side's changes. The last one fills inotify in.

[1] http://thread.gmane.org/gmane.comp.version-control.git/215820/focus=222278

Nguyễn Thái Ngọc Duy (6):
  read-cache: save trailing sha-1
  read-cache: new extension to mark what file is watched
  read-cache: connect to file watcher
  read-cache: get "updated" path list from file watcher
  read-cache: ask file watcher to watch files
  file-watcher: support inotify

 .gitignore           |   1 +
 Makefile             |   1 +
 cache.h              |   4 +
 config.mak.uname     |   1 +
 file-watcher.c (new) | 329 +++++++++++++++++++++++++++++++++++++++++++++++++++
 git-compat-util.h    |   5 +
 pkt-line.c           |   2 +-
 pkt-line.h           |   2 +
 read-cache.c         | 280 ++++++++++++++++++++++++++++++++++++++++++-
 wrapper.c            |  27 +++++
 10 files changed, 645 insertions(+), 7 deletions(-)
 create mode 100644 file-watcher.c

-- 
1.8.5.2.240.g8478abd