inotify: improve error messages stable
authorNicolas Dumazet <nicdumz.commits@gmail.com>
Thu, 19 Nov 2009 11:06:01 +0900
branchstable
changeset 9900 8939900073a8
parent 9899 be574a37a8ae
child 9902 bf9d117d0010
child 9903 5d748045c2ae
inotify: improve error messages * prefix messages by inotify-(client|server) * make sure that all warning and abort messages use the same format. * in the case where inotify.sock is an old broken symlink, say so and abort instead of trying to overwrite the already existing link
hgext/inotify/client.py
hgext/inotify/server.py
tests/test-inotify
tests/test-inotify-issue1208.out
tests/test-inotify.out
--- a/hgext/inotify/client.py	Wed Nov 18 22:23:11 2009 -0500
+++ b/hgext/inotify/client.py	Thu Nov 19 11:06:01 2009 +0900
@@ -27,8 +27,8 @@
             autostart = self.ui.configbool('inotify', 'autostart', True)
 
             if err[0] == errno.ECONNREFUSED:
-                self.ui.warn(_('(found dead inotify server socket; '
-                               'removing it)\n'))
+                self.ui.warn(_('inotify-client: found dead inotify server '
+                               'socket; removing it\n'))
                 os.unlink(os.path.join(self.root, '.hg', 'inotify.sock'))
             if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart:
                 self.ui.debug('(starting inotify server)\n')
@@ -41,20 +41,20 @@
                         # inotify server while this one was starting.
                         self.ui.debug(str(inst))
                 except Exception, inst:
-                    self.ui.warn(_('could not start inotify server: '
-                                   '%s\n') % inst)
+                    self.ui.warn(_('inotify-client: could not start inotify '
+                                   'server: %s\n') % inst)
                 else:
                     try:
                         return function(self, *args)
                     except socket.error, err:
-                        self.ui.warn(_('could not talk to new inotify '
-                                       'server: %s\n') % err[-1])
+                        self.ui.warn(_('inotify-client: could not talk to new '
+                                       'inotify server: %s\n') % err[-1])
             elif err[0] in (errno.ECONNREFUSED, errno.ENOENT):
                 # silently ignore normal errors if autostart is False
                 self.ui.debug('(inotify server not running)\n')
             else:
-                self.ui.warn(_('failed to contact inotify server: %s\n')
-                         % err[-1])
+                self.ui.warn(_('inotify-client: failed to contact inotify '
+                               'server: %s\n') % err[-1])
 
         self.ui.traceback()
         raise QueryFailed('inotify query failed')
@@ -97,7 +97,8 @@
             version = ord(cs.read(1))
         except TypeError:
             # empty answer, assume the server crashed
-            self.ui.warn(_('received empty answer from inotify server'))
+            self.ui.warn(_('inotify-client: received empty answer from inotify '
+                           'server'))
             raise QueryFailed('server crashed')
 
         if version != common.version:
--- a/hgext/inotify/server.py	Wed Nov 18 22:23:11 2009 -0500
+++ b/hgext/inotify/server.py	Thu Nov 19 11:06:01 2009 +0900
@@ -691,9 +691,13 @@
             self.sock.bind(self.sockpath)
         except socket.error, err:
             if err[0] == errno.EADDRINUSE:
-                raise AlreadyStartedException(_('could not start server: %s')
-                                              % err[1])
+                raise AlreadyStartedException( _('cannot start: socket is '
+                                                 'already bound'))
             if err[0] == "AF_UNIX path too long":
+                if os.path.islink(self.sockpath) and \
+                        not os.path.exists(self.sockpath):
+                    raise util.Abort('inotify-server: cannot start: '
+                                    '.hg/inotify.sock is a broken symlink')
                 tempdir = tempfile.mkdtemp(prefix="hg-inotify-")
                 self.realsockpath = os.path.join(tempdir, "inotify.sock")
                 try:
@@ -706,8 +710,9 @@
                         pass
                     os.rmdir(tempdir)
                     if inst.errno == errno.EEXIST:
-                        raise AlreadyStartedException(_('could not start server: %s')
-                                                      % inst.strerror)
+                        raise AlreadyStartedException(_('cannot start: tried '
+                            'linking .hg/inotify.sock to a temporary socket but'
+                            ' .hg/inotify.sock already exists'))
                     raise
             else:
                 raise
@@ -841,7 +846,7 @@
             try:
                 self.master = master(ui, dirstate, root, timeout)
             except AlreadyStartedException, inst:
-                raise util.Abort(str(inst))
+                raise util.Abort("inotify-server: %s" % inst)
 
         def run(self):
             try:
--- a/tests/test-inotify	Wed Nov 18 22:23:11 2009 -0500
+++ b/tests/test-inotify	Thu Nov 19 11:06:01 2009 +0900
@@ -33,6 +33,10 @@
 
 # let the daemon finish its stuff
 sleep 1
+
+echo % cannot start, already bound
+hg inserve
+
 # issue907
 hg status
 echo % clean
--- a/tests/test-inotify-issue1208.out	Wed Nov 18 22:23:11 2009 -0500
+++ b/tests/test-inotify-issue1208.out	Thu Nov 19 11:06:01 2009 +0900
@@ -1,7 +1,7 @@
 % fail
-abort: could not start server: File exists
-could not talk to new inotify server: No such file or directory
-abort: could not start server: File exists
+abort: inotify-server: cannot start: .hg/inotify.sock is a broken symlink
+inotify-client: could not talk to new inotify server: No such file or directory
+abort: inotify-server: cannot start: .hg/inotify.sock is a broken symlink
 % inserve
 % status
 ? hg.pid
--- a/tests/test-inotify.out	Wed Nov 18 22:23:11 2009 -0500
+++ b/tests/test-inotify.out	Thu Nov 19 11:06:01 2009 +0900
@@ -10,6 +10,8 @@
 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
 M a
 % inserve
+% cannot start, already bound
+abort: inotify-server: cannot start: socket is already bound
 ? hg.pid
 % clean
 C a