Mercurial > hg
comparison hgext/inotify/client.py @ 6239:39cfcef4f463
Add inotify extension
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Wed, 12 Mar 2008 15:30:11 -0700 |
parents | |
children | ed5ffb2c12f3 ee308d44ad76 |
comparison
equal
deleted
inserted
replaced
6236:ad6b123de1c7 | 6239:39cfcef4f463 |
---|---|
1 # client.py - inotify status client | |
2 # | |
3 # Copyright 2006, 2007, 2008 Bryan O'Sullivan <bos@serpentine.com> | |
4 # Copyright 2007, 2008 Brendan Cully <brendan@kublai.com> | |
5 # | |
6 # This software may be used and distributed according to the terms | |
7 # of the GNU General Public License, incorporated herein by reference. | |
8 | |
9 from mercurial.i18n import gettext as _ | |
10 from mercurial import ui | |
11 import common | |
12 import os, select, socket, stat, struct, sys | |
13 | |
14 def query(ui, repo, names, match, list_ignored, list_clean, list_unknown=True): | |
15 sock = socket.socket(socket.AF_UNIX) | |
16 sockpath = repo.join('inotify.sock') | |
17 sock.connect(sockpath) | |
18 | |
19 def genquery(): | |
20 for n in names or []: | |
21 yield n | |
22 states = 'almrx!' | |
23 if list_ignored: | |
24 raise ValueError('this is insanity') | |
25 if list_clean: states += 'n' | |
26 if list_unknown: states += '?' | |
27 yield states | |
28 | |
29 req = '\0'.join(genquery()) | |
30 | |
31 sock.sendall(chr(common.version)) | |
32 sock.sendall(req) | |
33 sock.shutdown(socket.SHUT_WR) | |
34 | |
35 cs = common.recvcs(sock) | |
36 version = ord(cs.read(1)) | |
37 | |
38 if version != common.version: | |
39 ui.warn(_('(inotify: received response from incompatible server ' | |
40 'version %d)\n') % version) | |
41 return None | |
42 | |
43 try: | |
44 resphdr = struct.unpack(common.resphdrfmt, cs.read(common.resphdrsize)) | |
45 except struct.error: | |
46 return None | |
47 | |
48 def readnames(nbytes): | |
49 if nbytes: | |
50 names = cs.read(nbytes) | |
51 if names: | |
52 return filter(match, names.split('\0')) | |
53 return [] | |
54 | |
55 return map(readnames, resphdr) |