equal
deleted
inserted
replaced
235 self.lines = [] |
235 self.lines = [] |
236 self.exists = False |
236 self.exists = False |
237 self.missing = missing |
237 self.missing = missing |
238 if not missing: |
238 if not missing: |
239 try: |
239 try: |
240 fp = self.opener(fname, 'r') |
240 self.lines = self.readlines(fname) |
241 self.lines = fp.readlines() |
|
242 fp.close() |
|
243 self.exists = True |
241 self.exists = True |
244 except IOError: |
242 except IOError: |
245 pass |
243 pass |
246 else: |
244 else: |
247 self.ui.warn(_("unable to find '%s' for patching\n") % self.fname) |
245 self.ui.warn(_("unable to find '%s' for patching\n") % self.fname) |
251 self.offset = 0 |
249 self.offset = 0 |
252 self.rej = [] |
250 self.rej = [] |
253 self.fileprinted = False |
251 self.fileprinted = False |
254 self.printfile(False) |
252 self.printfile(False) |
255 self.hunks = 0 |
253 self.hunks = 0 |
|
254 |
|
255 def readlines(self, fname): |
|
256 fp = self.opener(fname, 'r') |
|
257 try: |
|
258 return fp.readlines() |
|
259 finally: |
|
260 fp.close() |
|
261 |
|
262 def writelines(self, fname, lines): |
|
263 fp = self.opener(fname, 'w') |
|
264 try: |
|
265 fp.writelines(lines) |
|
266 finally: |
|
267 fp.close() |
|
268 |
|
269 def unlink(self, fname): |
|
270 os.unlink(fname) |
256 |
271 |
257 def printfile(self, warn): |
272 def printfile(self, warn): |
258 if self.fileprinted: |
273 if self.fileprinted: |
259 return |
274 return |
260 if warn or self.ui.verbose: |
275 if warn or self.ui.verbose: |
302 |
317 |
303 fname = self.fname + ".rej" |
318 fname = self.fname + ".rej" |
304 self.ui.warn( |
319 self.ui.warn( |
305 _("%d out of %d hunks FAILED -- saving rejects to file %s\n") % |
320 _("%d out of %d hunks FAILED -- saving rejects to file %s\n") % |
306 (len(self.rej), self.hunks, fname)) |
321 (len(self.rej), self.hunks, fname)) |
307 base = os.path.basename(self.fname) |
322 |
308 fp = self.opener(fname, 'w') |
323 def rejlines(): |
309 fp.write("--- %s\n+++ %s\n" % (base, base)) |
324 base = os.path.basename(self.fname) |
310 for x in self.rej: |
325 yield "--- %s\n+++ %s\n" % (base, base) |
311 for l in x.hunk: |
326 for x in self.rej: |
312 fp.write(l) |
327 for l in x.hunk: |
313 if l[-1] != '\n': |
328 yield l |
314 fp.write("\n\ No newline at end of file\n") |
329 if l[-1] != '\n': |
315 fp.close() |
330 yield "\n\ No newline at end of file\n" |
|
331 |
|
332 self.writelines(fname, rejlines()) |
316 |
333 |
317 def write(self, dest=None): |
334 def write(self, dest=None): |
318 if not self.dirty: |
335 if not self.dirty: |
319 return |
336 return |
320 if not dest: |
337 if not dest: |
321 dest = self.fname |
338 dest = self.fname |
322 fp = self.opener(dest, 'w') |
339 self.writelines(dest, self.lines) |
323 for l in self.lines: |
|
324 fp.write(l) |
|
325 fp.close() |
|
326 |
340 |
327 def close(self): |
341 def close(self): |
328 self.write() |
342 self.write() |
329 self.write_rej() |
343 self.write_rej() |
330 |
344 |
347 self.rej.append(h) |
361 self.rej.append(h) |
348 return -1 |
362 return -1 |
349 |
363 |
350 if isinstance(h, binhunk): |
364 if isinstance(h, binhunk): |
351 if h.rmfile(): |
365 if h.rmfile(): |
352 os.unlink(self.fname) |
366 self.unlink(self.fname) |
353 else: |
367 else: |
354 self.lines[:] = h.new() |
368 self.lines[:] = h.new() |
355 self.offset += len(h.new()) |
369 self.offset += len(h.new()) |
356 self.dirty = 1 |
370 self.dirty = 1 |
357 return 0 |
371 return 0 |
364 else: |
378 else: |
365 start = h.starta + self.offset - 1 |
379 start = h.starta + self.offset - 1 |
366 orig_start = start |
380 orig_start = start |
367 if diffhelpers.testhunk(old, self.lines, start) == 0: |
381 if diffhelpers.testhunk(old, self.lines, start) == 0: |
368 if h.rmfile(): |
382 if h.rmfile(): |
369 os.unlink(self.fname) |
383 self.unlink(self.fname) |
370 else: |
384 else: |
371 self.lines[start : start + h.lena] = h.new() |
385 self.lines[start : start + h.lena] = h.new() |
372 self.offset += h.lenb - h.lena |
386 self.offset += h.lenb - h.lena |
373 self.dirty = 1 |
387 self.dirty = 1 |
374 return 0 |
388 return 0 |