57
57
def delete(self, patch):
58
58
path = self.__path_from_user(patch)
59
os.rename(path, '%s~' % path)
61
61
def display(self, patch):
62
62
path = self.__path_from_user(patch)
131
131
return patch[len(self.MESSAGE_PREFIX):patch.index('\n')]
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()
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)
141
hunks = FilePatchSource(patch_name).readhunks()
141
patches = FilePatchSource(patch_name).readpatches()
143
to_unshelve = patches
146
to_unshelve, to_remain = UnshelveHunkSelector(hunks).select()
146
to_unshelve, to_remain = UnshelveHunkSelector(patches).select()
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:
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:
166
166
self.log('Warning: Unshelving failed, forcing as ' \
179
179
if len(to_remain) > 0:
180
180
f = open(patch_name, 'w')
181
for hunk in to_remain:
181
for patch in to_remain:
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()
188
hunks = patch_source.readhunks()
188
patches = patch_source.readpatches()
193
to_shelve = ShelveHunkSelector(hunks).select()[0]
193
to_shelve = ShelveHunkSelector(patches).select()[0]
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))
206
patch = open(patch_name, 'a')
206
f = open(patch_name, 'a')
208
208
assert '\n' not in message
209
patch.write("%s%s\n" % (self.MESSAGE_PREFIX, message))
211
for hunk in to_shelve:
212
patch.write(str(hunk))
215
os.fsync(patch.fileno())
209
f.write("%s%s\n" % (self.MESSAGE_PREFIX, message))
211
for patch in to_shelve:
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:
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"
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']
232
232
args.append('-R')