##// END OF EJS Templates
url: fix file:// URL handling
url: fix file:// URL handling

File last commit:

r7280:810ca383 default
r7284:ac81ffac default
Show More
client.py
62 lines | 1.7 KiB | text/x-python | PythonLexer
Bryan O'Sullivan
Add inotify extension
r6239 # client.py - inotify status client
#
# Copyright 2006, 2007, 2008 Bryan O'Sullivan <bos@serpentine.com>
# Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
Martin Geisler
i18n: import _ instead of gettext
r7225 from mercurial.i18n import _
Bryan O'Sullivan
Add inotify extension
r6239 from mercurial import ui
import common
Benoit Boissinot
remove unused variables
r7280 import os, socket, struct
Bryan O'Sullivan
Add inotify extension
r6239
Matt Mackall
repo.status: eliminate list_
r6753 def query(ui, repo, names, match, ignored, clean, unknown=True):
Bryan O'Sullivan
Add inotify extension
r6239 sock = socket.socket(socket.AF_UNIX)
sockpath = repo.join('inotify.sock')
Benoit Boissinot
inotify: add client code for long pathname handling
r7024 try:
sock.connect(sockpath)
except socket.error, err:
if err[0] == "AF_UNIX path too long":
sockpath = os.readlink(sockpath)
sock.connect(sockpath)
else:
raise
Bryan O'Sullivan
Add inotify extension
r6239
def genquery():
for n in names or []:
yield n
states = 'almrx!'
Matt Mackall
repo.status: eliminate list_
r6753 if ignored:
Bryan O'Sullivan
Add inotify extension
r6239 raise ValueError('this is insanity')
Benoit Boissinot
inotify: fix status not showing "clean" files (issue907)...
r7145 if clean: states += 'c'
Matt Mackall
repo.status: eliminate list_
r6753 if unknown: states += '?'
Bryan O'Sullivan
Add inotify extension
r6239 yield states
req = '\0'.join(genquery())
sock.sendall(chr(common.version))
sock.sendall(req)
sock.shutdown(socket.SHUT_WR)
cs = common.recvcs(sock)
version = ord(cs.read(1))
if version != common.version:
ui.warn(_('(inotify: received response from incompatible server '
'version %d)\n') % version)
return None
try:
resphdr = struct.unpack(common.resphdrfmt, cs.read(common.resphdrsize))
except struct.error:
return None
def readnames(nbytes):
if nbytes:
names = cs.read(nbytes)
if names:
return filter(match, names.split('\0'))
return []
return map(readnames, resphdr)