git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[StGit PATCH] Convert "push" to the lib infrastructure

From
CMCatalin Marinas <catalin.marinas@arm.com>
Date
Mar 31, 2009, 11:30 UTC
Message-ID
<20090331113033.2524.27502.stgit@pc1117.cambridge.arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
---
 stgit/commands/push.py   |   68 ++++++++++++++++++++++++----------------------
 t/t0002-status.sh        |    2 +
 t/t1200-push-modified.sh |    2 +
 t/t1202-push-undo.sh     |    4 +--
 t/t1203-push-conflict.sh |    2 +
 t/t1205-push-subdir.sh   |    2 +
 t/t2500-clean.sh         |    2 +
 7 files changed, 43 insertions(+), 39 deletions(-)
diff --git a/stgit/commands/push.py b/stgit/commands/push.py
index 818e02d..0d25a65 100644
--- a/stgit/commands/push.py
+++ b/stgit/commands/push.py
@@ -16,12 +16,10 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 """
 
-import sys, os
+from stgit.commands import common
+from stgit.lib import transaction
+from stgit import argparse
 from stgit.argparse import opt
-from stgit.commands.common import *
-from stgit.utils import *
-from stgit.out import *
-from stgit import argparse, stack, git
 
 help = 'Push one or more patches onto the stack'
 kind = 'stack'
@@ -45,39 +43,45 @@ options = [
     opt('-n', '--number', type = 'int',
         short = 'Push the specified number of patches'),
     opt('--reverse', action = 'store_true',
-        short = 'Push the patches in reverse order'),
-    opt('-m', '--merged', action = 'store_true',
-        short = 'Check for patches merged upstream')]
+        short = 'Push the patches in reverse order')
+    ] + argparse.keep_option() + argparse.merged_option()
 
-directory = DirectoryGotoToplevel(log = True)
+directory = common.DirectoryHasRepositoryLib()
 
 def func(parser, options, args):
-    """Pushes the given patch or all onto the series
-    """
-
-    check_local_changes()
-    check_conflicts()
-    check_head_top_equal(crt_series)
-
-    unapplied = crt_series.get_unapplied()
-    if not unapplied:
-        raise CmdException, 'No more patches to push'
-
-    if options.number:
-        patches = unapplied[:options.number]
-    elif options.all:
-        patches = unapplied
-    elif len(args) == 0:
-        patches = [unapplied[0]]
+    """Pushes the given patches or the first unapplied onto the stack."""
+    stack = directory.repository.current_stack
+    iw = stack.repository.default_iw
+    clean_iw = (not options.keep and iw) or None
+    trans = transaction.StackTransaction(stack, 'pop',
+                                         check_clean_iw = clean_iw)
+
+    if not trans.unapplied:
+        raise common.CmdException('No patches to push')
+
+    if options.all:
+        patches = list(trans.unapplied)
+    elif options.number:
+        patches = trans.unapplied[:options.number]
+    elif not args:
+        patches = [trans.unapplied[0]]
     else:
-        patches = parse_patches(args, unapplied)
+        patches = common.parse_patches(args, trans.unapplied)
 
-    if patches == []:
-        raise CmdException, 'No patches to push'
+    if not patches:
+        raise common.CmdException('No patches to push')
 
     if options.reverse:
         patches.reverse()
 
-    push_patches(crt_series, patches, options.merged)
-
-    print_crt_patch(crt_series)
+    try:
+        if options.merged:
+            merged = set(trans.check_merged(patches))
+        else:
+            merged = set()
+        for pn in patches:
+            trans.push_patch(pn, iw, allow_interactive = True,
+                             already_merged = pn in merged)
+    except transaction.TransactionHalted:
+        pass
+    return trans.run(iw)
diff --git a/t/t0002-status.sh b/t/t0002-status.sh
index d95a83b..ffcad77 100755
--- a/t/t0002-status.sh
+++ b/t/t0002-status.sh
@@ -111,7 +111,7 @@ A fie
 C foo/bar
 EOF
 test_expect_success 'Status after conflicting push' '
-    conflict_old stg push &&
+    conflict stg push &&
     stg status > output.txt &&
     test_cmp expected.txt output.txt
 '
diff --git a/t/t1200-push-modified.sh b/t/t1200-push-modified.sh
index a591124..2077492 100755
--- a/t/t1200-push-modified.sh
+++ b/t/t1200-push-modified.sh
@@ -49,7 +49,7 @@ test_expect_success \
 
 test_expect_success \
     'Attempt to push the first of those patches without --merged' \
-    "(cd bar && conflict_old stg push
+    "(cd bar && conflict stg push
      )
 "
 
diff --git a/t/t1202-push-undo.sh b/t/t1202-push-undo.sh
index 79439de..14a3d6d 100755
--- a/t/t1202-push-undo.sh
+++ b/t/t1202-push-undo.sh
@@ -43,7 +43,7 @@ test_expect_success \
 test_expect_success \
 	'Push the second patch with conflict' \
 	'
-	conflict_old stg push bar
+	conflict stg push bar
 	'
 
 test_expect_success \
@@ -55,7 +55,7 @@ test_expect_success \
 test_expect_success \
 	'Check the push after undo fails as well' \
 	'
-	conflict_old stg push bar
+	conflict stg push bar
 	'
 
 test_expect_success \
diff --git a/t/t1203-push-conflict.sh b/t/t1203-push-conflict.sh
index 96fee15..8027e6c 100755
--- a/t/t1203-push-conflict.sh
+++ b/t/t1203-push-conflict.sh
@@ -38,7 +38,7 @@ test_expect_success \
 test_expect_success \
 	'Push the first patch with conflict' \
 	'
-	conflict_old stg push foo
+	conflict stg push foo
 	'
 
 test_expect_success \
diff --git a/t/t1205-push-subdir.sh b/t/t1205-push-subdir.sh
index f852762..2d5918b 100755
--- a/t/t1205-push-subdir.sh
+++ b/t/t1205-push-subdir.sh
@@ -47,7 +47,7 @@ test_expect_success 'Conflicting push from subdir' '
     [ "$(echo $(cat x.txt))" = "x0" ] &&
     [ "$(echo $(cat foo/y.txt))" = "y0" ] &&
     cd foo &&
-    conflict_old stg push p2 &&
+    conflict stg push p2 &&
     cd .. &&
     [ "$(echo $(stg status --conflict))" = "foo/y.txt x.txt" ]
 '
diff --git a/t/t2500-clean.sh b/t/t2500-clean.sh
index 99fd29f..7f821f5 100755
--- a/t/t2500-clean.sh
+++ b/t/t2500-clean.sh
@@ -32,7 +32,7 @@ test_expect_success 'Create a conflict' '
     stg new p2 -m p2
     echo quux > foo.txt &&
     stg refresh &&
-    conflict_old stg push
+    conflict stg push
 '
 
 test_expect_success 'Make sure conflicting patches are preserved' '
Next: Karl Hasselström
Message 1 of 2 in “Convert "push" to the lib infrastructure”
  1. Convert "push" to the lib infrastructureCatalin Marinas, Mar 31, 2009
  2. Karl HasselströmApr 1, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.