~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to __init__.py

Merge most of the standalone shelf branch. This brings in a few changes which
make it easier to write a standalone shelf, although not all of them.
There's also a bunch of new features, tests, etc.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/python
2
2
"""Shelf - temporarily set aside changes, then bring them back."""
3
3
 
4
 
from sys import stderr
5
4
import bzrlib.commands
6
5
import bzrlib.branch
7
 
from bzrlib.errors import BzrCommandError
 
6
from errors import CommandError
8
7
from bzrlib.option import Option
 
8
from patchsource import BzrPatchSource
9
9
from shelf import Shelf
 
10
from bzrlib import DEFAULT_IGNORE
 
11
 
 
12
DEFAULT_IGNORE.append('./.shelf')
10
13
 
11
14
class cmd_shelve(bzrlib.commands.Command):
12
15
    """Temporarily set aside some changes to the current working tree.
29
32
    takes_args = ['file*']
30
33
    takes_options = [Option('pick'), 'message', 'revision']
31
34
    def run(self, pick=False, file_list=None, message=None, revision=None):
32
 
        if file_list is not None and len(file_list) > 0:
33
 
            branchdir = file_list[0]
34
 
        else:
35
 
            branchdir = '.'
36
 
 
37
35
        if revision is not None and revision:
38
36
            if len(revision) == 1:
39
37
                revision = revision[0]
40
38
            else:
41
 
                raise BzrCommandError("shelve only accepts a single revision "
 
39
                raise CommandError("shelve only accepts a single revision "
42
40
                                  "parameter.")
43
41
 
44
 
        s = Shelf(branchdir)
45
 
        s.shelve(pick, message, revision, file_list)
 
42
        source = BzrPatchSource(revision, file_list)
 
43
        s = Shelf(source.branch.base)
 
44
        s.shelve(source, pick, message)
46
45
        return 0
47
46
 
 
47
class cmd_shelf(bzrlib.commands.Command):
 
48
    """Perform various operations on your shelved patches.
 
49
 
 
50
    Subcommands:
 
51
        list   (ls)           List the patches on the current shelf.
 
52
        delete (del) <patch>  Delete a patch from the current shelf.
 
53
        switch       <shelf>  Switch to the named shelf, create it if necessary.
 
54
        show         <patch>  Show the contents of the specified patch.
 
55
    """
 
56
    takes_args = ['subcommand', 'args*']
 
57
 
 
58
    def run(self, subcommand, args_list):
 
59
        import sys
 
60
 
 
61
        source = BzrPatchSource()
 
62
        s = Shelf(source.branch.base)
 
63
 
 
64
        if subcommand == 'ls' or subcommand == 'list':
 
65
            self.__check_no_args(args_list, "shelf list takes no arguments!")
 
66
            s.list()
 
67
        elif subcommand == 'delete' or subcommand == 'del':
 
68
            self.__check_one_arg(args_list, "shelf delete takes one argument!")
 
69
            s.delete(args_list[0])
 
70
        elif subcommand == 'switch':
 
71
            self.__check_one_arg(args_list, "shelf switch takes one argument!")
 
72
            s = Shelf(source.branch.base, args_list[0])
 
73
            s.make_default()
 
74
        elif subcommand == 'show':
 
75
            self.__check_one_arg(args_list, "shelf show takes one argument!")
 
76
            s.display(args_list[0])
 
77
        else:
 
78
            print subcommand, args_list
 
79
            print >>sys.stderr, "Unknown shelf subcommand '%s'" % subcommand
 
80
 
 
81
    def __check_one_arg(self, args, msg):
 
82
        if args is None or len(args) != 1:
 
83
            raise BzrCommandError(msg)
 
84
 
 
85
    def __check_no_args(self, args, msg):
 
86
        if args is not None:
 
87
            raise BzrCommandError(msg)
 
88
 
48
89
class cmd_unshelve(bzrlib.commands.Command):
49
90
    """Reinstate the most recently shelved changes.
50
91
    See 'shelve' for more information.
51
92
    """
52
93
    takes_options = [Option('pick')]
53
94
    def run(self, pick=False):
54
 
        s = Shelf('.')
55
 
        s.unshelve(pick)
 
95
        source = BzrPatchSource()
 
96
        s = Shelf(source.branch.base)
 
97
        s.unshelve(source, pick)
56
98
        return 0
57
99
 
 
100
bzrlib.commands.register_command(cmd_shelf)
58
101
bzrlib.commands.register_command(cmd_shelve)
59
102
bzrlib.commands.register_command(cmd_unshelve)
60
103