Document any crashes from the user's text editor

Rather than failing with no information, display the child exit
status and the command line we tried to use to edit a text file.
There may be some useful information to help understand the crash.

Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/editor.py b/editor.py
index 7400ba1..cf0a5ee 100644
--- a/editor.py
+++ b/editor.py
@@ -76,8 +76,15 @@
       os.close(fd)
       fd = None
 
-      if subprocess.Popen(editor + [path]).wait() != 0:
-        raise EditorError()
+      try:
+        rc = subprocess.Popen(editor + [path]).wait()
+      except OSError, e:
+        raise EditorError('editor failed, %s: %s %s'
+          % (str(e), cls._GetEditor(), path))
+      if rc != 0:
+        raise EditorError('editor failed with exit status %d: %s %s'
+          % (rc, cls._GetEditor(), path))
+
       fd2 = open(path)
       try:
         return fd2.read()
diff --git a/error.py b/error.py
index 6b9dff4..cb3b725 100644
--- a/error.py
+++ b/error.py
@@ -24,6 +24,11 @@
 class EditorError(Exception):
   """Unspecified error from the user's text editor.
   """
+  def __init__(self, reason):
+    self.reason = reason
+
+  def __str__(self):
+    return self.reason
 
 class GitError(Exception):
   """Unspecified internal error from git.