Subject: [StGit PATCH 5/6] Don't have a global crt_series in stgit.commans.common

From: Karl Hasselström <[email-masked]>
Date: Mon, 08 Oct 2007 10:55:35 +0200

Global variables baaad. Instead, pass it as a parameter to the
functions that need it.

Signed-off-by: Karl Hasselström <[email-masked]>

---

 stgit/commands/branch.py   |    8 ++++----
 stgit/commands/clean.py    |    4 ++--
 stgit/commands/commit.py   |    2 +-
 stgit/commands/common.py   |   22 ++++++++++------------
 stgit/commands/delete.py   |    4 ++--
 stgit/commands/diff.py     |    7 ++++---
 stgit/commands/edit.py     |    6 +++---
 stgit/commands/files.py    |    4 ++--
 stgit/commands/float.py    |    6 +++---
 stgit/commands/fold.py     |    5 +++--
 stgit/commands/goto.py     |    8 ++++----
 stgit/commands/id.py       |    2 +-
 stgit/commands/imprt.py    |    7 ++++---
 stgit/commands/mail.py     |   16 +++++++++-------
 stgit/commands/new.py      |    2 +-
 stgit/commands/pick.py     |   12 ++++++------
 stgit/commands/pop.py      |    8 ++++----
 stgit/commands/pull.py     |   14 +++++++-------
 stgit/commands/push.py     |    8 ++++----
 stgit/commands/rebase.py   |   12 ++++++------
 stgit/commands/refresh.py  |   10 +++++-----
 stgit/commands/series.py   |    5 +++--
 stgit/commands/show.py     |    2 +-
 stgit/commands/sink.py     |    6 +++---
 stgit/commands/sync.py     |    8 ++++----
 stgit/commands/uncommit.py |    2 +-
 stgit/main.py              |    1 -
 27 files changed, 97 insertions(+), 94 deletions(-)

diff --git a/stgit/commands/branch.py b/stgit/commands/branch.py
index 6e0a6d8..cbb97f6 100644
--- a/stgit/commands/branch.py
+++ b/stgit/commands/branch.py
@@ -112,7 +112,7 @@ def func(parser, options, args):
 
         check_local_changes()
         check_conflicts()
-        check_head_top_equal()
+        check_head_top_equal(crt_series)
 
         tree_id = None
         if len(args) >= 2:
@@ -141,7 +141,7 @@ def func(parser, options, args):
                 # exception in branch = rev_parse() leaves branchpoint unbound
                 branchpoint = None
 
-            tree_id = branchpoint or git_id(args[1])
+            tree_id = branchpoint or git_id(crt_series, args[1])
 
             if parentbranch:
                 out.info('Recording "%s" as parent branch' % parentbranch)
@@ -182,7 +182,7 @@ def func(parser, options, args):
 
         check_local_changes()
         check_conflicts()
-        check_head_top_equal()
+        check_head_top_equal(crt_series)
 
         out.start('Cloning current branch to "%s"' % clone)
         crt_series.clone(clone)
@@ -294,7 +294,7 @@ def func(parser, options, args):
 
         check_local_changes()
         check_conflicts()
-        check_head_top_equal()
+        check_head_top_equal(crt_series)
 
         out.start('Switching to branch "%s"' % args[0])
         git.switch_branch(args[0])
diff --git a/stgit/commands/clean.py b/stgit/commands/clean.py
index d8bbe71..4484ecd 100644
--- a/stgit/commands/clean.py
+++ b/stgit/commands/clean.py
@@ -61,7 +61,7 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if not (options.applied or options.unapplied):
         options.applied = options.unapplied = True
@@ -74,4 +74,4 @@ def func(parser, options, args):
         unapplied = crt_series.get_unapplied()
         __delete_empty(unapplied, False)
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/commit.py b/stgit/commands/commit.py
index 2b45c0d..23b4dc1 100644
--- a/stgit/commands/commit.py
+++ b/stgit/commands/commit.py
@@ -45,7 +45,7 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     applied = crt_series.get_applied()
     if not applied:
diff --git a/stgit/commands/common.py b/stgit/commands/common.py
index 652039f..2a80e8c 100644
--- a/stgit/commands/common.py
+++ b/stgit/commands/common.py
@@ -28,8 +28,6 @@ from stgit.run import *
 from stgit import stack, git, basedir
 from stgit.config import config, file_extensions
 
-crt_series = None
-
 
 # Command exception class
 class CmdException(StgException):
@@ -74,7 +72,7 @@ def parse_rev(rev):
     # No, we can't parse that.
     raise RevParseException
 
-def git_id(rev):
+def git_id(crt_series, rev):
     """Return the GIT id
     """
     if not rev:
@@ -112,7 +110,7 @@ def check_local_changes():
         raise CmdException, \
               'local changes in the tree. Use "refresh" or "status --reset"'
 
-def check_head_top_equal():
+def check_head_top_equal(crt_series):
     if not crt_series.head_top_equal():
         raise CmdException(
 """HEAD and top are not the same. This can happen if you
@@ -125,7 +123,7 @@ def check_conflicts():
               'Unsolved conflicts. Please resolve them first or\n' \
               '  revert the changes with "status --reset"'
 
-def print_crt_patch(branch = None):
+def print_crt_patch(crt_series, branch = None):
     if not branch:
         patch = crt_series.get_current()
     else:
@@ -158,7 +156,7 @@ def resolved_all(reset = None):
             resolved(filename, reset)
         os.remove(os.path.join(basedir.get(), 'conflicts'))
 
-def push_patches(patches, check_merged = False):
+def push_patches(crt_series, patches, check_merged = False):
     """Push multiple patches onto the stack. This function is shared
     between the push and pull commands
     """
@@ -197,7 +195,7 @@ def push_patches(patches, check_merged = False):
             else:
                 out.done()
 
-def pop_patches(patches, keep = False):
+def pop_patches(crt_series, patches, keep = False):
     """Pop the patches in the list from the stack. It is assumed that
     the patches are listed in the stack reverse order.
     """
@@ -319,7 +317,7 @@ def address_or_alias(addr_str):
                  for addr in addr_str.split(',')]
     return ', '.join([addr for addr in addr_list if addr])
 
-def prepare_rebase():
+def prepare_rebase(crt_series):
     # pop all patches
     applied = crt_series.get_applied()
     if len(applied) > 0:
@@ -328,9 +326,9 @@ def prepare_rebase():
         out.done()
     return applied
 
-def rebase(target):
+def rebase(crt_series, target):
     try:
-        tree_id = git_id(target)
+        tree_id = git_id(crt_series, target)
     except:
         # it might be that we use a custom rebase command with its own
         # target type
@@ -345,12 +343,12 @@ def rebase(target):
     git.rebase(tree_id = tree_id)
     out.done()
 
-def post_rebase(applied, nopush, merged):
+def post_rebase(crt_series, applied, nopush, merged):
     # memorize that we rebased to here
     crt_series._set_field('orig-base', git.get_head())
     # push the patches back
     if not nopush:
-        push_patches(applied, merged)
+        push_patches(crt_series, applied, merged)
 
 #
 # Patch description/e-mail/diff parsing
diff --git a/stgit/commands/delete.py b/stgit/commands/delete.py
index 8462857..fdb254e 100644
--- a/stgit/commands/delete.py
+++ b/stgit/commands/delete.py
@@ -71,7 +71,7 @@ def func(parser, options, args):
     if applied and not options.branch:
         check_local_changes()
         check_conflicts()
-        check_head_top_equal()
+        check_head_top_equal(crt_series)
 
     # delete the patches
     for patch in applied + patches:
@@ -79,4 +79,4 @@ def func(parser, options, args):
         out.info('Patch "%s" successfully deleted' % patch)
 
     if not options.branch:
-        print_crt_patch()
+        print_crt_patch(crt_series)
diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py
index f3b0ea2..42e8367 100644
--- a/stgit/commands/diff.py
+++ b/stgit/commands/diff.py
@@ -86,9 +86,10 @@ def func(parser, options, args):
         diff_flags = []
 
     if options.stat:
-        out.stdout_raw(git.diffstat(args, git_id(rev1), git_id(rev2)) + '\n')
+        out.stdout_raw(git.diffstat(args, git_id(crt_series, rev1),
+                                    git_id(crt_series, rev2)) + '\n')
     else:
-        diff_str = git.diff(args, git_id(rev1), git_id(rev2),
-                            diff_flags = diff_flags )
+        diff_str = git.diff(args, git_id(crt_series, rev1),
+                            git_id(crt_series, rev2), diff_flags = diff_flags )
         if diff_str:
             pager(diff_str)
diff --git a/stgit/commands/edit.py b/stgit/commands/edit.py
index 02970bc..89d534a 100644
--- a/stgit/commands/edit.py
+++ b/stgit/commands/edit.py
@@ -203,13 +203,13 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if pname != crt_pname:
         # Go to the patch to be edited
         applied = crt_series.get_applied()
         between = applied[:applied.index(pname):-1]
-        pop_patches(between)
+        pop_patches(crt_series, between)
 
     if options.author:
         options.authname, options.authemail = name_email(options.author)
@@ -241,4 +241,4 @@ def func(parser, options, args):
     if pname != crt_pname:
         # Push the patches back
         between.reverse()
-        push_patches(between)
+        push_patches(crt_series, between)
diff --git a/stgit/commands/files.py b/stgit/commands/files.py
index 07cc955..4550251 100644
--- a/stgit/commands/files.py
+++ b/stgit/commands/files.py
@@ -57,8 +57,8 @@ def func(parser, options, args):
     else:
         parser.error('incorrect number of arguments')
 
-    rev1 = git_id('%s//bottom' % patch)
-    rev2 = git_id('%s//top' % patch)
+    rev1 = git_id(crt_series, '%s//bottom' % patch)
+    rev2 = git_id(crt_series, '%s//top' % patch)
 
     if options.stat:
         out.stdout_raw(git.diffstat(rev1 = rev1, rev2 = rev2) + '\n')
diff --git a/stgit/commands/float.py b/stgit/commands/float.py
index d5299fb..6c07136 100644
--- a/stgit/commands/float.py
+++ b/stgit/commands/float.py
@@ -46,7 +46,7 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     unapplied = crt_series.get_unapplied()
     applied = crt_series.get_applied()
@@ -85,7 +85,7 @@ def func(parser, options, args):
     # check whether the operation is really needed
     if topop != topush:
         if topop:
-            pop_patches(topop)
+            pop_patches(crt_series, topop)
         if topush:
             topush.reverse()
-            push_patches(topush)
+            push_patches(crt_series, topush)
diff --git a/stgit/commands/fold.py b/stgit/commands/fold.py
index 6e43101..3930a1f 100644
--- a/stgit/commands/fold.py
+++ b/stgit/commands/fold.py
@@ -50,7 +50,7 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if len(args) == 1:
         filename = args[0]
@@ -74,7 +74,8 @@ def func(parser, options, args):
         bottom = crt_patch.get_bottom()
         git.apply_patch(filename = filename, base = bottom)
     elif options.base:
-        git.apply_patch(filename = filename, base = git_id(options.base))
+        git.apply_patch(filename = filename,
+                        base = git_id(crt_series, options.base))
     else:
         git.apply_patch(filename = filename)
 
diff --git a/stgit/commands/goto.py b/stgit/commands/goto.py
index 9e008a9..e7aa588 100644
--- a/stgit/commands/goto.py
+++ b/stgit/commands/goto.py
@@ -44,7 +44,7 @@ def func(parser, options, args):
         parser.error('incorrect number of arguments')
 
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if not options.keep:
         check_local_changes()
@@ -56,13 +56,13 @@ def func(parser, options, args):
     if patch in applied:
         applied.reverse()
         patches = applied[:applied.index(patch)]
-        pop_patches(patches, options.keep)
+        pop_patches(crt_series, patches, options.keep)
     elif patch in unapplied:
         if options.keep:
             raise CmdException, 'Cannot use --keep with patch pushing'
         patches = unapplied[:unapplied.index(patch)+1]
-        push_patches(patches)
+        push_patches(crt_series, patches)
     else:
         raise CmdException, 'Patch "%s" does not exist' % patch
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/id.py b/stgit/commands/id.py
index 3e28f2f..94b0229 100644
--- a/stgit/commands/id.py
+++ b/stgit/commands/id.py
@@ -48,4 +48,4 @@ def func(parser, options, args):
     else:
         parser.error('incorrect number of arguments')
 
-    out.stdout(git_id(id_str))
+    out.stdout(git_id(crt_series, id_str))
diff --git a/stgit/commands/imprt.py b/stgit/commands/imprt.py
index 045f185..d6e950c 100644
--- a/stgit/commands/imprt.py
+++ b/stgit/commands/imprt.py
@@ -165,7 +165,8 @@ def __create_patch(filename, message, author_name, author_email,
     else:
         out.start('Importing patch "%s"' % patch)
         if options.base:
-            git.apply_patch(diff = diff, base = git_id(options.base))
+            git.apply_patch(diff = diff,
+                            base = git_id(crt_series, options.base))
         else:
             git.apply_patch(diff = diff)
         crt_series.refresh_patch(edit = options.edit,
@@ -270,7 +271,7 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if len(args) == 1:
         filename = args[0]
@@ -286,4 +287,4 @@ def func(parser, options, args):
     else:
         __import_file(filename, options)
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py
index 4a4158a..883a4f3 100644
--- a/stgit/commands/mail.py
+++ b/stgit/commands/mail.py
@@ -350,8 +350,8 @@ def __build_cover(tmpl, patches, msg_id, options):
                  'shortlog':     stack.shortlog(crt_series.get_patch(p)
                                                 for p in patches),
                  'diffstat':     git.diffstat(
-                                     rev1 = git_id('%s//bottom' % patches[0]),
-                                     rev2 = git_id('%s//top' % patches[-1]))}
+                     rev1 = git_id(crt_series, '%s//bottom' % patches[0]),
+                     rev2 = git_id(crt_series, '%s//top' % patches[-1]))}
 
     try:
         msg_string = tmpl % tmpl_dict
@@ -435,11 +435,13 @@ def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
                  'longdescr':    long_descr,
                  # for backward template compatibility
                  'endofheaders': '',
-                 'diff':         git.diff(rev1 = git_id('%s//bottom' % patch),
-                                          rev2 = git_id('%s//top' % patch),
-                                          diff_flags = diff_flags ),
-                 'diffstat':     git.diffstat(rev1 = git_id('%s//bottom'%patch),
-                                              rev2 = git_id('%s//top' % patch)),
+                 'diff':         git.diff(
+                     rev1 = git_id(crt_series, '%s//bottom' % patch),
+                     rev2 = git_id(crt_series, '%s//top' % patch),
+                     diff_flags = diff_flags),
+                 'diffstat':     git.diffstat(
+                     rev1 = git_id(crt_series, '%s//bottom'%patch),
+                     rev2 = git_id(crt_series, '%s//top' % patch)),
                  # for backward template compatibility
                  'date':         '',
                  'version':      version_str,
diff --git a/stgit/commands/new.py b/stgit/commands/new.py
index ccc8141..b0a57d1 100644
--- a/stgit/commands/new.py
+++ b/stgit/commands/new.py
@@ -70,7 +70,7 @@ def func(parser, options, args):
         parser.error('incorrect number of arguments')
 
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if options.author:
         options.authname, options.authemail = name_email(options.author)
diff --git a/stgit/commands/pick.py b/stgit/commands/pick.py
index 3acec32..1fcc2e2 100644
--- a/stgit/commands/pick.py
+++ b/stgit/commands/pick.py
@@ -65,10 +65,10 @@ def func(parser, options, args):
     if not options.unapplied:
         check_local_changes()
         check_conflicts()
-        check_head_top_equal()
+        check_head_top_equal(crt_series)
 
     commit_str = args[0]
-    commit_id = git_id(commit_str)
+    commit_id = git_id(crt_series, commit_str)
     commit = git.Commit(commit_id)
 
     if options.fold or options.update:
@@ -84,7 +84,7 @@ def func(parser, options, args):
             patchname = None
 
     if options.parent:
-        parent = git_id(options.parent)
+        parent = git_id(crt_series, options.parent)
     else:
         parent = commit.get_parent()
 
@@ -104,8 +104,8 @@ def func(parser, options, args):
 
         out.done()
     elif options.update:
-        rev1 = git_id('//bottom')
-        rev2 = git_id('//top')
+        rev1 = git_id(crt_series, '//bottom')
+        rev2 = git_id(crt_series, '//top')
         files = git.barefiles(rev1, rev2).split('\n')
 
         out.start('Updating with commit %s' % commit_id)
@@ -163,4 +163,4 @@ def func(parser, options, args):
         else:
             out.done()
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/pop.py b/stgit/commands/pop.py
index a1d73e4..246cc34 100644
--- a/stgit/commands/pop.py
+++ b/stgit/commands/pop.py
@@ -51,7 +51,7 @@ def func(parser, options, args):
     """Pop the topmost patch from the stack
     """
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if not options.keep:
         check_local_changes()
@@ -83,8 +83,8 @@ def func(parser, options, args):
         raise CmdException, 'Cannot pop arbitrary patches with --keep'
 
     topop.reverse()
-    pop_patches(topop, options.keep)
+    pop_patches(crt_series, topop, options.keep)
     if topush:
-        push_patches(topush)
+        push_patches(crt_series, topush)
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/pull.py b/stgit/commands/pull.py
index 5fcf2cc..e5ee17d 100644
--- a/stgit/commands/pull.py
+++ b/stgit/commands/pull.py
@@ -74,12 +74,12 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     if policy not in ['pull', 'fetch-rebase', 'rebase']:
         raise GitConfigException, 'Unsupported pull-policy "%s"' % policy
 
-    applied = prepare_rebase()
+    applied = prepare_rebase(crt_series)
 
     # pull the remote changes
     if policy == 'pull':
@@ -92,17 +92,17 @@ def func(parser, options, args):
             target = git.fetch_head()
         except git.GitException:
             out.error('Could not find the remote head to rebase onto, pushing any patches back...')
-            post_rebase(applied, False, False)
+            post_rebase(crt_series, applied, False, False)
             raise CmdException, 'Could not find the remote head to rebase onto - fix branch.%s.merge in .git/config' % crt_series.get_name()
 
-        rebase(target)
+        rebase(crt_series, target)
     elif policy == 'rebase':
-        rebase(crt_series.get_parent_branch())
+        rebase(crt_series, crt_series.get_parent_branch())
 
-    post_rebase(applied, options.nopush, options.merged)
+    post_rebase(crt_series, applied, options.nopush, options.merged)
 
     # maybe tidy up
     if config.get('stgit.keepoptimized') == 'yes':
         git.repack()
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/push.py b/stgit/commands/push.py
index 4d5de26..979835b 100644
--- a/stgit/commands/push.py
+++ b/stgit/commands/push.py
@@ -72,13 +72,13 @@ def func(parser, options, args):
             out.done()
         else:
             out.done('patch unchanged')
-        print_crt_patch()
+        print_crt_patch(crt_series)
 
         return
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     unapplied = crt_series.get_unapplied()
     if not unapplied:
@@ -99,6 +99,6 @@ def func(parser, options, args):
     if options.reverse:
         patches.reverse()
 
-    push_patches(patches, options.merged)
+    push_patches(crt_series, patches, options.merged)
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/rebase.py b/stgit/commands/rebase.py
index bbb3e12..c4d74b7 100644
--- a/stgit/commands/rebase.py
+++ b/stgit/commands/rebase.py
@@ -48,14 +48,14 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     # ensure an exception is raised before popping on non-existent target
-    if git_id(args[0]) == None:
+    if git_id(crt_series, args[0]) == None:
         raise GitException, 'Unknown revision: %s' % args[0]
         
-    applied = prepare_rebase()
-    rebase(args[0])
-    post_rebase(applied, options.nopush, options.merged)
+    applied = prepare_rebase(crt_series)
+    rebase(crt_series, args[0])
+    post_rebase(crt_series, applied, options.nopush, options.merged)
 
-    print_crt_patch()
+    print_crt_patch(crt_series)
diff --git a/stgit/commands/refresh.py b/stgit/commands/refresh.py
index f032375..7cde392 100644
--- a/stgit/commands/refresh.py
+++ b/stgit/commands/refresh.py
@@ -73,7 +73,7 @@ def func(parser, options, args):
             raise CmdException, 'No patches applied'
 
     if not options.force:
-        check_head_top_equal()
+        check_head_top_equal(crt_series)
 
     if options.undo:
         out.start('Undoing the refresh of "%s"' % patch)
@@ -89,10 +89,10 @@ def func(parser, options, args):
         if options.patch:
             applied = crt_series.get_applied()
             between = applied[:applied.index(patch):-1]
-            pop_patches(between, keep = True)
+            pop_patches(crt_series, between, keep = True)
         elif options.update:
-            rev1 = git_id('//bottom')
-            rev2 = git_id('//top')
+            rev1 = git_id(crt_series, '//bottom')
+            rev2 = git_id(crt_series, '//top')
             patch_files = git.barefiles(rev1, rev2).split('\n')
             files = [f for f in files if f in patch_files]
             if not files:
@@ -113,7 +113,7 @@ def func(parser, options, args):
 
         if options.patch:
             between.reverse()
-            push_patches(between)
+            push_patches(crt_series, between)
     elif options.annotate:
         # only annotate the top log entry as there is no need to
         # refresh the patch and generate a full commit
diff --git a/stgit/commands/series.py b/stgit/commands/series.py
index 2c75876..4c6d07e 100644
--- a/stgit/commands/series.py
+++ b/stgit/commands/series.py
@@ -195,12 +195,13 @@ def func(parser, options, args):
             raise CmdException, '--graphical not supported with --missing'
 
         if applied:
-            gitk_args = ' %s^..%s' % (git_id(applied[0]), git_id(applied[-1]))
+            gitk_args = ' %s^..%s' % (git_id(crt_series, applied[0]),
+                                      git_id(crt_series, applied[-1]))
         else:
             gitk_args = ''
 
         for p in unapplied:
-            patch_id = git_id(p)
+            patch_id = git_id(crt_series, p)
             gitk_args += ' %s^..%s' % (patch_id, patch_id)
 
         if os.system('gitk%s' % gitk_args) != 0:
diff --git a/stgit/commands/show.py b/stgit/commands/show.py
index 7efb4e1..e4e70a5 100644
--- a/stgit/commands/show.py
+++ b/stgit/commands/show.py
@@ -69,7 +69,7 @@ def func(parser, options, args):
     else:
         diff_flags = []
 
-    commit_ids = [git_id(patch) for patch in patches]
+    commit_ids = [git_id(crt_series, patch) for patch in patches]
     commit_str = '\n'.join([git.pretty_commit(commit_id, diff_flags=diff_flags)
                             for commit_id in commit_ids])
     if commit_str:
diff --git a/stgit/commands/sink.py b/stgit/commands/sink.py
index 737dde0..b177337 100644
--- a/stgit/commands/sink.py
+++ b/stgit/commands/sink.py
@@ -45,7 +45,7 @@ def func(parser, options, args):
 
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
     oldapplied = crt_series.get_applied()
     unapplied = crt_series.get_unapplied()
@@ -61,10 +61,10 @@ def func(parser, options, args):
         patches = [ crt_series.get_current() ]
 
     crt_series.pop_patch(options.to or oldapplied[0])
-    push_patches(patches)
+    push_patches(crt_series, patches)
 
     if not options.nopush:
         newapplied = crt_series.get_applied()
         def not_reapplied_yet(p):
             return not p in newapplied
-        push_patches(filter(not_reapplied_yet, oldapplied))
+        push_patches(crt_series, filter(not_reapplied_yet, oldapplied))
diff --git a/stgit/commands/sync.py b/stgit/commands/sync.py
index 8a31c29..6066f82 100644
--- a/stgit/commands/sync.py
+++ b/stgit/commands/sync.py
@@ -51,7 +51,7 @@ options = [make_option('-a', '--all',
 def __check_all():
     check_local_changes()
     check_conflicts()
-    check_head_top_equal()
+    check_head_top_equal(crt_series)
 
 def __branch_merge_patch(remote_series, pname):
     """Merge a patch from a remote branch into the current tree.
@@ -131,13 +131,13 @@ def func(parser, options, args):
     # pop to the one before the first patch to be synchronised
     popped = applied[applied.index(sync_patches[0]) + 1:]
     if popped:
-        pop_patches(popped[::-1])
+        pop_patches(crt_series, popped[::-1])
 
     for p in sync_patches:
         if p in popped:
             # push to this patch
             idx = popped.index(p) + 1
-            push_patches(popped[:idx])
+            push_patches(crt_series, popped[:idx])
             del popped[:idx]
 
         # the actual sync
@@ -166,4 +166,4 @@ def func(parser, options, args):
 
     # push the remaining patches
     if popped:
-        push_patches(popped)
+        push_patches(crt_series, popped)
diff --git a/stgit/commands/uncommit.py b/stgit/commands/uncommit.py
index a23ae20..8e62d23 100644
--- a/stgit/commands/uncommit.py
+++ b/stgit/commands/uncommit.py
@@ -66,7 +66,7 @@ def func(parser, options, args):
         if len(args) != 0:
             parser.error('cannot specify patch name with --to')
         patch_nr = patchnames = None
-        to_commit = git_id(options.to)
+        to_commit = git_id(crt_series, options.to)
     elif options.number:
         if options.number <= 0:
             parser.error('invalid value passed to --number')
diff --git a/stgit/main.py b/stgit/main.py
index db327f1..e8242c2 100644
--- a/stgit/main.py
+++ b/stgit/main.py
@@ -277,7 +277,6 @@ def main():
                 command.crt_series = Series(options.branch)
             else:
                 command.crt_series = Series()
-            stgit.commands.common.crt_series = command.crt_series
 
         command.func(parser, options, args)
     except (StgException, IOError, ParsingError, NoSectionError), err: