[PATCH 9 of 9 hglib] update: raise a dedicated error when the revision isn't found

Idan Kamara idankk86 at gmail.com
Thu Jul 28 14:59:02 CDT 2011


# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1311450940 -10800
# Node ID 2019d7ef01c2075536e428ae38c19c9758111564
# Parent  297ddaa9e8d236efca1061bb8548929518d6d87f
update: raise a dedicated error when the revision isn't found

diff -r 297ddaa9e8d2 -r 2019d7ef01c2 hglib/error.py
--- a/hglib/error.py	Sat Jul 23 22:55:40 2011 +0300
+++ b/hglib/error.py	Sat Jul 23 22:55:40 2011 +0300
@@ -17,6 +17,11 @@
         self.name = name
         CommandError.__init__(self, *args, **kwargs)
 
+class RevisionLookupError(CommandError):
+    def __init__(self, name, *args, **kwargs):
+        self.name = name
+        CommandError.__init__(self, *args, **kwargs)
+
 class ServerError(Exception):
     pass
 
diff -r 297ddaa9e8d2 -r 2019d7ef01c2 hglib/hglib.py
--- a/hglib/hglib.py	Sat Jul 23 22:55:40 2011 +0300
+++ b/hglib/hglib.py	Sat Jul 23 22:55:40 2011 +0300
@@ -196,7 +196,12 @@
         args.arg('--template', [templates.changeset])
         args.argif(revset, '-r', revset)
 
-        out = self.outputruncommand(args)[1]
+        ret, out, err = self.outputruncommand(args, raiseonerror=False)
+        if ret:
+            # len("abort: unknown revision '") == 25
+            raise error.RevisionLookupError(err.rstrip()[25:-2], args, ret, out,
+                                            err)
+
         out = out.split('\0')[:-1]
 
         return changeset.fromtemplate(out)
diff -r 297ddaa9e8d2 -r 2019d7ef01c2 tests/test-log.py
--- a/tests/test-log.py	Sat Jul 23 22:55:40 2011 +0300
+++ b/tests/test-log.py	Sat Jul 23 22:55:40 2011 +0300
@@ -1,7 +1,10 @@
 import common
-from hglib import hglib
+from hglib import hglib, error
 
 class test_log(common.basetest):
+    def test_empty(self):
+        self.assertEquals(self.client.log(), [])
+
     def test_basic(self):
         self.append('a', 'a')
         rev0 = self.client.commit('first', addremove=True)
@@ -15,3 +18,13 @@
         self.assertEquals(revs[1], rev1)
 
         self.assertEquals(revs[0], self.client.log('0')[0])
+
+    def test_nonexistent(self):
+        self.append('a', 'a')
+        rev0 = self.client.commit('first', addremove=True)
+        try:
+            self.client.log('abcd')
+        except error.RevisionLookupError, e:
+            self.assertEquals(e.name, 'abcd')
+        else:
+            self.assertTrue(False)


More information about the Mercurial-devel mailing list