~lifeless/bzrtools/trunk

« back to all changes in this revision

Viewing changes to shelf.py

  • Committer: Robert Collins
  • Date: 2008-07-08 04:10:56 UTC
  • Revision ID: robertc@robertcollins.net-20080708041056-f4c2a420k479zmxh
Teach shelve to create a merge --interactive.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
import subprocess
4
4
from datetime import datetime
5
5
from errors import CommandError, PatchFailed, PatchInvokeError
6
 
from hunk_selector import ShelveHunkSelector, UnshelveHunkSelector
 
6
from hunk_selector import ShelveHunkSelector, UnshelveHunkSelector, MergeHunkSelector
7
7
from patch import run_patch
8
8
from patchsource import PatchSource, FilePatchSource
9
9
from bzrlib.osutils import rename
196
196
                f.write(str(patch))
197
197
            f.close()
198
198
 
199
 
    def shelve(self, patch_source, all=False, message=None, no_color=False):
 
199
    def shelve(self, patch_source, all=False, message=None, no_color=False, merge_mode=False):
200
200
        self._check_upgrade()
201
201
        if no_color is False:
202
202
            color = None
207
207
 
208
208
        if all:
209
209
            to_shelve = patches
 
210
        elif merge_mode:
 
211
            to_shelve = MergeHunkSelector(patches, color).select()[1]
210
212
        else:
211
213
            to_shelve = ShelveHunkSelector(patches, color).select()[0]
212
214
 
 
215
        if merge_mode:
 
216
            try:
 
217
                self._run_patch(to_shelve, reverse=True, dry_run=True)
 
218
                self._run_patch(to_shelve, reverse=True)
 
219
            except PatchFailed:
 
220
                try:
 
221
                    self._run_patch(to_shelve, reverse=True, strip=1, dry_run=True)
 
222
                    self._run_patch(to_shelve, reverse=True, strip=1)
 
223
                except PatchFailed:
 
224
                    raise CommandError("Failed removing unwanted changes from the"
 
225
                        "working tree!")
 
226
            return
 
227
 
213
228
        if len(to_shelve) == 0:
214
229
            raise CommandError('Nothing to shelve')
215
230