~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to shelf.py

  • Committer: Aaron Bentley
  • Date: 2006-05-10 01:37:35 UTC
  • mfrom: (0.1.108 shelf)
  • Revision ID: aaron.bentley@utoronto.ca-20060510013735-7b223d3be37ee6b1
Merge Michael's shelf updates

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
 
57
57
    def delete(self, patch):
58
58
        path = self.__path_from_user(patch)
59
 
        os.remove(path)
 
59
        os.rename(path, '%s~' % path)
60
60
 
61
61
    def display(self, patch):
62
62
        path = self.__path_from_user(patch)
130
130
            return None
131
131
        return patch[len(self.MESSAGE_PREFIX):patch.index('\n')]
132
132
 
133
 
    def unshelve(self, patch_source, all_hunks=False, force=False):
 
133
    def unshelve(self, patch_source, all=False, force=False):
134
134
        self._check_upgrade()
135
135
 
136
136
        patch_name = self.last_patch()
138
138
        if patch_name is None:
139
139
            raise CommandError("No patch found on shelf %s" % self.name)
140
140
 
141
 
        hunks = FilePatchSource(patch_name).readhunks()
142
 
        if all_hunks:
143
 
            to_unshelve = hunks
 
141
        patches = FilePatchSource(patch_name).readpatches()
 
142
        if all:
 
143
            to_unshelve = patches
144
144
            to_remain = []
145
145
        else:
146
 
            to_unshelve, to_remain = UnshelveHunkSelector(hunks).select()
 
146
            to_unshelve, to_remain = UnshelveHunkSelector(patches).select()
147
147
 
148
148
        if len(to_unshelve) == 0:
149
149
            raise CommandError('Nothing to unshelve')
159
159
            self._run_patch(to_unshelve)
160
160
        except PatchFailed:
161
161
            try:
162
 
                self._run_patch(to_unshelve, strip=0, dry_run=True)
163
 
                self._run_patch(to_unshelve, strip=0)
 
162
                self._run_patch(to_unshelve, strip=1, dry_run=True)
 
163
                self._run_patch(to_unshelve, strip=1)
164
164
            except PatchFailed:
165
165
                if force:
166
166
                    self.log('Warning: Unshelving failed, forcing as ' \
178
178
 
179
179
        if len(to_remain) > 0:
180
180
            f = open(patch_name, 'w')
181
 
            for hunk in to_remain:
182
 
                f.write(str(hunk))
 
181
            for patch in to_remain:
 
182
                f.write(str(patch))
183
183
            f.close()
184
184
 
185
 
    def shelve(self, patch_source, all_hunks=False, message=None):
 
185
    def shelve(self, patch_source, all=False, message=None):
186
186
        self._check_upgrade()
187
187
 
188
 
        hunks = patch_source.readhunks()
 
188
        patches = patch_source.readpatches()
189
189
 
190
 
        if all_hunks:
191
 
            to_shelve = hunks
 
190
        if all:
 
191
            to_shelve = patches
192
192
        else:
193
 
            to_shelve = ShelveHunkSelector(hunks).select()[0]
 
193
            to_shelve = ShelveHunkSelector(patches).select()[0]
194
194
 
195
195
        if len(to_shelve) == 0:
196
196
            raise CommandError('Nothing to shelve')
203
203
        self.log('Shelving to %s/%s: "%s"\n' % \
204
204
                (self.name, os.path.basename(patch_name), message))
205
205
 
206
 
        patch = open(patch_name, 'a')
 
206
        f = open(patch_name, 'a')
207
207
 
208
208
        assert '\n' not in message
209
 
        patch.write("%s%s\n" % (self.MESSAGE_PREFIX, message))
210
 
 
211
 
        for hunk in to_shelve:
212
 
            patch.write(str(hunk))
213
 
 
214
 
        patch.flush()
215
 
        os.fsync(patch.fileno())
216
 
        patch.close()
 
209
        f.write("%s%s\n" % (self.MESSAGE_PREFIX, message))
 
210
 
 
211
        for patch in to_shelve:
 
212
            f.write(str(patch))
 
213
 
 
214
        f.flush()
 
215
        os.fsync(f.fileno())
 
216
        f.close()
217
217
 
218
218
        try:
219
219
            self._run_patch(to_shelve, reverse=True, dry_run=True)
220
220
            self._run_patch(to_shelve, reverse=True)
221
221
        except PatchFailed:
222
222
            try:
223
 
                self._run_patch(to_shelve, reverse=True, strip=0, dry_run=True)
224
 
                self._run_patch(to_shelve, reverse=True, strip=0)
 
223
                self._run_patch(to_shelve, reverse=True, strip=1, dry_run=True)
 
224
                self._run_patch(to_shelve, reverse=True, strip=1)
225
225
            except PatchFailed:
226
226
                raise CommandError("Failed removing shelved changes from the"
227
227
                    "working tree!")
228
228
 
229
 
    def _run_patch(self, patches, strip=1, reverse=False, dry_run=False):
 
229
    def _run_patch(self, patches, strip=0, reverse=False, dry_run=False):
230
230
        args = ['patch', '-d', self.base, '-s', '-p%d' % strip, '-f']
231
231
        if reverse:
232
232
            args.append('-R')