# [PATCH] Factorize editor handling.

2 messages from 2007-02-26 to 2007-02-27. Participants: Yann Dirson, Catalin Marinas.
Thread: https://gitlist.dev/t/6977

## Yann Dirson, 2007-02-26 19:48

Subject: [PATCH] Factorize editor handling.
Message-ID: <20070226194812.28907.80551.stgit@gandelf.nowhere.earth>
URL: https://gitlist.dev/e/20070226194812.28907.80551.stgit%40gandelf.nowhere.earth

```

At the same time we trap the editor error for all editor calls, not
just when called from "stg mail".  We may want to define a new
exception for this though.

Signed-off-by: Yann Dirson <ydirson@altern.org>
---

 stgit/commands/mail.py |   17 +----------------
 stgit/stack.py         |   14 +-------------
 stgit/utils.py         |   23 ++++++++++++++++++++++-
 3 files changed, 24 insertions(+), 30 deletions(-)

diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py
index 762829c..151a408 100644
--- a/stgit/commands/mail.py
+++ b/stgit/commands/mail.py
@@ -272,22 +272,7 @@ def __edit_message(msg):
     f.write(msg)
     f.close()
 
-    # the editor
-    editor = config.get('stgit.editor')
-    if editor:
-        pass
-    elif 'EDITOR' in os.environ:
-        editor = os.environ['EDITOR']
-    else:
-        editor = 'vi'
-    editor += ' %s' % fname
-
-    print 'Invoking the editor: "%s"...' % editor,
-    sys.stdout.flush()
-    err = os.system(editor)
-    if err:
-        raise CmdException, 'editor failed, exit code: %d' % err
-    print 'done'
+    call_editor(fname)
 
     # read the message back
     f = file(fname)
diff --git a/stgit/stack.py b/stgit/stack.py
index 99f10e5..feb77e3 100644
--- a/stgit/stack.py
+++ b/stgit/stack.py
@@ -91,19 +91,7 @@ def edit_file(series, line, comment, show_patch = True):
     print >> f, __comment_prefix, 'vi: set textwidth=75 filetype=diff nobackup:'
     f.close()
 
-    # the editor
-    editor = config.get('stgit.editor')
-    if editor:
-        pass
-    elif 'EDITOR' in os.environ:
-        editor = os.environ['EDITOR']
-    else:
-        editor = 'vi'
-    editor += ' %s' % fname
-
-    print 'Invoking the editor: "%s"...' % editor,
-    sys.stdout.flush()
-    print 'done (exit code: %d)' % os.system(editor)
+    call_editor(fname)
 
     f = file(fname, 'r+')
 
diff --git a/stgit/utils.py b/stgit/utils.py
index 67431ec..d7d4777 100644
--- a/stgit/utils.py
+++ b/stgit/utils.py
@@ -1,7 +1,8 @@
 """Common utility functions
 """
 
-import errno, os, os.path
+import errno, os, os.path, sys
+from stgit.config import config
 
 __copyright__ = """
 Copyright (C) 2005, Catalin Marinas <catalin.marinas@gmail.com>
@@ -152,3 +153,23 @@ def rename(basedir, file1, file2):
     create_dirs(os.path.dirname(full_file2))
     os.rename(os.path.join(basedir, file1), full_file2)
     remove_dirs(basedir, os.path.dirname(file1))
+
+def call_editor(filename):
+    """Run the editor on the specified filename."""
+
+    # the editor
+    editor = config.get('stgit.editor')
+    if editor:
+        pass
+    elif 'EDITOR' in os.environ:
+        editor = os.environ['EDITOR']
+    else:
+        editor = 'vi'
+    editor += ' %s' % filename
+
+    print 'Invoking the editor: "%s"...' % editor,
+    sys.stdout.flush()
+    err = os.system(editor)
+    if err:
+        raise Exception, 'editor failed, exit code: %d' % err
+    print 'done'

```

## Catalin Marinas, 2007-02-27 14:17

Subject: Re: [PATCH] Factorize editor handling.
Message-ID: <b0943d9e0702270617h6ba8669bke55182f84296064b@mail.gmail.com>
URL: https://gitlist.dev/e/b0943d9e0702270617h6ba8669bke55182f84296064b%40mail.gmail.com
In-Reply-To: <20070226194812.28907.80551.stgit@gandelf.nowhere.earth>

```
On 26/02/07, Yann Dirson <ydirson@altern.org> wrote:
> At the same time we trap the editor error for all editor calls, not
> just when called from "stg mail".

I merged this patch. In the initial StGIT versions, someone complained
that an editor (ed) returning a non-zero code is not actually an error
and shouldn't raise an exception. If anyone complains about this in
the future (that person is no longer using StGIT :-)), we could add a
config option to not raise the exception (though with some problems
for them).

> We may want to define a new exception for this though.

I added an EditorException since it needs to cought in main.py to
avoid a stack dump.

-- 
Catalin

```
