mercurial/patch.py
changeset 13701 bc38ff7cb919
parent 13700 63307feb59dd
child 13751 85d74f6babf6
equal deleted inserted replaced
13700:63307feb59dd 13701:bc38ff7cb919
   607                         return fuzzlen
   607                         return fuzzlen
   608         self.printfile(True)
   608         self.printfile(True)
   609         self.ui.warn(_("Hunk #%d FAILED at %d\n") % (h.number, orig_start))
   609         self.ui.warn(_("Hunk #%d FAILED at %d\n") % (h.number, orig_start))
   610         self.rej.append(horig)
   610         self.rej.append(horig)
   611         return -1
   611         return -1
       
   612 
       
   613     def close(self):
       
   614         if self.dirty:
       
   615             self.writelines(self.fname, self.lines)
       
   616         self.write_rej()
       
   617         return len(self.rej)
   612 
   618 
   613 class hunk(object):
   619 class hunk(object):
   614     def __init__(self, desc, num, lr, context, create=False, remove=False):
   620     def __init__(self, desc, num, lr, context, create=False, remove=False):
   615         self.number = num
   621         self.number = num
   616         self.desc = desc
   622         self.desc = desc
  1105     err = 0
  1111     err = 0
  1106     current_file = None
  1112     current_file = None
  1107     cwd = os.getcwd()
  1113     cwd = os.getcwd()
  1108     opener = util.opener(cwd)
  1114     opener = util.opener(cwd)
  1109 
  1115 
  1110     def closefile():
       
  1111         if not current_file:
       
  1112             return 0
       
  1113         if current_file.dirty:
       
  1114             current_file.writelines(current_file.fname, current_file.lines)
       
  1115         current_file.write_rej()
       
  1116         return len(current_file.rej)
       
  1117 
       
  1118     for state, values in iterhunks(ui, fp):
  1116     for state, values in iterhunks(ui, fp):
  1119         if state == 'hunk':
  1117         if state == 'hunk':
  1120             if not current_file:
  1118             if not current_file:
  1121                 continue
  1119                 continue
  1122             ret = current_file.apply(values)
  1120             ret = current_file.apply(values)
  1123             if ret >= 0:
  1121             if ret >= 0:
  1124                 changed.setdefault(current_file.fname, None)
  1122                 changed.setdefault(current_file.fname, None)
  1125                 if ret > 0:
  1123                 if ret > 0:
  1126                     err = 1
  1124                     err = 1
  1127         elif state == 'file':
  1125         elif state == 'file':
  1128             rejects += closefile()
  1126             if current_file:
       
  1127                 rejects += current_file.close()
  1129             afile, bfile, first_hunk = values
  1128             afile, bfile, first_hunk = values
  1130             try:
  1129             try:
  1131                 current_file, missing = selectfile(afile, bfile,
  1130                 current_file, missing = selectfile(afile, bfile,
  1132                                                    first_hunk, strip)
  1131                                                    first_hunk, strip)
  1133                 current_file = patcher(ui, current_file, opener,
  1132                 current_file = patcher(ui, current_file, opener,
  1148                     copyfn(gp.oldpath, gp.path, cwd)
  1147                     copyfn(gp.oldpath, gp.path, cwd)
  1149                 changed[gp.path] = gp
  1148                 changed[gp.path] = gp
  1150         else:
  1149         else:
  1151             raise util.Abort(_('unsupported parser state: %s') % state)
  1150             raise util.Abort(_('unsupported parser state: %s') % state)
  1152 
  1151 
  1153     rejects += closefile()
  1152     if current_file:
       
  1153         rejects += current_file.close()
  1154 
  1154 
  1155     if rejects:
  1155     if rejects:
  1156         return -1
  1156         return -1
  1157     return err
  1157     return err
  1158 
  1158