[PATCH] stg delete --empty

Subsystems: the rest

STALE3737d

3 messages, 3 authors, 2016-06-15 · open the first message on its own page

[PATCH] stg delete --empty

From: Stepan Koltsov <hidden>
Date: 2016-06-15 22:53:33

`stg delete --empty` deletes all empty patches in series. Command
does nothing and exits with zero code if all patches are not empty.

--empty option can be useful in this workflow:

* you work on the patches
* you send patches to upstream (using stg export or stg mail)
* patches are committed to upstream after a while
* you do `git fetch && stg rebase origin`
* `stg rebase origin` makes applied to upstrem local patches empty
* now you can use stg delete --empty to cleanup

Signed-off-by: Stepan Koltsov <redacted>
---
stgit/commands/delete.py |   30 ++++++++++++++++++++++++--
t/t1603-delete-empty.sh  |   51 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 78 insertions(+), 3 deletions(-)
create mode 100755 t/t1603-delete-empty.sh
diff --git a/stgit/commands/delete.py b/stgit/commands/delete.py
index 84a057e..414f456 100644
--- a/stgit/commands/delete.py
+++ b/stgit/commands/delete.py
@@ -1,3 +1,4 @@
+from stgit.out import MessagePrinter
__copyright__ = """
Copyright (C) 2005, Catalin Marinas [off-list ref]
@@ -40,7 +41,9 @@ options = [
    opt('-b', '--branch', args = [argparse.stg_branches],
        short = 'Use BRANCH instead of the default branch'),
    opt('-t', '--top', action = 'store_true',
-        short = 'Delete top patch'),]
+        short = 'Delete top patch'),
+    opt('-e', '--empty', action = 'store_true',
+        short = 'Delete empty patches')]
directory = common.DirectoryHasRepositoryLib()
@@ -51,8 +54,17 @@ def func(parser, options, args):
        iw = None # can't use index/workdir to manipulate another branch
    else:
        iw = stack.repository.default_iw
-    if args and options.top:
-        parser.error('Either --top or patches must be specified')
+        
+    mode_count = 0
+    if args:
+        mode_count += 1
+    if options.top:
+        mode_count += 1
+    if options.empty:
+        mode_count += 1
+        
+    if mode_count > 1:
+        parser.error('Either --top or --empty or patches must be specified')
    elif args:
        patches = set(common.parse_patches(args, list(stack.patchorder.all),
                                           len(stack.patchorder.applied)))
@@ -62,6 +74,16 @@ def func(parser, options, args):
            patches = set([applied[-1]])
        else:
            raise common.CmdException, 'No patches applied'
+
+    elif options.empty:
+        patches_list = []
+        for p in stack.patchorder.all:
+            if stack.patches.get(p).is_empty():
+                patches_list.append(p)
+        if not patches_list:
+            out.info('No empty patches')
+            return 0
+        patches = set(patches_list)
    else:
        parser.error('No patches specified')
@@ -86,3 +108,5 @@ def func(parser, options, args):
    except transaction.TransactionHalted:
        pass
    return trans.run(iw)
+
+out = MessagePrinter()
diff --git a/t/t1603-delete-empty.sh b/t/t1603-delete-empty.sh
new file mode 100755
index 0000000..8a5630a
--- /dev/null
+++ b/t/t1603-delete-empty.sh
@@ -0,0 +1,51 @@
+#!/bin/sh -e
+# Copyright (c) 2012 Stepan Koltsov
+test_description='Test the delete --empty command.'
+
+. ./test-lib.sh
+
+test_expect_success \
+    'Initialize the StGIT repository' \
+    'stg init'
+
+test_expect_success \
+    'Create first real patch' \
+    '
+    stg new foo -m foo &&
+    echo foo > foo.txt &&
+    stg add foo.txt &&
+    stg refresh
+    '
+
+test_expect_success \
+    'Create second empty patch' \
+    'stg new bar -m bar'
+
+test_expect_success \
+    'Create third real patch' \
+    '
+    stg new baz -m foo &&
+    echo baz > baz.txt &&
+    stg add baz.txt &&
+    stg refresh
+    '
+
+test_expect_success \
+    'Create forth empty patch' \
+    'stg new qux -m qux'
+
+test_expect_success \
+    'Delete empty patches' \
+    '
+    stg delete --empty &&
+    [ "$(echo $(stg series --noprefix))" = "foo baz" ]
+    '
+
+test_expect_success \
+    'Delete empty patches again (i. e. delete nothing)' \
+    '
+    stg delete --empty &&
+    [ "$(echo $(stg series --noprefix))" = "foo baz" ]
+    '
+
+test_done
-- 
1.7.9.1

Re: [PATCH] stg delete --empty

From: Catalin Marinas <hidden>
Date: 2016-06-15 22:53:37

On 11 April 2012 15:12, Stepan Koltsov [off-list ref] wrote:
`stg delete --empty` deletes all empty patches in series. Command
does nothing and exits with zero code if all patches are not empty.
Thanks for the patch but there is already 'stg clean' with the same
functionality.

-- 
Catalin

Re: [PATCH] stg delete --empty

From: Stepan Koltsov <hidden>
Date: 2016-06-15 22:53:37

On 18.04.2012, at 15:03, Catalin Marinas [off-list ref] wrote:
On 11 April 2012 15:12, Stepan Koltsov [off-list ref] wrote:
quoted
`stg delete --empty` deletes all empty patches in series. Command
does nothing and exits with zero code if all patches are not empty.
Thanks for the patch but there is already 'stg clean' with the same
functionality.
My bad. Thank you.

-- 
Stepan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help