From: Pavel Roskin <proski@gnu.org>
To: Catalin Marinas <catalin.marinas@gmail.com>
Cc: git@vger.kernel.org
Subject: AssertionError in "stg uncommit" when going too far back
Date: Wed, 05 Mar 2008 16:47:02 -0500 [thread overview]
Message-ID: <1204753622.17845.16.camel@dv> (raw)
Hello!
"stg uncommit" causes AssertionError if the number commits to uncommit it too large:
$ stg uncommit -n 10000
Uncommitting 10000 patches ... 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/uncommit.py", line 94, in func
File "home/proski/lib/python2.5/site-packages/stgit/lib/git.py", line 171, in parent
AssertionError
Perhaps parent() should raise an exception that uncommit would
intercept? Sorry, my Python is not so good to make a correct fix.
Here's a prototype patch that still doesn't terminate gracefully:
AttributeError: 'module' object has no attribute 'NoParentException'
diff --git a/stgit/commands/uncommit.py b/stgit/commands/uncommit.py
index 933ec60..87dab77 100644
--- a/stgit/commands/uncommit.py
+++ b/stgit/commands/uncommit.py
@@ -21,7 +21,7 @@ from optparse import make_option
from stgit.commands import common
from stgit.lib import transaction
from stgit.out import *
-from stgit import utils
+from stgit import utils, git
help = 'turn regular GIT commits into StGIT patches'
usage = """%prog [<patchnames>] | -n NUM [<prefix>]] | -t <committish> [-x]
@@ -89,9 +89,12 @@ def func(parser, options, args):
next_commit = stack.base
if patch_nr:
out.start('Uncommitting %d patches' % patch_nr)
- for i in xrange(patch_nr):
- commits.append(next_commit)
- next_commit = next_commit.data.parent
+ try:
+ for i in xrange(patch_nr):
+ commits.append(next_commit)
+ next_commit = next_commit.data.parent
+ except git.NoParentException:
+ raise common.CmdException('Cannot go beyond initial commit')
else:
if options.exclusive:
out.start('Uncommitting to %s (exclusive)' % to_commit)
diff --git a/stgit/lib/git.py b/stgit/lib/git.py
index 50dc4f1..d8d339c 100644
--- a/stgit/lib/git.py
+++ b/stgit/lib/git.py
@@ -16,6 +16,9 @@ class DetachedHeadException(RepositoryException):
def __init__(self):
RepositoryException.__init__(self, 'Not on any branch')
+class NoParentException(exception.StgException):
+ pass
+
class Repr(object):
def __repr__(self):
return str(self)
@@ -168,7 +171,8 @@ class Commitdata(Repr):
parents = property(lambda self: self.__parents)
@property
def parent(self):
- assert len(self.__parents) == 1
+ if len(self.__parents) != 1:
+ raise NoParentException
return self.__parents[0]
author = property(lambda self: self.__author)
committer = property(lambda self: self.__committer)
--
Regards,
Pavel Roskin
next reply other threads:[~2008-03-05 21:47 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-05 21:47 Pavel Roskin [this message]
2008-03-08 12:19 ` AssertionError in "stg uncommit" when going too far back Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1204753622.17845.16.camel@dv \
--to=proski@gnu.org \
--cc=catalin.marinas@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.