mercurial/patch.py
changeset 3696 562a65635bcb
parent 3695 3a2fc90d27d6
child 3701 05c8704a3743
equal deleted inserted replaced
3695:3a2fc90d27d6 3696:562a65635bcb
   465         modified, added, removed = map(filterfiles, (modified, added, removed))
   465         modified, added, removed = map(filterfiles, (modified, added, removed))
   466 
   466 
   467     if not modified and not added and not removed:
   467     if not modified and not added and not removed:
   468         return
   468         return
   469 
   469 
       
   470     # returns False if there was no rename between n1 and n2
       
   471     # returns None if the file was created between n1 and n2
       
   472     # returns the (file, node) present in n1 that was renamed to f in n2
   470     def renamedbetween(f, n1, n2):
   473     def renamedbetween(f, n1, n2):
   471         r1, r2 = map(repo.changelog.rev, (n1, n2))
   474         r1, r2 = map(repo.changelog.rev, (n1, n2))
   472         orig = f
   475         orig = f
   473         src = None
   476         src = None
   474         while r2 > r1:
   477         while r2 > r1:
   481                     return None
   484                     return None
   482                 if src:
   485                 if src:
   483                     f = src[0]
   486                     f = src[0]
   484             n2 = repo.changelog.parents(n2)[0]
   487             n2 = repo.changelog.parents(n2)[0]
   485             r2 = repo.changelog.rev(n2)
   488             r2 = repo.changelog.rev(n2)
   486         if orig == f:
       
   487             return None
       
   488         cl = getchangelog(n1)
   489         cl = getchangelog(n1)
   489         m = getmanifest(cl[0])
   490         m = getmanifest(cl[0])
   490         if f not in m:
   491         if f not in m:
   491             return None
   492             return None
       
   493         if f == orig:
       
   494             return False
   492         return f, m[f]
   495         return f, m[f]
   493 
   496 
   494     if node2:
   497     if node2:
   495         change = getchangelog(node2)
   498         change = getchangelog(node2)
   496         mmap2 = getmanifest(change[0])
   499         mmap2 = getmanifest(change[0])
   516             src = repo.dirstate.copied(f)
   519             src = repo.dirstate.copied(f)
   517             parent = repo.dirstate.parents()[0]
   520             parent = repo.dirstate.parents()[0]
   518             if src:
   521             if src:
   519                 f = src
   522                 f = src
   520             of = renamedbetween(f, node1, parent)
   523             of = renamedbetween(f, node1, parent)
   521             if of:
   524             if of or of is None:
   522                 return of
   525                 return of
   523             elif src:
   526             elif src:
   524                 cl = getchangelog(parent)[0]
   527                 cl = getchangelog(parent)[0]
   525                 return (src, getmanifest(cl)[src])
   528                 return (src, getmanifest(cl)[src])
   526             else:
   529             else: