threads / discuss / 11560

Signing by StGIT broken

Subject: Signing by StGIT broken

## tl;dr

4 messages between Jan 10, 2008 and Jan 18, 2008.

replies: 3people: 2as markdown or json

Pavel Roskin· Jan 10, 2008, 02:53 UTC · lore
Hello!

"stg edit --sign" is not working anymore. It was working in version 0.14.

$ stg edit --sign
Checking for changes in the working directory ... done
Updating patch "id123" ... Traceback (most recent call last):
  File "/home/proski/bin/stg", line 43, in <module>
    main()
  File "home/proski/lib/python2.5/site-packages/stgit/main.py", line 278, in main
  File "home/proski/lib/python2.5/site-packages/stgit/commands/edit.py", line 235, in func
  File "home/proski/lib/python2.5/site-packages/stgit/commands/edit.py", line 93, in __update_patch
  File "home/proski/lib/python2.5/site-packages/stgit/commands/common.py", line 469, in parse_patch
  File "home/proski/lib/python2.5/site-packages/stgit/commands/common.py", line 359, in __split_descr_diff
AttributeError: 'NoneType' object has no attribute 'split'
git-bisect reports this:
a08e424021d32bf93ee7bb13ed0a9d7313367660 is first bad commit
commit a08e424021d32bf93ee7bb13ed0a9d7313367660
Author: Karl Hasselström <kha@treskal.com>
Date:   Thu Dec 13 00:13:55 2007 +0100
    Make generic --message/--file/--save-template flags
    
    And let "stg edit" use them.
    
    Signed-off-by: Karl Hasselström <kha@treskal.com>
:040000 040000 0c9317423123d328e8bf03866c08fa458808dce4 9195692410c3ed8171f2f799a8e3efd101a89a14 M      stgit
I suspect this part:
- elif options.file:
- __update_patch(pname, options.file, options)
+ elif any([options.message, options.authname, options.authemail,
+ options.authdate, options.commname, options.commemail,
+ options.sign_str]):
+ out.start('Updating patch "%s"' % pname)
+ __update_patch(pname, options.message, options)
+ out.done()

options.message is passed even if it's None and something else (like options.sign_str) is defined.

-- 
Regards,
Pavel Roskin
Karl Hasselström· Jan 10, 2008, 07:42 UTC · re: Pavel Roskin · lore

Re: Signing by StGIT broken

On 2008-01-09 21:53:16 -0500, Pavel Roskin wrote:
> "stg edit --sign" is not working anymore. It was working in version
> 0.14.

Thanks for the report and the detailed analysis. I'll write a test and fix it (but not quite immediately, so feel free to beat me to it).

-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle
Pavel Roskin· Jan 12, 2008, 04:58 UTC · re: Karl Hasselström · lore

Re: Signing by StGIT broken

On Thu, 2008-01-10 at 08:42 +0100, Karl Hasselström wrote:
Show 7 quoted lines
> On 2008-01-09 21:53:16 -0500, Pavel Roskin wrote:
> 
> > "stg edit --sign" is not working anymore. It was working in version
> > 0.14.
> 
> Thanks for the report and the detailed analysis. I'll write a test and
> fix it (but not quite immediately, so feel free to beat me to it).

The fix below appears to work (thus making it a self-signing patch :)) but with my modest Python experience it absolutely needs to be reviewed. I don't even know how to wrap the long line without making it look misleading.

No testsuite fixes, sorry.  But the existing testsuite passes.
Fix "stg edit --sign"
Signed-off-by: Pavel Roskin <proski@gnu.org>
---
 stgit/commands/edit.py |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/stgit/commands/edit.py b/stgit/commands/edit.py
index b9699d5..650d5a3 100644
--- a/stgit/commands/edit.py
+++ b/stgit/commands/edit.py
@@ -90,7 +90,10 @@ def __update_patch(pname, text, options):
     bottom = patch.get_bottom()
     top = patch.get_top()
 
-    message, author_name, author_email, author_date, diff = parse_patch(text)
+    if text:
+        message, author_name, author_email, author_date, diff = parse_patch(text)
+    else:
+        message = author_name = author_email = author_date = diff = None
 
     out.start('Updating patch "%s"' % pname)
 
-- 
Regards,
Pavel Roskin
Karl Hasselström· Jan 18, 2008, 03:51 UTC · re: Pavel Roskin · lore

Re: Signing by StGIT broken

On 2008-01-11 23:58:03 -0500, Pavel Roskin wrote:
Show 15 quoted lines
> On Thu, 2008-01-10 at 08:42 +0100, Karl Hasselström wrote:
>
> > On 2008-01-09 21:53:16 -0500, Pavel Roskin wrote:
> >
> > > "stg edit --sign" is not working anymore. It was working in version
> > > 0.14.
> >
> > Thanks for the report and the detailed analysis. I'll write a test
> > and fix it (but not quite immediately, so feel free to beat me to
> > it).
>
> The fix below appears to work (thus making it a self-signing patch
> :)) but with my modest Python experience it absolutely needs to be
> reviewed. I don't even know how to wrap the long line without making
> it look misleading.

It works by virtue of avoiding passing None to parse_patch(), which expects a string object. So the fix is correct.

There are two ways to do line breaking in Python:
  1. Break the line between a pair of parentheses. That way, the
     parser knows that the line can't possibly end here:
       foo(1, 2, 3,
           4, 5, 6)
       x = { 'foo': 5,
             'bar': 17 }
  2. As a last resort, you can end a line with backslash:
       x = 1 + 2 + 3 \
           + 4 + 5 + 6
     But you should never use this. Insert a pair of otherwise
     redundant parentheses instead:
       x = (1 + 2 + 3
            + 4 + 5 + 6)
-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle

← back to recent threads