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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxxxx>
---
 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' '

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux