~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to shelf.py

  • Committer: Aaron Bentley
  • Date: 2005-08-17 17:17:02 UTC
  • Revision ID: abentley@panoramicfeedback.com-20050817171702-7f9f39c0b88c72ce
Added support for shelve messages

Show diffs side-by-side

added added

removed removed

Lines of Context:
66
66
        return None
67
67
    return stem + shelf_suffix(shelvenums[-1])
68
68
 
 
69
def get_shelf_message(shelf):
 
70
    prefix = "# shelf: "
 
71
    if not shelf.startswith(prefix):
 
72
        return None
 
73
    return shelf[len(prefix):shelf.index('\n')]
 
74
 
69
75
def unshelve():
70
76
    shelf = last_shelf()
71
77
 
74
80
 
75
81
    patch = open(shelf, 'r').read()
76
82
 
77
 
    print >>sys.stderr, "Reapplying shelved patches"
 
83
    print >>sys.stderr, "Reapplying shelved patches",
 
84
    message = get_shelf_message(patch)
 
85
    if message is not None:
 
86
        print >>sys.stderr, ' "%s"' % message
 
87
    else:
 
88
        print >>sys.stderr, ""
78
89
    pipe = os.popen('patch -d %s -s -p0' % tree_root(), 'w')
79
90
    pipe.write(patch)
80
91
    pipe.flush()
91
102
class QuitException(Exception):
92
103
    pass
93
104
 
94
 
def shelve():
 
105
def shelve(message = None):
95
106
    patches = parse_patches(run_bzr('diff'))
96
107
    try:
97
108
        patches = HunkSelector(patches).select()
105
116
    shelf = next_shelf()
106
117
    print >>sys.stderr, "Saving shelved patches to", shelf
107
118
    shelf = open(shelf, 'a')
108
 
 
 
119
    if message is not None:
 
120
        assert '\n' not in message
 
121
        shelf.write("# shelf: %s\n" % message)
109
122
    for patch in patches:
110
123
        shelf.write(str(patch))
111
124
 
140
153
    """Temporarily remove some changes from the current tree.
141
154
    Use 'unshelve' to restore these changes.
142
155
    """
143
 
 
144
 
    def run(self):
145
 
        return shelve()
 
156
    takes_options = ['message']
 
157
    def run(self, message=None):
 
158
        return shelve(message)
146
159
 
147
160
class cmd_unshelve(Command):
148
161
    """Restore previously-shelved changes to the current tree.