comparison fetch_command.py @ 200:2e8c527f0456

stupid replay: Don't actually try and apply diffs to files we don't have anyway.
author Augie Fackler <durin42@gmail.com>
date Mon, 02 Mar 2009 23:50:40 -0600
parents df4611050286
children 907c160c6289
comparison
equal deleted inserted replaced
199:91db8fc049b0 200:2e8c527f0456
198 def unlink(self, fname): 198 def unlink(self, fname):
199 files[fname] = None 199 files[fname] = None
200 200
201 return mempatch 201 return mempatch
202 202
203
204 def filteriterhunks(hg_editor):
205 iterhunks = patch.iterhunks
206 def filterhunks(ui, fp, sourcefile=None):
207 applycurrent = False
208 for data in iterhunks(ui, fp, sourcefile):
209 if data[0] == 'file':
210 if hg_editor._is_file_included(data[1][1]):
211 applycurrent = True
212 else:
213 applycurrent = False
214 assert data[0] != 'git', 'Filtering git hunks not supported.'
215 if applycurrent:
216 yield data
217 return filterhunks
218
203 def stupid_diff_branchrev(ui, svn, hg_editor, branch, r, parentctx): 219 def stupid_diff_branchrev(ui, svn, hg_editor, branch, r, parentctx):
204 """Extract all 'branch' content at a given revision. 220 """Extract all 'branch' content at a given revision.
205 221
206 Return a tuple (files, filectxfn) where 'files' is the list of all files 222 Return a tuple (files, filectxfn) where 'files' is the list of all files
207 in the branch at the given revision, and 'filectxfn' is a memctx compatible 223 in the branch at the given revision, and 'filectxfn' is a memctx compatible
252 # are marked as touched. Content is loaded on demand. 268 # are marked as touched. Content is loaded on demand.
253 touched_files[f] = 1 269 touched_files[f] = 1
254 if d2.strip() and len(re.findall('\n[-+]', d2.strip())) > 0: 270 if d2.strip() and len(re.findall('\n[-+]', d2.strip())) > 0:
255 try: 271 try:
256 oldpatchfile = patch.patchfile 272 oldpatchfile = patch.patchfile
273 olditerhunks = patch.iterhunks
257 patch.patchfile = mempatchproxy(parentctx, files_data) 274 patch.patchfile = mempatchproxy(parentctx, files_data)
275 patch.iterhunks = filteriterhunks(hg_editor)
258 try: 276 try:
259 # We can safely ignore the changed list since we are 277 # We can safely ignore the changed list since we are
260 # handling non-git patches. Touched files are known 278 # handling non-git patches. Touched files are known
261 # by our memory patcher. 279 # by our memory patcher.
262 patch_st = patch.applydiff(ui, cStringIO.StringIO(d2), 280 patch_st = patch.applydiff(ui, cStringIO.StringIO(d2),
263 {}, strip=0) 281 {}, strip=0)
264 finally: 282 finally:
265 patch.patchfile = oldpatchfile 283 patch.patchfile = oldpatchfile
284 patch.iterhunks = olditerhunks
266 except patch.PatchError: 285 except patch.PatchError:
267 # TODO: this happens if the svn server has the wrong mime 286 # TODO: this happens if the svn server has the wrong mime
268 # type stored and doesn't know a file is binary. It would 287 # type stored and doesn't know a file is binary. It would
269 # be better to do one file at a time and only do a 288 # be better to do one file at a time and only do a
270 # full fetch on files that had problems. 289 # full fetch on files that had problems.